Klaytn 컨트랙트 Trace 관련해서 질문드립니다

1. 일단 먼저, VM Trace API가 public node에서는 비허용인거 같은데 맞나요?
** - 자체 full 노드를 직접 구축해야할까요?**

2. 아래 transaction의 경우, 3개의 Internal Transactions가 있는데, 이런 경우는 caver.js를 이용해서 어떻게 from, to, amount 를 해석할 수 있나요

0x77b10b63f18a34efdf5ea38c318eacc9910a931b8b2c028ff9c6663b9809e160

  • 일단 transaction receipt는 call 관련 data는 보이나 더 이상의 해석을 불가능하니 (ERC20같은 경우처럼 contract를 알 수 있지않는한), 이더리움의 trace와 비슷해보이는 klaytn의 trace를 생각중입니다.

  • 추가로 Geth Tracing API의 경우, history가 있을때 node의 EVM이 다시 transaction을 실행시켜서 ETH 이동등의 결과를 확인한다고 되어있습니다 https://geth.ethereum.org/docs/dapp/tracing

  • 클레이튼 tracing에 대해서, 혹시 가능하시다면 친절하게 설명해주시면 감사하겠습니다 (api 문서에서는 호출/결과 정도만 보여서…)

안녕하세요 :slight_smile:

contract의 abi를 알고 계시다면 caver.abi.decodeParameters을 사용하여 data를 디코딩할 수 있습니다.

감사합니다.

안녕하세요.

첫번째 질문에 대해서 말씀드리면.

1. 일단 먼저, VM Trace API가 public node에서는 비허용인거 같은데 맞나요?
** - 자체 full 노드를 직접 구축해야할까요?**

–> VM trace는 리소스 사용이 커서 public EN에는 허용되지 않습니다.
직접 EN을 띄우셔서 사용하셔야합니다.

아래 가이드를 참고부탁드립니다.

1 Like

빠른 답변 가능합니다.

decodeParameters의 경우, 해당 encoded params의 interface를 알아야하는데,

혹시 interface를 알 수 없는 경우, 즉 신뢰할 수 없는 경우 어떻게 해당 트랜잭션의 transfer를 확인 할 수 있는지 궁금합니다.

극단적으로는 제가 explorer를 만들려고 한다면, 컨트랙트나 abi를 모르는 상황에서도 balance 이동에 대해서 확인이 가능해야할탠데, 그런 상황을 가정해보고싶습니다.

그래서 vm을 다시 실행시켜(trace) 결과(balance 이동)를 확인하는 방법이 가능할지 궁금해서 질문드린겁니다!

제 접근방법이 이상하다면 알려주세요!

안녕하세요,

먼저 caver-js로는 인터널 트랜잭션을 분석할 수 없습니다.
현재 caver-js로는 abi가 있는 경우 receipt의 logs에 있는 data를 디코딩하는 작업만 가능합니다.

인터널 트랜잭션을 분석하기 위해서는 따로 EN을 구성하여 trace api를 통하여 분석하는 방법밖에 없을 것 같습니다.

감사합니다 :slight_smile:

2 Likes

full-node 를 만든 후, JSON RPC 를 통해 (https://docs.klaytn.com/bapp/json-rpc/api-references/debug/tracing) 분석하는 방법이 유일할것이라는 말씀이군요

답변 감사합니다 :smiley:

아, 추가로 혹시 해당건에 대해서 학습 또는 테스트를 원할때에도 꼭 full-node를 갖춰야할까요?

예를들어 하나의 tx에 대해 tracing해보고, 그 결과를 받고싶다면… 흠…

public-node가 안되니… ㅠㅠ

안녕하세요, 죄송하지만 현재 테스트를 위해서는 별도로 노드를 띄우는 방법밖엔 없을 것 같습니다.

EN 노드를 설정하는 방법은 링크를 참고 부탁드립니다.

추후에 조금 더 쉽게 trace를 해 볼 수 있는 방안에 대해서는 고민해보도록 하겠습니다.

감사합니다.