BlockChain>ERC-20 토큰 만들기

YU YU·2021년 10월 18일
0

경일_BlockChain

목록 보기
20/24

1. Block구조

1-1. 이더리움 Block Header

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

  • 부모해시(parentHash) : 부모 블록의 해시값
  • 엉클해시(uncleHash) : 현재 블록의 엉클 블록들의 해시값
  • 주소(beneficiary) : 채굴 후 해당 트랜잭션의 수수료를 받을 계정 주소
  • 상태루트(stateRoot) : 계정의 상태정보가 모여있는 머클 패트리시아 트리의 루트 노드 해시값
  • 트랜잭션루트(transactionsRoot) : 블록의 모든 트랜잭션에 대한 머클트리의 루트노드 해시값
  • 영수증루트(receiptsRoot) : 해당 블록 내 모든 트랜잭션에 대한 일종의 영수증 머클트리의 루트노드 해시값
  • 로그블룸(logsBloom) : 로그 정보를 사용하는데 필요한 32바이트 블룸필터
  • 난이도(difficulity) : 블록 생성 난이도
  • 블록번호(number) : 해당 블록 번호
  • 가스한도(gasLimit) : 블록 당 지급 가능한 최대 가스의 제한량
  • 사용된 가스(gasUsed) : 해당 블록 내 트랜잭션에 사용된 가스의 총합
  • 타임테이블(time : 해당 블록의 최초 생성시간
  • 믹스해시, 논스(mixHash, nonce : 해당 블록이 충분한 연산을 했음을 입증하는 해시값
  • 기타(extra) : 블록의 기타 정보
    [출처:위키백과]

1-2. 이더리움 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 :

1-2-1. tx

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

2. EVM(Ethereum Virtural Machine)

2-1. VM

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

2-2. EVM

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

2-2-1. 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)

2-2-2. 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를 활용하여 전부 다 만들어서 트랜잭션을 발생시키는 방법

    EVM은 블록의 변수 값을 저장한다. EVM안에 코드가 저장되어 있다.
    블록바디의 transaction의 내용은 EVM안에 저장이 된다.

    3. Account 종류

    3-1. EOA

    공인인즈엇 있느 ㄴ계좌번호
    개인키를 가지고 통제할 수 있는 계좌
    다른 계정에 이더를 보낼 ㅅ 있는 계정
    메세지도 보낼 수 있는 계정

    3-2. CA

    +code도 저장한 계정
    이것이 스마트 컨트랙트의 중개자 역할을 해준다.
    (함수들 저장)
    ABI같은 내용이 저장됨.

    3-3. 구성요소

    공개키
    개인키

    nonce: txCount:트랜잭션 몇번 일어났는가
    value : 100ETH = > 100* 10^18^

  • smartcontract
    contract code: ABI 내용들이 들어감.
    storage: 파일 데이터들

    id를 공개키로 pw를 비밀키로 생각하면 편함

    4나만의 토큰 만들기

    4-1. 세팅하기

  1. 솔리디티 언어로 작성한다. 특정 변수에 숫자 입력
    RPC->getBalance Transaction...
  2. 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;
    }
    
}

4-3. 컴파일하기


위와 같이 compiler버전을 맞추어주고, language도 맞춰준다. Auto compile을 선택하면 코드를 바꾸면 자동으로 compile을 해준다.

컴파일을 하면 다음과 같이 contracts 폴더 안에 artifacts라는 폴더가 생기고 그 안에 json파일들이 생긴다.

4-4. 배포하기


옆에 이더리움 모양의 걸 누르면 위아 같은 화면이 나온다. ENVIRONMENT에는 여러가지가 있다.

우리는 메타마스크를 이용할 거니 Injected Web3를 선택한다.

그러면Account에 창이 뜬다.




4-4. 함수 사용하기

Deployed Contracts를 보면 밑에 하나의 파일이 있다. 거기서 빨간 모양으로 표시된 화살표를 누른다.


그러면 minimum....라는 함수가 있고, 거기서 2번으로 쓰인 화살표를 누른다.

그럼 wei단위도 된 eth를 보낼 수 있다.


아까보다 줄어있음을 확인할 수 있다.

4-5. 토큰 발행하기

여기서 노란색으로 표시된 Import Tokens를 클릭한다. 그리고 가나슈에 들어가서 create Contract Address부분을 복사한다.

그리고 붙여넣는다.

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


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

10 GRT가 추가되었음을 알 수 있다.

5. GAS

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

profile
코딩 재밌어요!

0개의 댓글