사랑하애오
article thumbnail

Block구조

이더리움 Block Header

이더리움 블록헤더의 구성요소

부모해시(parentHash) : 부모 블록의 해시값

엉클해시(uncleHash) : 현재 블록의 엉클 블록들의 해시값

주소(beneficiary) : 채굴 후 해당 트랜잭션의 수수료를 받을 계정 주소

상태루트(stateRoot) : 계정의 상태정보가 모여있는 머클 패트리시아 트리의 루트 노드 해시값

트랜잭션루트(transactionsRoot) : 블록의 모든 트랜잭션에 대한 머클트리의 루트노드 해시값

영수증루트(receiptsRoot) : 해당 블록 내 모든 트랜잭션에 대한 일종의 영수증 머클트리의 루트노드 해시값

로그블룸(logsBloom) : 로그 정보를 사용하는데 필요한 32바이트 블룸필터

난이도(difficulity) : 블록 생성 난이도

블록번호(number) : 해당 블록 번호

가스한도(gasLimit) : 블록 당 지급 가능한 최대 가스의 제한량

사용된 가스(gasUsed) : 해당 블록 내 트랜잭션에 사용된 가스의 총합

타임테이블(time : 해당 블록의 최초 생성시간

믹스해시, 논스(mixHash, nonce : 해당 블록이 충분한 연산을 했음을 입증하는 해시값

기타(extra) : 블록의 기타 정보

[출처:위키백과]

 

이더리움 block body

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

이더리움의 tx는 2가지로 나뉜다.
일반 입출금과 smart contract주소

 

EVM(Ethereum Virtural Machine)

 

VM

테스트 환경과 실제 서버 환경을 똑같이 일치하게 해놓고 진행할 수 있게 한다.

 

EVM

솔리디티 언어로 작성된 byte코드를 해석 및 텍스트를 저장해주는 가상머신
컴퓨터 언어로 되어있다. 최소기능만 되어있는 컴퓨터라고 알면 된다. 그렇기에 solidity언어를 byte코드로 바꾸고 EVM을 실행시키는 것임.
보내는 것도, 받는 것도 다 컴퓨터만 이해할 수 있는 언어로 보낸다.

 

abi(application binary interface)

  • interface: 데이터를 주고받는 데이터 형식을 정하는 것

abi는 EVM을 주고받을 내용을 저장할 수 있는 파일을 abi라고 한다(?)
EVM에 있는 기계어의 내용들을 해석하고 객체에 알맞게 넣어주는 역할
abi가 없다면 우리는 기계어로 EVM과 소통을 해야한다.
(https://images.velog.io/images/nara7875/post/83bf52e3-80af-4665-9a99-caebc697fd4b/image.png)

 

bytecode

contract address: 코드가 담긴 tx
evm을 통해 코드를 실행한다.

서버 거친 건 V,R,S를 한거고,
서버에서 다 처리한건 저 body내용을 다 해준 것이다.

 

 

메타마스크랑 블록체인 네트워크는 소통할 때 rpc통신을 한다. 메타마스크를 통해서도 rpc 통신이 가능하다. /메타마스크/ web3/terminal 3가지 방법 중 하나로 rpc통신을 할 수 있다.

메타마스크랑 소통할 때 rpc통신을 한다. 메타마스크를 통해서도 rpc 통신이 가능하다. /메타마스크/ web3/terminal/로 rpc통신을 할 수 있다.

v,r,s가 되어야 서명이 완료된다.

 

저번에 햇던 거래 방법

  1. metamask 활용
  2. web3를 활용하여 트랜잭션 내용을 만들고 v,r,s 내용은 메타마스크를 통해서 생성
  3. backend에서 web3를 활용하여 전부 다 만들어서 트랜잭션을 발생시키는 방법

     

     

    Account 종류

    3-1. EOA3-2. CA3-3. 구성요소nonce: txCount:트랜잭션 몇번 일어났는가
    value : 100ETH = > 100* 10^18^
  4. 공개키
    개인키
  5. +code도 저장한 계정
    이것이 스마트 컨트랙트의 중개자 역할을 해준다.
    (함수들 저장)
    ABI같은 내용이 저장됨.
  6. 공인인즈엇 있느 ㄴ계좌번호
    개인키를 가지고 통제할 수 있는 계좌
    다른 계정에 이더를 보낼 ㅅ 있는 계정
    메세지도 보낼 수 있는 계정
  7. EVM은 블록의 변수 값을 저장한다. EVM안에 코드가 저장되어 있다.
    블록바디의 transaction의 내용은 EVM안에 저장이 된다.
  • smartcontract
    contract code: ABI 내용들이 들어감.
    storage: 파일 데이터들

     

 

나만의 토큰 만들기

세팅하기

  • id를 공개키로 pw를 비밀키로 생각하면 편함
  1. 솔리디티 언어로 작성한다. 특정 변수에 숫자 입력
    RPC->getBalance Transaction...

getBalance Transaction
->remix.ethereum.org
->가나시 실행
->메타마스크 지갑 주소 가져올 수 있도록4-2. 코드 작성https://remix.ethereum.org
에 들어간다. 온라인 solidity IDE이다.


MimimumVialeToken.sol이라는 파일을 만든다. 내용은 아래와 같이 만들어준다.

 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부분을 복사한다.

 

두번째 방법

메타마스크 자체적으로 트랜잭션하면 저렇게 웹페이지 상에서 볼 수 있게 해준다.

To: 부분에 Contract 주소를 복사한다.


그리고 붙여넣는다.


나는 이렇게 작성을 하였다.


그리고 다음과 같이 보내본다.


MIMI가 추가되었음을 알 수 있다.

 

GAS

한 트랜잭션 당 gasLimit임!
코드를 잘못짜서 gas를 높이 짜면 gasprice가 높아져서 수수료가 엄청날 수 있음.

profile

사랑하애오

@사랑하애

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!