详解solidity中的入门例子(子货币例子):一个最简单的加密货币
原文链接
https://solidity-cn.readthedocs.io/zh/develop/introduction-to-smart-contracts.html
原文代码
pragma solidity ^0.4.21;
contract Coin {
// 关键字“public”让这些变量可以从外部读取
address public minter;
mapping (address => uint) public balances;
// 轻客户端可以通过事件针对变化作出高效的反应
event Sent(address from, address to, uint amount);
// 这是构造函数,只有当合约创建时运行
function Coin() 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[msg.sender] -= amount;
balances[receiver] += amount;
emit Sent(msg.sender, receiver, amount);
}
}
https://solidity-cn.readthedocs.io/zh/develop/introduction-to-smart-contracts.html
引例
A是铸币者(写下这个货币合约代码的人),B向C转账100个货币。
A是唯一有权限给所有人凭空创造出货币的人(不通过交易)。
地址与货币
所有的参与者,A、B、C,都叫地址[address]。
所有的货币值,都是一个256位无符号数字[uint]。
哈希映射
每个地址都有一个余额,通过哈希表[mapping] balances映射。
balances[地址]=余额
构造函数
A存在minter(铸币者)中。
事件sent与事件发送函数send
send发送的是一条交易记录,如B向C转账100个货币:
emit sent(B,C,100)
msg.sender
永远指向当前函数的调用地址。
总结
合约 Coin{
构造函数:minter=铸币者A的地址。
mint函数:只有铸币者A能调用;给B的账户余额加10个货币。
send函数:B向C转账100个货币,先检查B的余额有没有100个,有就让B的余额减少100个货币,C的余额增加100个货币,并将B,C,100广播出去。
}