안녕하세요,
파이썬으로 개발하는 개발자입니다.
로컬의 클레이 엔드노드에 HTTP RPC 통해 API를 호출하는 식으로 사용하고 있습니다
Fee Delegated Contract Execution의 구현 방법에 대해서 조언을 구하고 싶습니다.
caver.js/java 에서는 제공되는 feePayerSignTransaction을 그대로 쓰면 됩니다만,
파이썬에서는 어떻게 직접 구현하면 될 지 모르겠습니다
feePayer의 privateKey로 서명을 해야 하는데…
그렇다고 SDK에 feePayer의 privateKey를 포함해서 배포를 하신 것은 아닐거 같구요…
어떤 식으로 접근하면 될 지 조언을 구하고 싶네요
caver 구현 코드를 살펴 보아도 바로 이해하기가 쉽지가 않네요.
답변 감사드립니다.
생각보다 더 복잡하고… 직접 privateKey를 다루는 코드를 짜야하네요… ㅜㅜ
JSON-RPC API로는 지원이 안되나요?
klay_signTransaction, klay_sendTransaction API를 사용하면, 일반적인 (수수료를 호출한 사람이 모두 지불하는)
Value Transfer / Smart Contract Execution는 쉽게 지원이 됩니다.
즉, 이 경우는 복잡한 RLP 인코딩 등의 과정을 거치지 않아도 됩니다.
그런데, 아래의 API도 있습니다 klay_signTransactionAsFeePayer, klay_sendTransactionAsFeePayer
이 API들을 보면, Fee Delegated 경우에도 쉽게 처리가 가능한건가 하는 희망을 가지게 되는데…
불가능 한 것인가요? ㅜㅜ
예를 들어, TxTypeFeeDelegatedSmartContractExecution 를 보면.
feePayer 만 명시해주면 되는 것 같아 보입니다.
먼저 현재 Klaytn에서 RLP 인코딩 및 해싱 기능에 대한 API는 제공되고 있지 않습니다.
위에서 말씀해 주신 klay_signTransaction, klay_sendTransaction, klay_signTransactionAsFeePayer, klay_sendTransactionAsFeePayer 모두 EN 노드에 keystore가 있는 경우에만 사용이 가능합니다.
즉 EN 노드(personal rpc가 열려 있어야 함)에 personal_importRawKey로 키를 임포트 하면 위의 API들을 사용할 수 있습니다.
위와 같이 personal rpc를 사용해서 키를 EN노드에 임포트해서 사용하는 경우에는 klay_signTransaction을 사용해서 sender의 서명을 구하고 결과로 받은 것을 잘 파싱하여 트랜잭션에 잘 채워넣은 후 klay_sendTransactionAsFeePayer API를 사용해서 수수료 대납자가 서명하고 전송하도록 하면 됩니다.
위의 방법이 아닌 경우에는 직접 트랜잭션을 해싱하고 서명하는 로직을 직접 개발하셔야 합니다.
수수료 대납 이벤트의 경우 KAS를 사용하셔야 합니다.
카스에서 수수료 대납 트랜잭션을 사용하는 방법은 KAS Docs를 참고해 주세요.
KAS를 사용하는 경우 위에 답변드린 EN 노드에 키를 임포트하는 방식은 동작하지 않으며, KAS Wallet API를 사용하시면 됩니다.
카스 관련 문의는 이 게시글과는 별개로 따로 글을 작성해서 남겨 주시면 빠른 답변 받으실 수 있습니다.