如何在SimpleChain上发行数字资产

前提条件

实现链上发币的准备工作,包括:

  • SimpleChain 的下载以及部署。
  • 启动节点。
  • 创建账户。
  • 确保账户解锁并有 token。

准备工作

1.了解 ERC20 代币标准。

说明:在 SimpleChain 上实现代币需要遵循 ERC20 标准。

//ERC20Token.sol
//ERC 合约标准,该标准规定在发 Token 之前,需要指定 token 的名称、标识、总量、实现合 
//约标准函数等    
pragma solidity ^0.4.26; 

contract ERC20Token {
    //获取 token 名称
    function name() public constant returns (string name);
    //获取 token 标识
    function symbol() public constant returns (string symbol);
    //获取 token 的最小分割量
    function decimals() public constant returns (uint8 decimals);
    //获取 token 的总量
    function totalSupply() public constant returns (uint256 totalSupply);
    //获取_owner 账户当前的 token 量
    function balanceOf(address _owner) public constant returns (uint256 balance);
    //转账交易
    function transfer(address _to, uint256 _value) public returns (bool success);
    //由_from 向_to 进行转账
    function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
    //许可_spender 能从调用合约方法的账户转出总量为_value 的 token
    function approve(address _spender, uint256 _value) public returns (bool success);
    //获取_spender 可以从账户_owner 中转出 token 的剩余数量
    function allowance(address _owner, address _spender) public constant returns (uint remaining);
    //转账事件(transfer、transferFrom 会触发该事件)
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    //许可事件(approve 会触发该事件)
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}

2.编写符合ERC20标准的代币合约。

//Mytoken.sol
pragma solidity ^0.4.26;
import "./ERC20Token.sol";

contract MyToken is ERC20Token {
    string private _name;
    string private _symbol;
    uint8 private _decimals = 18; //此处建议为 18,代表最小单位为 0.1^18 
    uint256 private _totalSupply;

    //存储账户的 token 总量
    mapping(address => uint256) private _balances;
    //存储前一个address允许后一个address转出token的剩余数量 
    mapping(address => mapping(address => uint256)) private _allowances;

    function MyToken(uint256 initialSupply, string tokenName, string tokenSymbol) public{
        _name = tokenName;
        _symbol = tokenSymbol;
        _totalSupply = initialSupply * 10 ** uint256(_decimals);
        _balances[msg.sender] = _totalSupply;
   }

   function name() public constant returns (string name){ 
        name = _name;
   }
   function symbol() public constant returns (string symbol){ 
        symbol = _symbol;
   }
   function decimals() public constant returns (uint8 decimals){ 
        decimals = _decimals;
   }
   function totalSupply() public constant returns (uint256 totalSupply){ 
        totalSupply = _totalSupply;                
   }
   function balanceOf(address _owner) public constant returns (uint256 balance){ 
        balance = _balances[_owner];
   }
   function transfer(address _to, uint256 _value) public returns (bool success){ 
       require(_balances[msg.sender] >= _value); //保证发出交易的账户 token 足够完成转账
       _balances[msg.sender] -= _value; _balances[_to] += value; Transfer(msg.sender, _to, _value); success = true;
   }
   function transferFrom(address _from, address _to, uint256 _value) public returns (bool success){
       require(_balances[_from] >= _value); //保证_from 账户 token 足够完成转 账
       require(_allowances[_from][msg.sender] >= _value); //保证_from 账户允许 执行账户转出的 token 剩余量足够
       _balances[_from] -= _value; _allowances[_from][msg.sender] -= _value; _balances[_to] += _value;
       Transfer(_from, _to, _value);
       success = true;
   }
                             }
   //许可_spender 能从调用合约方法的账户转出总量为_value 的 token
   function approve(address _spender, uint256 _value) public returns (bool success){
       _allowances[msg.sender][_spender] = _value; 
       Approval(msg.sender, _spender, _value); success = true;
   }

   //获取_spender 可以从账户_owner 中转出 token 的剩余数量
   function allowance(address _owner, address _spender) public constant returns (uint256 remaining){
        remaining = _allowances[_owner][_spender]; 
    }
}

合约编译

  1. 使用浏览器打开 Remix Solidity IDE
  2. ERC20Token.solMyToken.sol 添加到 browser 文件夹下。
  3. 在网页右侧框选中 Compile 选项,选择合约编译器的版本(本文选择 0.4.26)。
  4. 点击 Start to compile 进行编译。

6.1.png

合约部署

  1. 选中 Run 选项,在 Environment 中选择 Web3 Provider。在弹出的选框中输入当前启 动的sipe节点端口。

6.2.png

  1. 选择已解锁且有 token 的 Account 地址。
  2. 选择 MyToken 合约,在 Deploy 栏中输入初始化参数:token 总量,token 名,token标识,点击Deploy。
  3. 等待一分钟左右至合约部署完成,在 Deployed Contracts 栏出现合约则说明部署完成。至此发币完成。

6.3.png

合约验证

  1. 执行合约的decimals,name,symbol,totalSupply方法查看代币是否创建成功。

6.4.png

  1. 执行transfer方法,展开transfer方法向其他账户进行转账并使用balanceOf查询是 否转账成功。

6.5.png

results matching ""

    No results matching ""