klay_getTransactionReceipt 및 klay_getLogs 를 통한 tokenId 획득

안녕하세요, 클레이튼 팀의 JK입니다.

먼저, 질문 주셔서 감사드립니다. minting transaction결과로 반환된 transaction의 receipt에는 event logs를 포함하고 있습니다. log topic의 첫번째 항목에는 발생한 event hash값이 들어갑니다. token transfer의 경우 keccak256('Transfer(address,address,uint256)') 결과값인 ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef가 들어갑니다.

topic[0] 값으로 transfer event를 수집할 수 있습니다.

event의 parameters가 들어가는 방식은 두가지가 존재하는데요.
case 1. indexed
topic[0]: event hash
topic[1]: fromAddress
topic[2]: toAddress
data: value

case 2. unindexed
topic[0]: event hash
data: concat(fromAddress, toAddress, value)

이 때, minting되는 token transfer를 찾고계시다면 fromAddress가 0x000...000인 transfer를 찾으셔야하고요, 발행되는 tokenId는 value에 저장되게 됩니다. 따라서, case1인 경우, data field값이 tokenId가 되고, case2인 경우, data에 저장되어있는 값을 32bytes(hash 길이)로 쪼갠 뒤, 마지막(3번째 항목)에 저장되는 값이 tokenId가 됩니다.

추가적인 질문이 있으시면 남겨주세요.
감사합니다.

참조:

1 Like