使用Remix编写Solidity语言的小例子 铸币/发币

铸币/发币

界面

使用Remix编写Solidity语言的小例子 铸币/发币_第1张图片

代码

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{  先判断余额,然后发送方减钱,接收方加钱

Event

  • event Sent(address from,address to,uint amount);   声明一个事件(event),会在send函数的最后一行触发
  • 用户可以监听区块链上正在发送的事件,而不需要花费太多的成本,一旦事件被发出,监听该事件的listener都会收到通知
  • 所有的事件都包含了from,to和amount三个参数,可以方便追踪事务
  • 触发Sent,并将参数传入

使用Remix编写Solidity语言的小例子 铸币/发币_第2张图片

具体操作

  • 先点击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;
    }
}

事件的监听

Coin.Sent().watch({},'',function(error,result)){
    if(!error){
        console.log("Coin transfer:" + result.args.amount + "coins were sent from" + result.args.from + "to"+result.args.to+".");
        console.log("Balances now:\n" + "Sender:" + Coin.balances.call(result.args.from)+"Receiver:"+COin.balances.call(result.args.to));
    }
}

 

 

 

 

你可能感兴趣的:(区块链)