코인 발행은 컨트랙트를 만든 사람만이 할 수 있다. 코인을 전송할 땐 아이디와 비밀번호 등이 필요하지 않다. 오직 필요한 것은 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
반응형
'블록체인 > 솔리디티' 카테고리의 다른 글
[솔리디티] 나만의 토큰 만들기 (feat. ERC20) (0) | 2022.05.28 |
---|---|
[Solidity]Truffle, Ganache를 이용한 Smart Contract 작성 (0) | 2021.12.10 |
[Solidity] 함수 (0) | 2021.12.04 |
[Solidity] 변수 및 데이터 타입 (0) | 2021.12.01 |
[Solidity] 구조체 & 배열 (0) | 2021.12.01 |