Caver js에서 methods send와 sendTransaction의 차이

caver js로 실습하던 중에 궁금증이 생겨 질문 납깁니다. ^^

지갑으로는 카이카스 지갑을 연동하여 사용하고 있었습니다.

함수를 실행하면 새로운 NFT를 발행해주는 예제 코드를 실습하고 있었는데
예를들어 파라미터로 params를 받는 myFunction을 실행하고 싶다고 치면
Contract.methods.myFunction"(params).send({ from: address, gas: '1000000' }); 로는 트랜잭션이 정상적으로 실행되지 않고
자꾸 지갑 화면에서 확인 버튼이 비활성화된 상태로 넘어가지 않더군요.
‘트랜잭션은 한번에 하나만 실행할 수 있고, 대기상태가 지속되면 실행할 수 없는 트랜잭션이니 거부를 누르라’
라는 식의 오류 메시지가 뜨고 진행이 안 되어서 한참을 애먹고 있었는데
(화면 캡처를 까먹었네요~^^;:wink:
(Contract.send({ from: address, gas: '1000000' }, 'myFunction', params);도 똑같이 실행이 되지 않습니다.)

혹시나 해서

caver.klay.sendTransaction({
  type: 'SMART_CONTRACT_EXECUTION',
  from: address,
  to: CONTRACT_ADDRESS,
  data: caver.klay.abi.encodeFunctionCall( myFunction ABI, params ),
  gas: '1000000'
})

로 실행하니 정상적으로 실행되더군요 ㅎㅎ

어떤 차이가 있는 건지,
위의 경우 왜 정상적으로 실행이 안 되는 건지 궁금합니다~^^

참고로 call()을 하는 경우에는 정상적으로 실행되는 걸로 봐서
Contract 자체에 문제가 있는 건 아닐 것 같네요.

Contract는 어떤 것을 사용하셨나요?
caver.contractcaver.klay.Contract는 동작방식이 조금 다릅니다.

기존에 제공되고 있던 caver.klay.Contract는 아래에 주신 예제와 같이 common architecture 이전의 트랜잭션 타입과 함께 동작하는 형태입니다.
그리고 caver.contract는 common architecture 이후의 트랜잭션들과 함께 동작하며, 내부 로직에서 사용되는 트랜잭션의 형태는 아래와 같습니다.

caver.transaction.smartContractExecution.create({
    from: address,
    ...
})

차이점은 이렇게만 존재하며, 아마 카이카스에서 이 두가지 동작방식에 따라서 동작이 어떻게 되는지는 카이카스로 다시 질문 올려주시면 감사하겠습니다.

저도 동일한 이슈가 있어서 두번째 방식으로 해결했습니다.
카이카스 문제인 것 같아요.