챕터 2 : 이더리움 기초
이더 화폐 단위, 이더리움 지갑 선택하기, 통제와 책임,메타마스크 설치하기, 네트워크 바꾸기, 테스터 이더 얻기, 메타마스크에서 이더 보내기,주소의 트랜잭션 내역 탐색
지갑을 만들고 테스터넷을 통하여 이더를 발급받고 전송해보고 가스비를 확인하는 내용까지를 알려준다,.
이 과정에서 나는 이상함을 느꼈는데, 이더의 테스터넷의 경우 종류도 많고 제각기 운영방식이 달라 의아했다.
찾아보니 각 커뮤니티에서 하드포크하여 자체적으로 운영하는 형태인 듯 하였다.
월드 컴퓨터 소개
이더리움은 이더리움 가상머신(EVM)이라고 하는 에뮬레이트 된 컴퓨터에서, 스마트컨트랙트 라는 프로그램을 실행하기 위해 사용되는 화폐이다.
EVM은 글로벌 싱글톤으로, 세계 어디서든 하나의 컴퓨터처럼 작동한다.
이더리움 네트워크의 각 노드는 컨트랙트 실행을 확인하기 위해 EVM의 로컬 사본을 실행하고,
이더리움 블록체인은 트랜잭션과 스마트컨트랙트를 처리 할 때 월드 컴퓨터의 변화하는 '상태'를 기록한다.
외부 소유 계정(EOA) 및 컨트랙트
외부 소유 계정(Externally Owned Account)는 이더리움 화폐를 보관하는 개인키가 있는 지갑을 의미하고, 이 개인키로 지갑을 제어 할 수 있다.
컨트랙트 계정은 개인키가 없고, 컨트랙트 코드의 로직으로 제어한다.
컨트랙트 계정에는 이더와 데이터를 보내고 받을 수 있으며, EVM에서 실행된다.
간단한 컨트랙트:테스트 이더 Faucet
//솔리디티 버전 선언
pragma solidity ^0.4.19;
//컨트랙트
contract Faucet {
//이더를 주는 함수
function withdraw(uint withdraw_amount) public {
// 출금 액수 제한(0.1이더, 10^17웨이)
require(withdraw_amount <= 1000000000000000000);
// 요청한 주소로 금액 보내기
msg.sender.transfer(withdraw_amount);
}
// 입금 금액 수락
function () public payable {}
}
위 컨트랙트는 결함을 가진 컨트랙트이며, 결함을 컴토하면서 배워볼 것이다.
Faucet 컨트랙트 컴파일
솔리디티 코드는 바이트코드로 변환해야 EVM에서 실행 가능하고, 통합 IDE환경에서 솔리디티를 바이트코드로 변환 할 수 있다.
이 책에서는 remix IDE(remix.ethereum.org )를 사용할 것이다.
아까 썼던 컨트랙트 코드를 컴파일하면 바이트 코드를 볼 수 있다.
{
"linkReferences": {},
"object": "608060405234801561001057600080fd5b5060f68061001f6000396000f300608060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680632e1a7d4d146041575b005b348015604c57600080fd5b50606960048036038101908080359060200190929190505050606b565b005b670de0b6b3a76400008111151515608157600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801560c6573d6000803e3d6000fd5b50505600a165627a7a723058203f80f5e86c592a3b15f19e22f91b68f4615d5da3d9a4029df33f51824c823b140029",
"opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0xF6 DUP1 PUSH2 0x1F PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN STOP PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT PUSH1 0x3F JUMPI PUSH1 0x0 CALLDATALOAD PUSH29 0x100000000000000000000000000000000000000000000000000000000 SWAP1 DIV PUSH4 0xFFFFFFFF AND DUP1 PUSH4 0x2E1A7D4D EQ PUSH1 0x41 JUMPI JUMPDEST STOP JUMPDEST CALLVALUE DUP1 ISZERO PUSH1 0x4C JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x69 PUSH1 0x4 DUP1 CALLDATASIZE SUB DUP2 ADD SWAP1 DUP1 DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 ADD SWAP1 SWAP3 SWAP2 SWAP1 POP POP POP PUSH1 0x6B JUMP JUMPDEST STOP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP2 GT ISZERO ISZERO ISZERO PUSH1 0x81 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST CALLER PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0x8FC DUP3 SWAP1 DUP2 ISZERO MUL SWAP1 PUSH1 0x40 MLOAD PUSH1 0x0 PUSH1 0x40 MLOAD DUP1 DUP4 SUB DUP2 DUP6 DUP9 DUP9 CALL SWAP4 POP POP POP POP ISZERO DUP1 ISZERO PUSH1 0xC6 JUMPI RETURNDATASIZE PUSH1 0x0 DUP1 RETURNDATACOPY RETURNDATASIZE PUSH1 0x0 REVERT JUMPDEST POP POP JUMP STOP LOG1 PUSH6 0x627A7A723058 KECCAK256 0x3f DUP1 0xf5 0xe8 PUSH13 0x592A3B15F19E22F91B68F4615D 0x5d LOG3 0xd9 LOG4 MUL SWAP14 RETURN 0x3f MLOAD DUP3 0x4c DUP3 EXTCODESIZE EQ STOP 0x29 ",
"sourceMap": "71:333:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;71:333:0;;;;;;;"
}
블록체인에 컨트랙트 생성하기, 컨트랙트 사용하기, 블록 탐색기에서 컨트랙트 주소 보기, 컨트랙트 자금 조달, 컨트랙트에서 출금
블록체인에 컨트랙트를 등록하는 것은 목적지의 주소가 0x00000...(제로어드레스)인 특수 트랜잭션을 만드는 것이다.
remix ide가 모든 것을 처리하고 알아서 해준다.
메타마스크를 연결하여 ropsten 네트워크에 컨트랙트를 배포하고 컨트랙트를 이더스캔에서 찾아보고, 사용해보는 내용이다.
'블록체인 > 책' 카테고리의 다른 글
암호학 | 마스터링 이더리움 (0) | 2021.05.10 |
---|---|
이더리움 클라이언트 | 마스터링 이더리움 (0) | 2021.04.24 |
Evolution of Economics | Economics and Math of Token Engineering and DeFi - Fundamentals of Token Economics (0) | 2021.04.16 |
이더리움이란 무엇인가? | 마스터링 이더리움 (1) | 2021.04.16 |
Introduction to the Economics of Token | Economics and Math of Token Engineering and DeFi - Fundamentals of Token Economics (0) | 2021.04.12 |