7、基于账户的代币合约

一、合约代码。

官方文档:https://solidity.readthedocs.io/en/develop/index.html

巴比特文档:http://book.8btc.com/books/6/solidity-zh/_book/solidity-example.html

pragma solidity 0.4.16;
contract Token {
  mapping (address => uint) public balancesOf;
  address public owner;
  //这里是创建合约的时候调用。msg.sender就是eth.account[0],也可以改编译后的代码指定。其他地方谁调用msg就是调用者
  function Token() { 
    owner = msg.sender;
    balancesOf[msg.sender] = 10000;
  }

//msg就是调用者
  function transfer(address _to, uint _value) {
      //避免转移出去的代币超过当前的存货
    if (balancesOf[msg.sender] < _value) revert(); 
     //避免自己调用自己,或者递归调用
    if (balancesOf[_to] + _value < balancesOf[_to]) revert();
    balancesOf[msg.sender] -= _value;
    balancesOf[_to] += _value;
  }

  function mint(uint _amount) {
    balancesOf[owner] += _amount;
  }
}
  • address:简单地说就是geth中的账户的地址(公钥)
  • mapping (address => uint) balancesOf 代表定义了一个 key为address类型, value为uint类型的hashtable。在区块链私链上的账户都可以通过balancesOf[address] 来查询某个账户的代币数量。
  • msg就是指谁调用该智能合约时候发来的信息,智能合约也是一个账户。因此在以太坊中调用智能合约从底层看来就是一个账户给智能合约账户发送了一个transaction,里面包含了谁发送的,发送了多少以太币,发送了多少gas。

    下面是msg的一些变量

    msg.data (bytes): complete calldata
    msg.gas (uint): remaining gas
    msg.sender (address):当前发送信息的人
    msg.sig (bytes4): first four bytes of the calldata (i.e. function identifier)
    msg.value (uint): 发送这个消息花费多少wei 引用自here

    最主要的就是msg.sender,代表那个账户调用该智能合约。因此balancesOf[msg.sender] = 10000; 代表给msg.sender也就是创建该合约的地址赋予一个初始值 10000;
  • 在上面的代码中,我们设置一个public owner, 保存下创建合约的msg.sender, 记录下创建者的地址。
  • 转账函数function transfer()中,我们设置了两个条件,避免转移出去的代币超过存货的情况,以及自己转移给自己的问题。
  • function mint()中,我们给合约的owner增加我们定义的代币。从而让其方便的分给别人。
  • 这里编译后的代码指定创建账号(公钥)。
  • 182215_9gTk_2601303.png

二、solidity浏览器调试代码。

1、点击“Create”按钮后,可以看到owner的地址:

180825_F81y_2601303.png

2、把上面的地址复制下来,并且两边加引号。调用balancesOf可以看到有10000.

180855_H9IK_2601303.png

增加账户余额、转账类似上面的调用。传递响应参数即可,如果是地址参数,需要把公钥加上引号传递。

参考文档:http://www.ethchinese.com/?p=790

 

转载于:https://my.oschina.net/kunBlog/blog/1527140

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值