Ropsten部署合约-2

pragma solidity ^0.4.16;  
contract Token{  
    uint256 public totalSupply;  
  
    function balanceOf(address _owner) public constant returns (uint256 balance);  
    function transfer(address _to, uint256 _value) public returns (bool success);  
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);  
    function approve(address _spender, uint256 _value) public returns (bool success);  
    function allowance(address _owner, address _spender) public constant returns (uint256 remaining);  
    event Transfer(address indexed _from, address indexed _to, uint256 _value);  
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);  
}  
  
contract TokenDemo is Token {  
  
    string public name;                   //名称,例如"My test token"  
    uint8 public decimals;               //返回token使用的小数点后几位。比如如果设置为3,就是支持0.001表示.  
    string public symbol;               //token简称,like MTT  
  
    constructor  () public {  
        totalSupply = 100000;         // 设置初始总量  
        balances[msg.sender] = totalSupply; // 初始token数量给予消息发送者,因为是构造函数,所以这里也是合约的创建者  
        name = "DQB";                     
        decimals = 8;            
        symbol = "DQB";  
    }  
  
    function transfer(address _to, uint256 _value) public returns (bool success) {  
        //默认totalSupply 不会超过最大值 (2^256 - 1).  
        //如果随着时间的推移将会有新的token生成,则可以用下面这句避免溢出的异常  
        require(balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]);  
        require(_to != 0x0);  
        balances[msg.sender] -= _value;//从消息发送者账户中减去token数量_value  
        balances[_to] += _value;//往接收账户增加token数量_value  
        emit Transfer(msg.sender, _to, _value);//触发转币交易事件  
        return true;  
    }  
  
  
    function transferFrom(address _from, address _to, uint256 _value) public returns   
    (bool success) {  
        require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value);  
        balances[_to] += _value;//接收账户增加token数量_value  
        balances[_from] -= _value; //支出账户_from减去token数量_value  
        allowed[_from][msg.sender] -= _value;//消息发送者可以从账户_from中转出的数量减少_value  
        emit Transfer(_from, _to, _value);//触发转币交易事件  
        return true;  
    }  
    function balanceOf(address _owner) public constant returns (uint256 balance) {  
        return balances[_owner];  
    }  
  
  
    function approve(address _spender, uint256 _value) public returns (bool success)     
    {   
        allowed[msg.sender][_spender] = _value;  
        emit Approval(msg.sender, _spender, _value);  
        return true;  
    }  
  
    function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {  
        return allowed[_owner][_spender];//允许_spender从_owner中转出的token数  
    }  
    mapping (address => uint256) balances;  
    mapping (address => mapping (address => uint256)) allowed;  
}  

还是用这个合约账户部署智能合约,支付所需的花费

合约账户,代币所有者,MetaMask钱包:

0x8e0d8466ef0cc4b0a1301aa7da1a030063efa3e2

https://ropsten.etherscan.io/address/0x8e0d8466ef0cc4b0a1301aa7da1a030063efa3e2

部署合约的hash值和合约地址

TxHash: 0x52816faa48bec0d57f6c612701e48266fbf8d9969302db4a5b2fb2070d8ba200

From: 0x8e0d8466ef0cc4b0a1301aa7da1a030063efa3e2 MetaMask钱包地址

To: [Contract 0x430f90a6e47679bd5a5c41be871338af4026cba5 Created]  合约地址

合约初步部署后,应该再Code 页面下去Verify And Publish去验证合约,参考Ropsten 智能合约部署3.1去验证合约。经过验证,这次部署是失败的。最初部署时,没有留心去关注编译器,为验证和发布失败埋下了伏笔。

 

https://ropsten.etherscan.io/address/0x430f90a6e47679bd5a5c41be871338af4026cba5 ,为什么合约地址页面上没有代币的名称和符号呢?要在MetaMask钱包页面Add Token,将发行的Token加入到钱包中。

 代币已经部署,那么如何进行代币的转账操作呢?

 以太币的转账操作

 

输入目的地址和数量后,点击生成交易会出现原始交易和签署交易框,

 

有问题呢,MetaMask钱包中明明有ETH,为什么会是余额0,是因为钱包里不是真实的ETH吗?

确认交易后,MetaMask会弹出submit

 点击Verify Transaction后出现, 

 

 说明这次交易还没有被挖矿。

以太币的转账没有被挖矿,或者说会失败的,那么我发行的代币呢,在这里点击Add Custom Token

Add Token也失败了 。

参考链接:

https://tn.51cto.com/article/704

https://blog.csdn.net/liaodehong/article/details/78765021

阅读更多

更多精彩内容