学习以太坊部署智能合约(五) — 智能合约创造新的加密货币(Remix)
通过上一个博客,我们了解在Remix中如何编写智能合约以及如何部署等,这里我们来了解一下如何使用智能合约写一个加密货币。
先贴代码(后面才是精华):
pragma solidity ^0.4.21;
// 创造一个货币,任何人都可以发生发送货币,不需要注册用户名和密码,只需要一个以太坊账户(密钥对)
contract Coin{
// 关键字 public 让状态变量可以从外部读取
address public minter;
mapping (address => uint) public balances;
// 定义一个事件,客户端可以根据事件变化做出反应
event Sent(address from, address to, uint amount);
// 构造函数,只有在创建合约时运行一次
constructor() public{
minter = msg.sender;
}
// 挖矿方法,用来产生新的货币
function mint(address receiver, uint amount) public {
if (msg.sender != minter) return;
balances[receiver] += amount;
}
// 发送货币
function send(address receiver, uint amount) public {
if (balances[msg.sender] < amount) return;
balances[receiver] += amount;
emit Sent(msg.sender, receiver,amount);
}
}
详解代码:
address public minter;
这行代码声明了一个可以被公开访问的地址类型( address )的状态变量。地址类型是一个160位的值,且不允许任何算术操作。这种类型用来存储合约地址或外部账户地址。public指允许在合约之外访问这个状态变量的值,如果没有这个关键字,其他合约无法访问这个变量。
mapping (address => uint) public balances;
这行代码创建了另一个public 状态变量,它的数据类型是更加复杂的mapping ,该类型保存一个个键值对。mapping可以被看作一个哈希表,它会执行虚拟初始化,使所有可能存在的键都对应一个全零的值。注意:Solidity中的mapping不能遍历访问(无法获得所有键或值的列表)。
event Sent(address from, address to, uint amount);
这行代码声明了一个事件( Event),它会在send 函数的最后一行被发送。应用可以监听区块链上正在发送的事件, 一旦事件被发出,监听该事件的listener都将收到通知。而所有的事件都包含了from 、to 和amount 三个参数。
constructor() public{
minter = msg.sender;
}
这是一个构造函数,它只在创建合约时运行。这个构造函数做了一件事,就是保存(外部)函数调用者的地址msg.sender。
function mint(address receiver, uint amount) public {
if (msg.sender != minter) return;
balances[receiver] += amount;
}
mint 是可以真正被用户或其他合约调用的方法。不过如果mint 被非合约创建者调用, 则什么事也不会发生。
function send(address receiver, uint amount) public {
if (balances[msg.sender] < amount) return;
balances[receiver] += amount;
emit Sent(msg.sender, receiver,amount);
}
send 同样是可以真正被用户或其他合约调用的方法。send 可以被任何人(前提是拥有这些币〉调用,用来向他人发送币。
如有错误,请前辈指教!大家可以多多评论,我们一起讨论

浙公网安备 33010602011771号