铸币/发币
界面
代码
pragma solidity ^0.4.17;
contract Coin{
address public miner;
mapping(address=>uint) public balances;
event Sent(address from,address to,uint amount);
constructor()public{
miner = msg.sender;
}
function mint(address receiver,uint amount)public{
require(msg.sender == miner);
balances[receiver] += amount;
}
function send(address receiver,uint amount)public{
require(balances[msg.sender] >= amount);
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Sent(msg.sender,receiver,amount);
}
}
讲解
- address public miner; //miner代表挖矿的人,属性是地址
- mapping(address=>uint) public balances; //地址和账户余额二者组成键值对,类似于Map的形式。将balances设置为public的形式,就可以查看地址对应的钱数
- 点击miner,就可以查看合约的创始人,miner = msg.sender;这个命令使得miner等于发布合约的人
- function mint(address receiver,uint amount)public 只有miner(合约创始人)才可以挖矿
- function send(address receiver,uint amount)public{ 先判断余额,然后发送方减钱,接收方加钱
具体操作
- 先点击miner判断当前账户的地址,然后复制地址
- 在mint中输入双引号,引号内填入地址,后面接入挖矿的钱数。类似:“挖矿地址”,10000
- 在balances同样操作,查看地址的钱数
- 在send中,点击界面ACCOUNT,复制一个地址,作为接收方。然后,操作一致,类似:“接收方地址”,10000,进行转钱
- 点击balances可以看到钱减少了,对应接收方的地址增加了
改进版本(限制了发币的数量)
代码
pragma solidity ^0.4.17;
contract Coin1{
mapping(address=>uint) public balances;
constructor(uint initalSupply)public{
balances[msg.sender] = initalSupply;
}
function send(address receiver,uint amount)public returns(bool success){
require(balances[msg.sender] >= amount);
require(balances[receiver]+amount >= balances[receiver]);
balances[msg.sender] -= amount;
balances[receiver] += amount;
return true;
}
}