以太坊- Ethereum

以太坊开发(九)Mist使用:合约及部署合约

2018-03-04  本文已影响749人  yuyangray

这篇文章来自以太中文网:区块链学堂(17):Mist 3–合约页面&部署合约,我会对使用过程中自己遇到的问题进行补充。

Mist 中的合约页面

点击Mist页面中的Contracts,可以看到合约页面

点击按钮 Deploy New Contract 按钮,可以部署一个新的合约,我们点击该按钮, 会看到的上方界面如下:

在From中我们可以选择一个账户,Main Account/account 1, 选择哪个账户,那么那个账户就是该合约的创建者。

那么在构造函数中的msg.sender也就是谁,而同样的变量owner也就是那个账户的地址。

contract Token {
...
address public owner;
function Token() {
  owner = msg.sender;
  ...
}

在代码界面,我们贴上下方的代码:

pragma solidity 0.4.8;
contract Token {
  mapping (address => uint) public balancesOf;
  address public owner;
  function Token() {
    owner = msg.sender;
    balancesOf[msg.sender] = 10000;
  }

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

  function mint(uint _amount) {
    balancesOf[owner] += _amount;
  }
}

注:这里右侧编译区会报错:

从0.4.9起可以在前面不打^ ,0.4.8/0.4.7等版本还是需要打^,这里我们直接使用最新的0.4.20。

需要指定方法的可见性:public、private、internal、external。

当前编译器版本已经废除了throw,判断使用revert(),,require(),assert()。

下面是修改后的代码:

pragma solidity 0.4.20;
contract Token {
  mapping (address => uint) public balancesOf;
  address public owner;
  function Token() public {
    owner = msg.sender;
    balancesOf[msg.sender] = 10000;
  }

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

  function mint(uint _amount) public {
    balancesOf[owner] += _amount;
  }
}

所看到的结果如下(图中还是旧代码):

部署页面解析

点击下方的部署按钮,我们可以看到弹出的这个页面

(注:这里我并没有进行修改,最后也能部署成功。)

部署完毕后的合约页面是这样的

为什么合约没有第一时间出来呢,因为任何合约是一个特殊账户,任何特殊账户之间的Transaction都需要挖矿挖出来,并得到各个区块的确认。

过了一段时间之后,我们可以看到合约出现了。

(注:这里还是需要在Geth中启用挖矿才能部署成功。)

参考:区块链学堂(17):Mist 3–合约页面&部署合约
作者:以太中文网

上一篇 下一篇

猜你喜欢

热点阅读