잘되던 소스인데 갑자기 수수료 위임 에러

안녕하세요. 잘 되던 소스인데 갑자기 오류가 발생해서 질문드립니다.

const receipt = await getContract()

                .methods.setCustomer(blockchain_account)

                .send({

                    from: config.CONTRACT_OWNER,

                    gas: "0x4bfd200",

                    feePayer: config.FEE_PAYER,

                    feeDelegation: true

                });

위와 같은 형식으로 사용해왔는데 아래와 같은 에러가 뜨게 되어 doc를 찾아보았는데 달라진건 없어보여서 확인 한번 부탁드립니다.

Error: Invalid JSON RPC response: {“code”:1034210,“message”:“Unsupported method - klay_signTransactionAsFeePayer”,“requestId”:“26cdeab9-4482-4f84-bd37-0dde470ad9f5”}
[1] at Object.InvalidResponse (C:\Users\ymkim\project\mm-server\node_modules\caver-js-ext-kas\node_modules\caver-js\packages\caver-core-helpers\src\errors.js:92:16)
[1] at C:\Users\ymkim\project\mm-server\node_modules\caver-js-ext-kas\node_modules\caver-js\packages\caver-core-requestmanager\src\index.js:159:44
[1] at XMLHttpRequest.request.onreadystatechange (C:\Users\ymkim\project\mm-server\node_modules\caver-js-ext-kas\node_modules\caver-js\packages\caver-core-requestmanager\caver-providers-http\src\index.js:119:13)
[1] at XMLHttpRequestEventTarget.dispatchEvent (C:\Users\ymkim\project\mm-server\node_modules\xhr2-cookies\xml-http-request-event-target.ts:44:13)
[1] at XMLHttpRequest._setReadyState (C:\Users\ymkim\project\mm-server\node_modules\xhr2-cookies\xml-http-request.ts:219:8)
[1] at XMLHttpRequest._onHttpResponseEnd (C:\Users\ymkim\project\mm-server\node_modules\xhr2-cookies\xml-http-request.ts:345:8)
[1] at IncomingMessage. (C:\Users\ymkim\project\mm-server\node_modules\xhr2-cookies\xml-http-request.ts:311:39)
[1] at IncomingMessage.emit (events.js:326:22)
[1] at endReadableNT (_stream_readable.js:1241:12)
[1] at processTicksAndRejections (internal/process/task_queues.js:84:21)

안녕하세요
어떤 노드 사용하고 계신가요?

kas 이용하고 있습니다. 원인을 모르겠습니다…

안녕하세요, KAS를 사용하고 계시다면 아마 Node API를 통해 RPC 요청을 하셨을 것으로 보이는데요.
해당 RPC Method는 KAS Node API에서 제공하고 있지 않습니다. KAS Node API에서 제공하는 Method는 아래 링크들에서 확인하실 수 있습니다.

감사합니다.

Error: Provider not set or invalid
[1] at Object.InvalidProvider (/mnt/vol1/IDND/mm-server/node_modules/caver-js-ext-kas/node_modules/caver-js/packages/caver-core-helpers/src/errors.js:80:28)
[1] at RequestManager.send (/mnt/vol1/IDND/mm-server/node_modules/caver-js-ext-kas/node_modules/caver-js/packages/caver-core-requestmanager/src/index.js:118:32)
[1] at /mnt/vol1/IDND/mm-server/node_modules/caver-js-ext-kas/node_modules/caver-js/packages/caver-core-method/src/index.js:437:34
[1] at Object.getAccountKey (/mnt/vol1/IDND/mm-server/node_modules/caver-js-ext-kas/node_modules/caver-js/packages/caver-core-method/src/index.js:452:9)
[1] at KASWallet.sign (/mnt/vol1/IDND/mm-server/node_modules/caver-js-ext-kas/src/wallet/kasWallet.js:161:70)
[1] at Object._executeMethod (/mnt/vol1/IDND/mm-server/node_modules/caver-js-ext-kas/node_modules/caver-js/packages/caver-contract/src/index.js:1707:31)
[1] at processTicksAndRejections (internal/process/task_queues.js:97:5)

갑자기 이런 에러도 발생하는데… 혹시 며칠전 클레이튼 네트워크 장애 이슈건 때문에 뭐가 틀어진걸까요? 바오밥테스트네트워크에서 테스트하고 있습니다.

1개의 좋아요

안녕하세요, 해당 Provider를 사용한 코드를 볼 수 있을까요? 저 에러 스택만 봐선 Provider를 세팅하는 Endpoint가 유효하지 않아서 인걸로 보이는데 전체 코드를 확인해야 어느 정도 원인을 찾을 수 있을 것 같습니다.

provider문제는 해결이 되었습니다.

전에 주신 답변에서 레퍼런스주신 문서를 확인해보니 아래와 같이 작성해야 되는 것으로 확인되었습니다.

원래 제공되던 것이 수정된 것인지 사용해오던 것이 갑자기 안돼서 질문드렸었는데 제공하고 있지 않다고 하셔서 혼란한 상황입니다.

확인해주시면 감사하겠습니다.


image

해당 코드는 두 가지 경우에 따라서 다르게 동작합니다.

일단 from은 문제가 없는 것 같으니 생략하겠습니다.
수수료 대납 트랜잭션을 발생하는 경우, fee payer가 KAS Wallet API에 있는지 확인을 하는데요,
await caver.kas.wallet.getAccount 이 API를 사용해서 확인합니다.

그러고 KAS Wallet API에 해당 수수료대납 계정이 있을 경우에는 await caver.kas.wallet.requestFDRawTransactionPaidByUser 이 API를 통해서 서명 요청을 하고, 수수료 대납 계정이 존재하지 않을 경우에는 Node API의 klay_signTransactionAsFeePayer를 사용합니다.

주신 에러의 경우 await caver.kas.wallet.getAccount의 결과 KAS Wallet API에 존재하지 않아서 klay_signTransactionAsFeePayer를 사용하는데, KAS에서 해당 노드 rpc를 제공하고 있지 않아서 에러가 난 것 같은데요

수수료 대납 계정이 KAS Wallet API 서비스에 존재하는지 확인 부탁드립니다.


접속해서 확인해보니 여전히 계정은 존재합니다. 알려주신 await caver.kas.wallet.getAccount는 사용법이 틀렸는지 먹히질 않아서 화면들어가서 확인하였습니다.
feepayer와 feeDelegation 프로퍼티를 제거하고 발생시키면 정상작동하는걸로 봐서 엑세스키나 시크릿키에 문제가있는건 아닌 것 같고… 갑자기 왜이러는지가 의아하네요…

수수료 대납 계정은 다른 API를 써서 조회하여야 하는데 이게 KAS SDK의 KAS Wallet에 반영되어 있지 않아 생기는 문제인 것 같습니다.
해당 에러는 담당자에게 전달드렸습니다.

기존엔 반영이됬었는데 안되도록 업데이트된건가요? 기존엔 동작했으니까요.
그럼 언제쯤 해결이 될까요? 이제와서 소스를 다 뜯어고치기엔 부담스러워서요…

안녕하세요 답변해주시면 감사하겠습니다.

담당자분께 전달드렸는데 다시 리마인드 드리겠습니다.

감사합니다. 회신 기다리고 있겠습니다!!

회신을 주지 않으셔서 다시 되는 방식으로 작업을 시작하려고 합니다.

위 이미지에 있는 것을 이용하면 스마트컨트랙트 실행에 대한 수수료 대리부담을 할 수 있는 것으로 보이는데요 저기 들어가는 input에 대한 설명히 상당히 부족한 것 같습니다. function을 keccak256한 앞 4바이트를 의미한다는 글을 보긴 했는데요. 그럼 해당 function의 파라미터로 들어가는 argument는 어떻게 입력시킬 수 있는 건가요? 질문을 드리는동안 시간이 너무 많이 지체가돼서 자세한 설명해주시면 감사하겠습니다.

예를들어,
function addProduct(string calldata _productUuid,
string calldata _name,
uint256 _price) external;
이 함수의 파라미터에
_productUuid=“aa6e4518-8c89-44aa-806a-5918c9744650”
_name=“seller”
_price=1000

이런 값을 argument로 하여 실행하려고 할 때,
input데이터를 어떠한 값을 어떻게 처리하여 최종적으로 어떻게 코드로 작성하는지 설명부탁드립니다.

해결하였습니다. 답변안주셔도될 것 같습니다.

1개의 좋아요

안녕하세요,
KAS 제품팀입니다.

회신이 늦어져서 대단히 죄송합니다.
번거로우시겠지만 문제 해결 과정에 대해서 혹시 공유주실 수 있을지 문의드립니다.
같은 이슈를 겪을 사용자분들에게 큰 도움이 될 것 같습니다.

감사합니다.

KAS 제품팀 드림

기존 방식에서 수정이아닌 다른방법으로 아래와 같이 수정하여 해결하였습니다.

저도 동일한 에러가 갑자기 났는데 어떻게 해결하셨는지 도움좀 받을 수 있을까요? 감사합니다.

Error: Provider not set or invalid
at Object.InvalidProvider (/Users/humanworks/Documents/project/node/hwtoken/node_modules/caver-js/packages/caver-core-helpers/src/errors.js:80:28)
at RequestManager.send (/Users/humanworks/Documents/project/node/hwtoken/node_modules/caver-js/packages/caver-core-requestmanager/src/index.js:118:32)
at /Users/humanworks/Documents/project/node/hwtoken/node_modules/caver-js/packages/caver-core-method/src/index.js:437:34
at Object.getChainId (/Users/humanworks/Documents/project/node/hwtoken/node_modules/caver-js/packages/caver-core-method/src/index.js:452:9)
at ValueTransfer.fillTransaction (/Users/humanworks/Documents/project/node/hwtoken/node_modules/caver-js/packages/caver-transaction/src/transactionTypes/abstractTransaction.js:403:67)
at ValueTransfer.sign (/Users/humanworks/Documents/project/node/hwtoken/node_modules/caver-js/packages/caver-transaction/src/transactionTypes/abstractTransaction.js:221:20)
at /Users/humanworks/Documents/project/node/hwtoken/api_v1/service/klay.js:95:24
at Layer.handle [as handle_request] (/Users/humanworks/Documents/project/node/hwtoken/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/humanworks/Documents/project/node/hwtoken/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/Users/humanworks/Documents/project/node/hwtoken/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/Users/humanworks/Documents/project/node/hwtoken/node_modules/express/lib/router/layer.js:95:5)
at /Users/humanworks/Documents/project/node/hwtoken/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/Users/humanworks/Documents/project/node/hwtoken/node_modules/express/lib/router/index.js:335:12)
at next (/Users/humanworks/Documents/project/node/hwtoken/node_modules/express/lib/router/index.js:275:10)
at cors (/Users/humanworks/Documents/project/node/hwtoken/node_modules/cors/lib/index.js:188:7)
at /Users/humanworks/Documents/project/node/hwtoken/node_modules/cors/lib/index.js:224:17

그 에러는 갑자기 뜨더니 별 조치 안했는데 사라졌던걸로 기억합니다…