KKamJi
Preview Image

온체인 디버깅 기초 - receipt, trace, finality [Blockchain 7]

JSON-RPC가 HTTP 200을 돌려줘도 그 거래는 성공이 아닐 수 있습니다. receipt의 status가 0x0이면 실행은 되돌려졌고, gas는 이미 소비되었습니다. explorer 화면의 빨간 실패 표시가 가리키는 값이 바로 그 필드입니다. 이전 글에서 출금 순서가 자금을 비울 수 있음을 확인했습니다. 이번에는 실패한 호출을 node가 어떻...

Preview Image

Smart contract 보안 기초 - 재진입, CEI [Blockchain 6]

지난 Counter의 increment는 권한이 없었습니다. 숫자가 틀려도 돈은 움직이지 않습니다. 같은 실수가 이더를 들고 있는 금고에서 나면, 출금 함수가 끝나기 전에 다시 출금이 들어옵니다. 이전 글에서 deploy address에 코드가 생긴다는 점을 확인했습니다. 이번에는 그 코드의 호출 순서를 Foundry 테스트로 깨 봅니다. 취약 경로...

Preview Image

이더리움 상태 머신 기초 - Account, Nonce, Gas [Blockchain 4]

비트코인에서는 balance를 구하려면 미사용 출력을 모두 더해야 했습니다. 이더리움 node에 같은 질문을 하면 계정 객체에서 balance와 nonce를 읽습니다. 합계를 다시 계산하지 않습니다. 이전 글에서 확인은 활성 팁에 상대적이라는 점을 봤습니다. 이더리움은 그 위에 계정 상태와 gas라는 실행 비용을 올립니다. Foundry Anvil ...

Preview Image

비트코인 시스템 기초 - mempool, reorg, Script [Blockchain 3]

explorer에서 confirmation 1이 뜨면 그 거래는 끝난 것처럼 보입니다. 같은 node에서 그 block을 무효화하면 거래는 다시 mempool로 돌아옵니다. 확인 횟수는 balance처럼 저장되는 플래그가 아니라, 지금 활성 체인 팁에 그 거래가 들어 있는지를 센 값입니다. 이전 글에서 돈은 미사용 출력으로만 존재한다는 점을 확인했습...

Preview Image

TDD 알아보기 - 테스트가 먼저 실패하는 개발 루프

기능을 다 만들고 나서 테스트를 쓰다 보면, 테스트가 한 번도 실패하지 않고 바로 통과하는 경험이 있습니다. 코드를 고치기 전에도 통과하고, 일부러 버그를 넣어도 여전히 통과한다면 그 테스트는 아무것도 증명하지 않습니다. 반대로 구현보다 테스트를 먼저 쓰면, 테스트는 반드시 한 번은 실패합니다. 이 실패가 정확히 무엇을 증명하는지가 TDD(Test-D...