안녕하세요, caver-js과 react로 klaytn Bapp을 위한 인터페이스를 구현해보고 있습니다.
caver-js 이용해 klaytn cypress에 배포된 contract의 함수를 실행하는 과정에서 문제가 있어 질문을 드립니다.
우선, truffle로 컨트랙트 배포를 잘 했고, truffle을 이용해 script로 직접 컨트랙트의 함수를 호출할때는 잘 동작합니다.
헌데 UI구현을 해보기 위해 kaikas 지갑을 가져와서 caver-js로 컨트랙트의 함수를 호출해보았는데,
자꾸 “Kaikas는 한 번에 하나의 트랜잭션만 처리합니다. Kaikas를 열어 대기 중인 트랜잭션을 새로고침 해주세요. 만약 대기 상태가 계속된다면 이용 중인 서비스가 트랜잭션을 처리하지 않는 것이니 트랜잭션을 취소바랍니다.” 라는 에러가 뜨면서 transaction이 실행되지 않습니다.
주요 코드는 아래와 같습니다.
const caver = new Caver(window.klaytn)
const MyContract = ContractAbi
&& ContractAddr
&& new caver.contract(ContractAbi, ContractAddr)
const result = await MyContract.methods.readFunc().call() // 잘동작함
...
await MyContract.methods.writeFunc(argument).send({ from:account, value: amount, gas:3000000 }) // 문제 발생
참고로 writeFunc대신에 아래와 같이 KLAY를 전송하는 kaikas 예제를 수행했을 때는 문제없이 동작합니다.
await caver.klay.sendTransaction({
type: 'VALUE_TRANSFER',
from: fromAddr,
to: toAddr,
value: caver.utils.toPeb(amount, 'KLAY'),
gas:3000000,
})
어떤 부분이 문제인건지 알수 있을지요?
사용한 caver-js 버젼은 1.6.4입니다.
그리고, caver-js를 써서 kaikas나 metamask를 이용해 klaytn bapp과 연결을 맺고 transaction을 날리는 것까지 잘 동작하는 프로그램 예제소스를 혹시 아신다면 큰 도움이 될것 같습니다만 아시는 분이 있다면 공유좀 부탁드립니다.
공식 예제 프로그램인 countbapp과 klaystagram은 지갑 연결이 구현되어있지 않고, 또 테스트를 해보니 UI까지는 뜨지만 실제 transaction이 제대로 실행되지 않는 문제가 있었습니다.
감사합니다.