// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.6.0 <0.9.0;
contract Coin{
address public minter; //public 铸币地址
mapping(address => uint) public balances; //地址和余额的映射,uint有上限的
event Sent(address from,address to,uint amount); //事件,便于log查看获取参数
constructor(){ //构造函数 指定铸币者
minter=msg.sender;
}
function mint(address receiver,uint amount)public{ //铸币,接收地址和数量
require(msg.sender==minter); //设置msg调用铸币的地址为minter
balances[receiver]+=amount; //minter数量增加
}
function send(address receiver,uint amount)public{ //发币,接收地址和数量
require(amount<=balances[msg.sender]); //发送的数量要小于账户余额的数量,require判断中可以是false
balances[msg.sender]-=amount; //msg铸币地址数量减少
balances[receiver]+=amount; //获币地址数量增加,加减中可能会溢出需要安全限制
emit Sent(msg.sender,receiver,amount);
}
}
minter地址:0x78731D3Ca6b7E34aC0F824c42a7cC18A495cabaB
函数send中的接收地址:0x617F2E2fD72FD9D5503197092aC168c91465E7f2
先调用mint函数 给minter地址增加20000数量,再调用send函数,转给接收地址5000
mint:0x78731D3Ca6b7E34aC0F824c42a7cC18A495cabaB, 20000
send:0x617F2E2fD72FD9D5503197092aC168c91465E7f2,5000
最后余额截图: