개발 부스러기는 완결된 형식의 글이 아닌, 다양한 시행착오를 기록하는 글입니다.1. 함수 시그니처란? 다음과 같이 정의된 함수에서function transfer(address to, uint256 amount) external { ...} 함수의 이름과 공백 없이 콤마(,)로 연결 파라미터의 타입들을 소괄호로 묶은 문자열을 연결한 것을 함수 시그니처(function signature)라고 한다.transfer(address,uint256) 함수 시그니처는 ABI(Application Binary Interface)를 파싱 할 때 사용하거나, 함수 선택자(function selector)를 계산하기 위해 사용된다. 함수 선택자는 함수 시그니처를 입력으로 한 keccack256 함수의 결괏값의 상위 4..
1. 문제 The EthernautThe Ethernaut is a Web3/Solidity based wargame played in the Ethereum Virtual Machine. Each level is a smart contract that needs to be 'hacked'. The game is 100% open source and all levels are contributions made by other players.ethernaut.openzeppelin.comImagine a world where the rules are meant to be broken, and only the cunning and the bold can rise to power. Welcome to the ..
컨트랙트 ABI란? 컨트랙트 ABI(Application Binary Interface)는 이더리움 생태계에서 컨트랙트와의 상호작용을 위한 표준방식이다. ABI는 스마트 컨트랙트의 함수명, 매개 변수의 타입 및 반환 값의 타입을 설명한다. 일반적으로 solidity로 작성된 코드가 컴파일될 때 ABI가 생성되며, 이는 오프체인에서 컨트랙트로의 상호작용 또는 컨트랙트에서 컨트랙트로의 상호작용에 사용된다. 컨트랙트의 호출에 사용되는 calldata가 바로 ABI 형식으로 인코딩 된 데이터다. 타입별 ABI 인코딩 컨트랙트와 상호작용하기 위해 데이터는 ABI 형식에 맞춰 인코딩이 필요하다. solidity의 내장 함수인 abi.encode를 사용해 인코딩이 어떻게 이루어지는지 알아보자. 정적 타입 32바이트 ..