블록체인 컨트랙트 로그에 대해 질문드립니다
스마트컨트랙트가 정해진 코드대로, EVM에 의해서 동작되며 수수료가 발생하는 등 이해했습니다.
다만 궁금한점은, 보통 ERC20 의 tranfer는 to address에게 amount를 전송하는 메소드입니다.
그 후 event를 emit해 log 에 from address, to address, amount 등을 남깁니다
'스마트컨트랙트를 정해진 코드대로' 실행한다는 점은 이해했으나
특정 contract address의 특정 method가 의도한대로 동작한다는것은 어떻게 확인 가능한가요?
예를들어 interface에는 to address, amount 를 받지만 실제 네트워크상에 코드는, amount를 전송하지 않고 '전송한 것처럼 속이며' event log 만 찍는다던가...
- 물런 etherscan 에 등록된 smart contract 코드와 blockchain network byte code랑 비교해서 동작을 직접 확인하는 방법도 있을거 같습니다.
-> 만약에 구할 수 있는 smart contract code가 없다면?...
- event log를 해석했을때, 나에게 10이 전송됬다고 하면 (explorer에 그렇게 뜬다고 하면)
이것이 사실인지 아닌지는 어떻게 확인하나요? (본인 address balance 를 감시할 수 는 없다고 가정하면)
contract address의 특정 method가 의도한대로 동작한다는것은 어떻게 확인 가능한가?
에 대하여 제가 알고있는대로 말씀드리면 다음과 같습니다.사용자가 컨트랙트의 특정 method를 call 하는 bytecode가 블록체인 네트워크에 하나의 트랜잭션이 되어 넘어가면
트랜잭션 성공/실패 여부가 해당 트랜잭션에 기록됩니다.
즉, 해당 트랜잭션이 성공으로 나올때는 사용자가 call한 method가 정상 실행되었다고 판단합니다.
getTransactionReceipt로 트랜잭션을 조회하면 아래와 같은 json형태의 결과물을 얻는데 여기서 status가 true이면
트랜잭션이 성공했고 이는 원하는 기능이 정상적으로 작동했다고 판단합니다.
{ "status": true, "transactionHash": "0x9fc76417374aa880d4449a1f7f31ec597f00b1f6f3dd2d66f4c9c6c445836d8b", "transactionIndex": 0, "blockHash": "0xef95f2f1ed3ca60b048b4bf67cde2195961e0bba6f70bcbea9a2c4e133e34b46", "blockNumber": 3, "contractAddress": "0x11f4d0A3c12e86B4b5F39B213F7E19D048276DAe", "cumulativeGasUsed": 314159, "gasUsed": 30234, "logs": [{ // logs as returned by getPastLogs, etc. }, ...] }