이더리움 블록헤더의 구성요소
- 부모해시(parentHash) : 부모 블록의 해시값
- 엉클해시(uncleHash) : 현재 블록의 엉클 블록들의 해시값
- 주소(beneficiary) : 채굴 후 해당 트랜잭션의 수수료를 받을 계정 주소
- 상태루트(stateRoot) : 계정의 상태정보가 모여있는 머클 패트리시아 트리의 루트 노드 해시값
- 트랜잭션루트(transactionsRoot) : 블록의 모든 트랜잭션에 대한 머클트리의 루트노드 해시값
- 영수증루트(receiptsRoot) : 해당 블록 내 모든 트랜잭션에 대한 일종의 영수증 머클트리의 루트노드 해시값
- 로그블룸(logsBloom) : 로그 정보를 사용하는데 필요한 32바이트 블룸필터
- 난이도(difficulity) : 블록 생성 난이도
- 블록번호(number) : 해당 블록 번호
- 가스한도(gasLimit) : 블록 당 지급 가능한 최대 가스의 제한량
- 사용된 가스(gasUsed) : 해당 블록 내 트랜잭션에 사용된 가스의 총합
- 타임테이블(time : 해당 블록의 최초 생성시간
- 믹스해시, 논스(mixHash, nonce : 해당 블록이 충분한 연산을 했음을 입증하는 해시값
- 기타(extra) : 블록의 기타 정보
[출처:위키백과]
200-300개의 transaction의 내용을 담고 있다.
- nonce: 계정 주소의 거래의 횟수(EOA) txCount
- recipient: 영수증
- value : 금액에 대한 부분(wei(10 ^-18^ ))
- gasprice:
- gaslimit:
- input:data영역 (내용이 입력되는 공간)
- to: 보낼 EOA계정
- [ from ]
- V,R,S:ECDSA 서명 구성 요소(서명을 위한 내용)
- 서명이 되었는지 안되었는지 판단
- 객체로 이루어져 있다.
V :
R :
S :
이더리움의 tx는 2가지로 나뉜다.
일반 입출금과 smart contract주소
테스트 환경과 실제 서버 환경을 똑같이 일치하게 해놓고 진행할 수 있게 한다.
솔리디티 언어로 작성된 byte코드를 해석 및 텍스트를 저장해주는 가상머신
컴퓨터 언어로 되어있다. 최소기능만 되어있는 컴퓨터라고 알면 된다. 그렇기에 solidity언어를 byte코드로 바꾸고 EVM을 실행시키는 것임.
보내는 것도, 받는 것도 다 컴퓨터만 이해할 수 있는 언어로 보낸다.
abi는 EVM을 주고받을 내용을 저장할 수 있는 파일을 abi라고 한다(?)
EVM에 있는 기계어의 내용들을 해석하고 객체에 알맞게 넣어주는 역할
abi가 없다면 우리는 기계어로 EVM과 소통을 해야한다.
(https://images.velog.io/images/nara7875/post/83bf52e3-80af-4665-9a99-caebc697fd4b/image.png)
contract address: 코드가 담긴 tx
evm을 통해 코드를 실행한다.
서버 거친 건 V,R,S를 한거고,
서버에서 다 처리한건 저 body내용을 다 해준 것이다.
![]
메타마스크랑 블록체인 네트워크는 소통할 때 rpc통신을 한다. 메타마스크를 통해서도 rpc 통신이 가능하다. /메타마스크/ web3/terminal 3가지 방법 중 하나로 rpc통신을 할 수 있다.
메타마스크랑 소통할 때 rpc통신을 한다. 메타마스크를 통해서도 rpc 통신이 가능하다. /메타마스크/ web3/terminal/로 rpc통신을 할 수 있다.
v,r,s가 되어야 서명이 완료된다.
metamask 활용
web3를 활용하여 트랜잭션 내용을 만들고 v,r,s 내용은 메타마스크를 통해서 생성
backend에서 web3를 활용하여 전부 다 만들어서 트랜잭션을 발생시키는 방법
EVM은 블록의 변수 값을 저장한다. EVM안에 코드가 저장되어 있다.
블록바디의 transaction의 내용은 EVM안에 저장이 된다.
공인인즈엇 있느 ㄴ계좌번호
개인키를 가지고 통제할 수 있는 계좌
다른 계정에 이더를 보낼 ㅅ 있는 계정
메세지도 보낼 수 있는 계정
+code도 저장한 계정
이것이 스마트 컨트랙트의 중개자 역할을 해준다.
(함수들 저장)
ABI같은 내용이 저장됨.
공개키
개인키
nonce: txCount:트랜잭션 몇번 일어났는가
value : 100ETH = > 100* 10^18^
smartcontract
contract code: ABI 내용들이 들어감.
storage: 파일 데이터들
id를 공개키로 pw를 비밀키로 생각하면 편함
pragma solidity ^0.4.16;
contract MimimumViableToken {
mapping(address => uint256) public balanceOf;
constructor () public {}
function MimimumViableTokens (uint256 initialSupply) public {
balanceOf[msg.sender] = initialSupply;
}
function transfer(address _to, uint256 _value)public{
balanceOf[msg.sender] -= _value;
balanceOf[_to] += _value;
}
}
위와 같이 compiler버전을 맞추어주고, language도 맞춰준다. Auto compile을 선택하면 코드를 바꾸면 자동으로 compile을 해준다.
컴파일을 하면 다음과 같이 contracts 폴더 안에 artifacts라는 폴더가 생기고 그 안에 json파일들이 생긴다.
옆에 이더리움 모양의 걸 누르면 위아 같은 화면이 나온다. ENVIRONMENT에는 여러가지가 있다.
우리는 메타마스크를 이용할 거니 Injected Web3
를 선택한다.
그러면Account에 창이 뜬다.
Deployed Contracts를 보면 밑에 하나의 파일이 있다. 거기서 빨간 모양으로 표시된 화살표를 누른다.
그러면 minimum....라는 함수가 있고, 거기서 2번으로 쓰인 화살표를 누른다.
그럼 wei단위도 된 eth를 보낼 수 있다.
아까보다 줄어있음을 확인할 수 있다.
여기서 노란색으로 표시된 Import Tokens를 클릭한다. 그리고 가나슈에 들어가서 create Contract Address부분을 복사한다.
그리고 붙여넣는다.
나는 이렇게 작성을 하였다.
그리고 다음과 같이 보내본다.
10 GRT가 추가되었음을 알 수 있다.
한 트랜잭션 당 gasLimit임!
코드를 잘못짜서 gas를 높이 짜면 gasprice가 높아져서 수수료가 엄청날 수 있음.