Caver를 이용해 contract 함수 호출시 Kaikas 에러

안녕하세요, 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이 제대로 실행되지 않는 문제가 있었습니다.

감사합니다.

1 Like

안녕하세요.
카이카스의 문서github 링크 공유드립니다.
문서에 연동 및 전송 예제소스를 참고 부탁드립니다.
감사합니다.

답변 감사합니다. 해당 예제들도 확인하고 돌려봤습니다만, caver의 contract object를 사용한 예제가 없는것 같습니다.

해당 예제에서 caver.klay.sendTransaction 을 이용해 Klay를 전송하거나, contract 함수를 호출할 때는 문제가 없었습니다. 동일한 함수 콜을 caver의 contract object를 이용해 수행하면 문제가 발생했습니다. caver 버젼 호환성 이슈일까요?

1 Like

원인은 정확히 알 수 없지만 caver 최신 버젼에 대한 호환성 이슈처럼 보입니다.

우선 kaikas가 자체적으로 포함하는 caver (버젼 1.4)를 사용했을 때는 위와 같은 문제가 발생하지 않았습니다.

2 Likes