반응형
Ether02coin

이더리움 개발 관련된 사항

알아야 될 것.

  • view 값을 가져오는 것은 가스 소모가 되지 않는다.
  • 코인 발행은 계약을 만든 사람만이 가능하다.
  • 코인 전송시에는 ID/PWD가 필요없다. 단지 이더리움 키쌍이 필요하다.

코인 만들기

image

pragma solidity ^0.5.0;

contract Coin {
    // The keyword "public" makes those variables
    // easily readable from outside.
    address public minter;
    mapping (address => uint) public balances;

    // Events allow light clients to react to
    // changes efficiently.
    event Sent(address from, address to, uint amount);

    // This is the constructor whose code is
    // run only when the contract is created.
    constructor() public {
        minter = msg.sender;
    }

    function mint(address receiver, uint amount) public {
        require(msg.sender == minter);
        require(amount < 1e60);
        balances[receiver] += amount;
    }

    function send(address receiver, uint amount) public {
        require(amount <= balances[msg.sender], "Insufficient balance.");
        balances[msg.sender] -= amount;
        balances[receiver] += amount;
        emit Sent(msg.sender, receiver, amount);
    }
}

가상 화폐(코인) 계약은 위와 같다. 정말 간단하다. 저렇게 간단한데, 코인 발행와 송금, 조회가 가능하다.

위 코드를 한 줄씩 읽어나가면 이렇게 된다.

코드 요약

  • 코인 발행자는 minter 라는 주소. (위 계약을 deploy할때 선택한 계정이 발행자가 된다. 중요하다.)
  • 주소마다 매핑된 balances가 있다. 즉, 주소로 코인 잔고 조회가 가능하다.
  • Sent는 이벤트로 송금이 완료되면 발생시키려고 만든 것이다. send 함수 마지막에 보면 호출한다.
  • 생성자(constructor)에서는 최초에 deploy시 사용자를 minter 발행자로 지정한다.
  • mint는 코인을 receiver로 amount 만큼 발행해 준다. (코인을 찍어서 준다.)
  • mint 조건을 보면 발행자만 mint를 사용할 수 있다. 금액 제한은 걸려있다. 수신자의 balances에 금액을 추가한다.
  • send는 코인 송금이다. 수신자 주소와 금액을 넣게 되어 있다.
  • send의 조건은 요청자(msg.sender)의 잔고 금액이 amount(송금금액)보다 커야 한다.
  • send에서는 송신자의 잔고에서 금액을 빼서 수신자의 잔고에 추가한다. 마지막에 송금완료 이벤트(Sent)를 발생시킨다.

저렇게 간단한 코드로 이 기능이 다 되는건가? 실제 테스트를 해 볼 수 있다.

테스트

  • deploy 계정 : 0xCA… (주소는 길기 때문에 여기서는 생략함)
  • balances에 위 계정을 입력하여 확인. 코인 잔고는 0으로 나옴.
    image
  • 나부터 코인을 찍어보자. 1000개.
    발행자만 가능하니 account는 0xCA… 로 설정하고,
    mint로 수신자 0xCA…, amount는 1000으로 해서 tranact 발생! 이후 다시 balances로 확인. 1000 코인이 발행되어 잘 들어왔다.
    image
  • 이제 다른 계정으로 발행해 보자. 계정을 0x147…로 바꿔서 mint를 해보니, 발행자 권한이 아니라 거부된다. 현재 잔고는 0으로 조회된다.
    image
    -원래 계정 0xCA에서 100원만 0x147한테 주자. 전송할때는 계정을 0xCA로 바꾼다음, send에 receiver와 amount를 입력하고 transact를 한다. balances조회하면 100 코인이 정상적으로 수신되었다. 0xCA로 balances를 조회하면 100코인이 줄어 900코인이 된 것을 확인할 수 있다.
    imageimage

Author: crazyj7@gmail.com

'BlockChain' 카테고리의 다른 글

Solidity#2 HelloWorld  (0) 2019.12.06
Solidity 0.4 vs 0.5  (0) 2019.12.06
Windows Ethereum python module install error  (0) 2019.12.04
[ether01] solidity 맛보기  (0) 2019.11.10
이더리움개발 환경 준비  (1) 2019.11.10

+ Recent posts