interface Account { nonce : number; // 트랜잭션의 횟수 카운터 (이중지불 방지 용도) balance : string; // 소유한 잔고, wei 단위로 표시 // EOA 는 storageRoot, codeHash 사용 x storageRoot : string, // account의 상태 저장 공간 초기에는 비어있다. codeHash : string; // 스마트 컨트랙트 계약의 코드 }
interface Message { from : string; // 메시지를 보내는 어카운트 or 컨트랙트의 주소 to : string; // 메시지를 받는 어카운트 or 컨트랙트 주소 gas : number; // 메시지를 처리하기 위해 사용할 가스의 량 gasPrice : number ; // 가스 당의 가격 value : number; // 메시지와 함께 전송할 이더 량 data : string ; // 메시지 데이터 nonce : number ; // 메시지를 전송한 acccount의 nonce 값 } interface Transaction extends Message{ v : number; //서명 v 값 r : string; //서명 r 값 s : string; //서명 s 값 }
geth : go 언어로 작성이 되어있는 이더리움 클라이언트 / chainid를 확인할 수 있는 클라이언트
Ganache : 로컬 개발 및 테스트환경을 제공해준다.(이더리움 네트워크)
파운드리 : 솔리디티 테스트 코드를 작성할 수 있다. TDD 구현 가능.
메타마스크 : 브라우저의 확장 프로그램으로 웹 어플리케이션에서 이더리움 스마트 컨트렉트와 상호 작용할 수 있도록 도와준다.
Truffle, Hardhat : 스마트 컨트랙트 개발, 테스트 배포를 쉽게 할 수 있도록 도와주는 프레임 워크
// 설치 npm i -g ganache-cli // 실행 npx ganache-cli
설치 후, 실행하면 위 사진처럼 내용이 터미널에 뜨게되는데,
Available Accounts
: 사용 가능한 계정
Private Keys
: 개인 키
Gas Price
: 가스 가격
Gas Limit
: 부여할 수 있는 가스 한도
Call Gas Limit
: 스마트 컨트랙트 함수를 호출할 때 드는 가스비의 한도, 악의적인 사용자가 가스를 소비해 리소스를 과도하게 사용하는것을 방지할 수 있다.
// RPC 통신을 하는 편하게 사용할수 있게 도와주는 web3 라이브러리 // 이더리움 제단에서 지원. // 스크립트 추가 <script src="https://cdn.jsdelivr.net/npm/web3@1.10.0/dist/web3.min.js"></script> // web3 생성 const web3 = new Web3("http://127.0.0.1:8545");
127.0.0.1:8545
로 설정하는 이유는 ganache를 실행하면 아래에 듣고있는 IP와 포트가 나온다.
// solc 라이브러리 설치 npm i solc@0.8.0 // solc를 사용해서 코드 컴파일 // solc은 solidity 코드를 컴파일하는 도구 npx solc --bin --abi ./test.sol
npx solc 명령어를 통해 컴파일하게 되면 위 사진 처럼 abi 파일, bin 파일이 생기는데,
abi 파일
: 스마트 컨트랙트와 외부 응용 프로그램 사이에서 데이터를 어떻게 인코딩하고 디코딩할지에 대한 규격, 주로 json 형식
bin 파일
: sol 파일에 solidity 언어로 작성한 파일의 내용을 컴파일한 바이트코드(바이너리 코드)
eth.getBalance("계정주소")
를 이용해 계정의 잔고를 가져올 수 있다.
하지만, data에는 wei 라는 단위로 뜨는데 이 단위가 있는 이유는 가스비 연산에 사용하기 위해서다.
1eth = 10^18 wei 이고,
utils.fromWei()
를 이용해 이더로 단위 변환할 수 있다.
실행결과
위는 wei 단위, 아래는 eth 단위
eth.sendTransaction
: 트랜잭션 발생
from
: 보내는 계정 , to
: 받는 계정
utils.toWei
: ether 10을 wei로 변환
실행결과
blockHash
: 블록의 해시값
blockNumber
: 블록의 번호
contractAddress
: 스마트 컨트랙트가 생성된 경우, 해당 컨트랙트의 주소가 여기에 나타나고, 아닌 경우는 null
cumulativeGasUsed
: 현재 블록까지의 누적 가스 사용량
from
: 보낸 계정 주소
gasUsed
: 이 트랜잭션이 사용한 가스 양
logs
: 트랜잭션과 관련된 이벤트 로그등의 정보가 들어가는 배열
logsBloom
: 로그 필터링에 사용되는 로그 블룸 필터 값
status
: 트랜잭션의 실행 결과 상태
to
: 수신 계정 주소
transactionHash
: 트랜잭션의 해시값
transactionIndex
: 이 트랜잭션이 포함된 블록 내에서의 트랜잭션 인덱스
data
의 내용은 bin 파일의 바이트코드 이다.
성공하면 체인에 스마트 컨트랙트가 배포가 된것이다.
출력 결과를 보면 이번엔 contractAddress 에 주소가 나타낸게 확인되는데,
나중에 이 주소를 통해서 sol 파일에 적은 함수들을 접근할 수 있다.