// SPDX-License-Identifier: MIT
// 위 주석은 이 소스 코드의 라이선스가 MIT 라이선스임을 나타냅니다.
pragma solidity >=0.7.0 <0.9.0;
contract Coin {
address public minter;
mapping(address => uint) public balances;
event Sent(address from, address to, uint amount);
constructor() {
minter = msg.sender;
}
// 새로운 코인을 발행하는 함수입니다.
// 발행자(minter)만이 이 함수를 호출할 수 있습니다.
function mint(address receiver, uint amount) public {
require(msg.sender == minter);
balances[receiver] += amount;
}
// 코인을 송금하는 함수입니다.
// 보내는 사람의 잔고가 충분하지 않은 경우, InsufficientBalance 오류를 발생시킵니다.
function send(address receiver, uint amount) public {
if(amount > balances[msg.sender])
revert InsufficientBalance({
requested: amount,
available: balances[msg.sender]
});
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Sent(msg.sender, receiver, amount);
}
// InsufficientBalance 오류를 정의합니다.
error InsufficientBalance(uint requested, uint available);
}
위 코드에서 주석은 코드의 각 부분에 대한 설명을 제공합니다. 이를 통해 코드를 이해하고 유지보수하기 쉬워집니다. 또한 SPDX-License-Identifier 주석을 포함하여 라이선스 정보를 명시함으로써, 코드 사용 조건을 명확하게 지정합니다.
Remix 에서 첫번째 계좌(발행자)로 먼저 일정량의 코인을 mint 한다.
그리고 두 번째 계좌 주인의 돈을 100000 만큼 전송해놓고, 다섯 번째 계좌 주인에게 5000, 50000, 50000을 전송하고, 추가로 50000원을 전송하려니 잔액부족으로 에러가 발생한 것을 확인했다.