学习以太坊部署智能合约(五) — 智能合约创造新的加密货币(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 可以被任何人(前提是拥有这些币〉调用,用来向他人发送币。

如有错误,请前辈指教!大家可以多多评论,我们一起讨论

posted @ 2021-01-21 19:46  SHA_y  阅读(271)  评论(0)    收藏  举报