본문 바로가기
블록체인/솔리디티

[솔리디티] 간단한 Smart Contract (코인 발행 예제)

by 발담그는블로그 2022. 5. 24.

코인 발행은 컨트랙트를 만든 사람만이 할 수 있다. 코인을 전송할 땐 아이디와 비밀번호 등이 필요하지 않다. 오직 필요한 것은 Ethereum 키 쌍 뿐이다.

Smart Contract 예제

pragma solidity ^0.5.0;

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

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

    // This is the constructor whose code is
    // run only when the contract is created.
    constructor() public {				// (3) 생성자
        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);
    }
}

 

(1) address public minter

address 타입은 160 비트의 값으로 그 어떤 산술 연산을 허용하지 않는다. 이 타입은 컨트랙트 주소나 외부 사용자들의 키 쌍을 저장하는 데 적합하다. public 키워드는 변수의 현재 값을 컨트랙트 바깥에서 접근할 수 있도록 하는 함수를 자동으로 만들어줍니다.

(2) event Sent(address from, address to, uint amount)

"이벤트" 로 불리며 send 함수 마지막 줄에서 발생된다. 이벤트가 발생되었을 때 이를 받는 곳에서는 from, to, amount 의 인자를 함께 받으며, 이는 트랜잭션을 파악하는데 도움을 줍니다.

(3) contructor

컨트랙트 생성 시 실행되는 함수. 해당 로직은 컨트랙트를 만든 사람의 주소를 영구적으로 저장한다. (msg (tx  block 포함)는 유용한 전역 변수로 블록체인에 접근할 수 있는 다양한 속성들을 담고 있다.) msg.sender 는 외부에서 지금 함수를 호출한 주소를 나타낸다.

 

Reference

- Solidity Docs KR

반응형