1 Contract
-
스마트 컨트랙트란?
당사자들이 다른 약속에 따라 수행하는 프로토콜을 포함하여 디지털 형식으로 지정된 일련의 약속- 닉 사보
-
이더리움에서 컨트랙트(스마트 컨트랙트)란 불변적인 컴퓨터 프로그램을 말한다.
- 이 프로그램은 이더리움 네트워크 프로토콜의 일부인 이더리움 가상 머신의 컨텍스트상에서 결정론적으로 작동한다.
-
컨트랙트는, 수행되거나 컴파일 되어야 할 어떤 것이라기 보다는이더리움의 실행 환경안에 살아있는 일종의 자율 에이전트이다
-
컨트랙트는 자신이 소유한 ether balance와 key/valuce store 대한 직접적인 통제권을 가지고 있다.
1.1 Contract의 정의
- 컴퓨터 프로그램
- 스마트 컨트랙트는 단순히 컴퓨터 프로그램이다
컨트랙트라는 단어에 법적인 의미는 없다
- immutable
- 스마트 컨트랙트 코드는 일단 배포되면 변경할 수 없다
- 스마트 컨트랙트를 수정하는 유일한 방법은 새로운 인스턴스를 배포하는 것이다
- 결정론적(deterministic)
- 스마트 컨트랙트를 실행한 결과는 실행한 모든 이에게 동일하다
- 어떤 노드에서 실행하더라도 스마트 컨트랙트를 실행한 트랜잭션 컨텍스트와 실행 시점에서의 이더리움 블록체인 상태가 같으면 실행 결과는 같습니다.
- EVM 컨텍스트
- 스마트 컨트랙트는 매우 제한적인 실행 컨텍스트에서 작동된다
- 자신의 상태 호출한 트랜잭 션의 컨테스트 및 가장 최근 블록의 일부 정보에만 접근할 수 있다
- 탈중앙화된 월드 컴퓨터(decentralized world computer)
- EVM은 모든 이더리움 노드에서 로컬 인스턴스로 실행된다.
- EVM의 모든 인스턴스 동일한 초기 상태에서 동작하고 동일한 최종 상태를 생성하기 때문에 시스템 전체가 단일 월드 컴퓨터로 작동한다.
- 결정론적으로 스마트 컨트랙트를 실행하기 때문에 전체가 단일 월드 컴퓨터 처럼 작동합니다.
2 컨트랙트의 생명주기
- 코드 작성
- 컴파일
- 컨트랙트 생성 트랜잭션
- 컨트랙트 실행
- 컨트랙트 삭제
2.1 컨트랙트 코드 작성
contract Faucet {
function withdraw(uint withdraw_amount) public {
require(withdraw_amount <= 100000000000000000);
msg.sender.transfer(withdraw_amount);
}
function () public payable {}
}
2.2 컴파일
- 고급 언어(솔리디티)로 작성한 스마트 컨트랙트는 EVM에서 사용되는 바이트 코드로 컴파일되어야 한다.
- solidity로 작성한 컨트랙트는 solc라는 컴파일러로 EVM 바이트 코드로 변환한다.
컴파일된 바이트코드
solc --bin Faucet.sol
6060604052341561000f57600080fd5b60e58061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632e1a7d4d146041575b005b3415604b57600080fd5b605f60048080359060200190919050506061565b005b67016345785d8a00008111151515607757600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151560b657600080fd5b505600a165627a7a7230582071ed64dc2b534bdf3c7c54a9f8e0e4a29ef9adefe21681a724303852faf5ddb40029