MOAC上部署ERC-20智能合约_发币_区块链技术_区块链神吐槽
区块链技术资源分享
追寻中本聪先生的脚步

MOAC上部署ERC-20智能合约_发币

本文基于moac公链,使用moac网页版钱包发行ERC-20token。

环境:公链:MOAC-pangu0.8.2。

节点版本:MOAC-pangu0.8.2-windows.exe。

操作系统:Windows 10家庭版。

MOAC上部署ERC-20智能合约

安装并启动moac本地节点

1.1 安装moac节点请参考文档《moac安装教程》:

参考9.2安装教程,访问网址:

https://github.com/MOACChain/moac-core/wiki

1.2 启动moac节点

打开命令终端(cmd),转到墨客当前目录,在命令行中执行:

D:\ moacPangu0.8.2-win>moac--rpc --rpccorsdomain="http://wallet.moac.io"

备注: --rpc  启动RPC服务,本机访问节点

--rpccorsdomain  启动RPC服务,非本机访问节点

"http://wallet.moac.io" moac在线钱包网址,会自动连接到本机启动的moac节点并显示已有账号,如果本机节点没有启动,会显示以下提示信息。

编写并编译智能合约

2.1 以下为基于erc-20编写的一个代币合约

pragmasolidity ^0.4.16;

contractToken{

uint256 public totalSupply;

 

function balanceOf(address _owner) public constant returns (uint256balance);

function transfer(address _to, uint256 _value) public returns (boolsuccess);

function transferFrom(address _from, address _to, uint256 _value) publicreturns

(bool success);

function approve(address _spender, uint256 _value) public returns (boolsuccess);

function allowance(address _owner, address _spender) public constantreturns

(uint256 remaining);

event Transfer(address indexed _from, address indexed _to, uint256_value);

event Approval(address indexed _owner, address indexed _spender, uint256

_value);

}

contractTokenDemo is Token {

string public name;                  //名称,例如"My test token"

uint8 public decimals;              //返回token使用的小数点后几位。比如如果设置为3,就是支持0.001表示.

string public symbol;              //token简称,like MTT

function TokenDemo(uint256 _initialAmount, string _tokenName, uint8_decimalUnits, string _tokenSymbol) public {

totalSupply = _initialAmount * 10 **uint256(_decimalUnits);         // 设置初始总量

balances[msg.sender] = totalSupply; // 初始token数量给予消息发送者,因为是构造函数,所以这里也是合约的创建者

name = _tokenName;

decimals = _decimalUnits;

symbol = _tokenSymbol;

}

function transfer(address _to, uint256 _value) public returns (boolsuccess) {

//默认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

Transfer(msg.sender, _to, _value);//触发转币交易事件

return true;

}

function transferFrom(address _from, address _to, uint256 _value) publicreturns

(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

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 (boolsuccess)

{

allowed[msg.sender][_spender] = _value;

Approval(msg.sender, _spender, _value);

return true;

}

function allowance(address _owner, address _spender) public constantreturns (uint256 remaining) {

return allowed[_owner][_spender];//允许_spender从_owner中转出的token数

}

mapping (address => uint256) balances;

mapping (address => mapping (address => uint256)) allowed;

}

代码不做过多解释,参考注释。

2.2 编译、部署合约

在网页钱包点击“CONTRACTS”

选择一个有moac余额的账号

在“Select contract to deploy”下拉框选择相应的token类型,本例为“Token Demo”,下面会自动弹出参数输入框,主要包括四项:

1、initial Amount - 256 bits unsignedinteger

//token发行总量,本例为"10000"

2、token Name - String

//token名称,本例为"KongFuZiToken"

3、decimal Units - 8 bits unsigned integer

//token最小单位是小数点后第几位

4、token Symbol - String

//token简称,本例为"KFZT"

此时会显示发布合约确认界面。

注意:Data里必须有数据,否则不能正常部署

点击成功部署的合约,可以看到基本内容,包括合约地址hash、被写入的区块号等。

点击发布该合约的账号地址,即上图的"from",可以看到该账号下的所有合约部署情况。

3.2 将发行成功的token加到钱包

点击进入钱包的“CONTRACT”界面

点击“ok”

3.3 交易

从钱包里拥有KFZT token的主账户,点击“SEND”进入发送交易界面。

填入要接收的账户(“TO”)、选择要发的代币名称(“KongFuZi Token”)、填入要交易的token数量(“AMOUNT”),点击“SEND”

提示需要解锁主账户(发送代币的账户)

进入moac console界面,输入以下命令解锁账户

>personal.unlockAccount(mc.accounts[0],"passwd", 0)

成功解锁会返回true

然后重新去发送token,交易成功后会看到FROM账号token数量减少

moac区块链浏览器

http://explorer.moac.io

查看erc20代币的时候,可以看到合约创建情况,发送token交易成功后能看到from_address与合约地址的交易,但是看不到合约地址与to_address的交易,正在完善中。网页版钱包能看到token交易的完整过程。

墨客在线钱包

http://www.moac.cloud/wallet.html

分享到:更多 ()
区块链神吐槽

来评论吐槽 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

区块链资源分享

联系我一起学