加载中 ...
首页 > 新闻资讯 > 区块链 正文

去开发令牌

2019-08-13 14:26:03 来源:沈阳小程序开发 作者:沈阳软件开发

ERC-20是使用智能合约在Taitaifang区块链中实现令牌的技术,20是分配给该请求的号码。在以太坊区块链上发布的大多数令牌都符合ERC-20标准。据Etherscan.io称,到目前为止,在以太坊主网络上共发现了147,762个ERC-20令牌令牌。

ERC-20为更大的以太坊生态系统中的以太坊令牌定义了一个通用的规则列表,允许开发人员准确预测令牌之间的交互。这些规则包括如何在地址之间传输令牌以及如何访问每个令牌中的数据。

目前,Ether不符合ERC-20标准。需要ERC-20合规性事务的协议创建了一个打包的Ether Token作为ETH的占位符。这些“WETH”令牌存储在单独的智能合约中,并以1:1的方式链接到以太网。

1. ERC-20历史的起源

ERC-20由Fabian Vogelsteller于2015年11月19日提交。它定义了以太网令牌必须实施的通用规则列表,以使开发人员能够编程新的令牌在以太坊生态系统中的工作方式。 ERC-20令牌标准开始受到数字货币产品(ICO)众筹公司的欢迎,因为它易于部署,并且有可能与其他以太坊令牌标准互操作。

2.申请

迄今为止,已在以太坊区块链网络上运行了超过147,762个ERC-20令牌合同。最成功的ERC20Token销售包括EOS,Filecoin,Bancor,Qash和Bankex已经筹集了大量资金。

3.功能

ERC-20令牌具有以下与方法相关的功能:

获取令牌令牌的总数

totalSupply()公共视图返回(uint256 totalSupply)

获取帐户的帐户余额和相应的合同地址

balanceOf(address _owner)公共视图返回(uint256余额)

将一定数量的令牌令牌发送到该地址到其他接收传输地址

转移(地址_to,uint256 _value)公共回报(布尔成功)

将_value令牌令牌令牌从address_from发送到address_to

transferFrom(address _from,address _to,uint256 _value)public returns(bool success)

允许_spender多次退出您的帐户,最多为_value金额。如果再次调用此函数,它将使用_value

覆盖当前允许的值

批准(地址_spender,uint256 _value)公共回报(bool成功)

返回仍允许从_owner退出的_spender的数量

Allowance(地址_owner,地址_spender)公共视图返回(uint256剩余)

事件格式

转移令牌时触发

转移(地址索引_from,地址索引_to,uint256 _value)

每当批准(地址_spender,uint256 _value)被调用时触发

批准(地址索引_owner,地址索引_spender,uint256 _value)

2. ERC20令牌帐户地址生成

由于许多令牌未在BIP44上注册相应的序列号,因此当生成ERC20令牌时,大多数当前钱包使用以太坊帐户地址生成ERC20令牌地址。我们不同于这里的官方钱包开发,我们将使用严格的地址生成方法来生成ERC20令牌的地址。请参阅BIP44协议内容部分。这里不再重复介绍了。

以下是生成ERC20地址的打包函数

函数erc20Address(seed,bipNumber,number,coinMark){

如果(!seed ||!number){

Console.log('输入参数种子,coinNumber和数字为空')

返回paramsErr;

}

Var rootMasterKey=hdkey.fromMasterSeed(seed);

Var childKey=rootMasterKey.derivePath('m/44'/'+ bipNumber +''/0'/0 /'+ number +'');

Var address=util.pubToAddress(childKey._hdkey._publicKey,true).toString('hex');

Var privateKey=childKey._hdkey._privateKey.toString('hex');

Var erc20Data={coinMark: coinMark,privateKey: privateKey,address:'0x'+ address}

返回erc20Data;

}

功能描述:种子是随机种子缓冲流,bipNumber对应于BIP44协议上指定的代码,数字对应第一个帐号,0代表第一个服务器,coinMark符号,如LET。

3. ERC20令牌转移签名

以下是打包的ERC20事务签名。上面的代码包含一个ERC20事务签名和一个批处理ERC20事务签名。该代码使用了ethereumjs-tx开源库。

Const transaction=require('ethereumjs-tx');

Const paramsErr={code: 1000,message:'input params is null'};

Var libErc29Sign={};

函数addPreZero(num){

Var t=(num +'')。length,

s='';

对于(var i=0; i <64-t;&gt;

s +='0';

}

返回s + num;

}

此函数是单个ERC20令牌事务签名函数,privateKey是私钥; nonce transaction nonce,标识每个事务; currentAccount要转移的当前账户地址; contractAddress令牌地址; toAddress数字货币转帐地址; gasPrice and gasLimit这两个乘法代表手续费;总金额转移金额,十进制令牌单位转换。

函数ethereumErc20CoinSign(privateKey,nonce,currentAccount,contractAddress,toAddress,gasPrice,gasLimit,totalAmount,decimal){

如果(!privateKey ||!nonce ||!currentAccount ||!contractAddress ||!toAddress ||!gasPrice ||!gasLimit ||!totalAmount ||!decimal){

Console.log('param之一为null,请给出一个有效的参数');

返回paramsErr;

}

Var transactionNonce=parseInt(nonce).toString(16);

Var gasLimits=parseInt(90000).toString(16);

Var gasPrices=parseFloat(gasPrice).toString(16);

Var txboPrice=parseFloat(totalAmount *(10 ** decimal))。toString(16)

Var txData={

Nonce:'0x'+ transactionNonce,

gasLimit:'0x'+ gasLimits,

gasPrice:'0x'+ gasPrices,

至: contractAddress,

从: currentAccount,

值:'0x00',

数据:'0x'+'a9059cbb'+ addPreZero(toAddress.substr(2))+ addPreZero(txboPrice)

}

Var tx=new transaction(txData);

Const privateKey1=new Buffer(privateKey,'hex');

Tx.sign(privateKey1);

var serializedtx=tx.serialize().toString('hex');

返回“0x”+serializedTx;

};

以下函数是批处理ERC20事务签名。下面的函数将参数化json参数,参数的含义与上面的函数一致。

函数multimetereumerc20coinsign(erc20signdata){

var outerc20data=[];

if(erc20signdata==null){

console.log('erc30signdata参数为空,请提供有效参数');

返回paramserr;

}

var calconce=数字(erc20signdata.nonce);

对于(var i=0;i<;erc20signdata.signdta.length;i++){

var transactiononce=parseint(calconce).toString(16);

var gaslimit=parseint(120000).toString(16);

Var gasPrice=parseFloat(erc20SignData.gasPrice).toString(16);

Var totx=parseFloat((erc20SignData.signDta [i] .totalAmount)*(10 **(erc20SignData.decimal)))。toString(16);

Var txData={

Nonce:'0x'+ transactionNonce,

gasLimit:'0x'+ gasLimit,

gasPrice:'0x'+ gasPrice,

至: erc20SignData.contractAddress,

来自: erc20SignData.currentAccount,

值:'0x00',

数据:'0x'+'a9059cbb'+ addPreZero((erc20SignData.signDta [i] .toAddress).substr(2))+ addPreZero(totx)

}

Var tx=new transaction(txData);

Const privateKey1=new Buffer(erc20SignData.privateKey,'hex');

Tx.sign(privateKey1);

Var serializedTx='0x'+ tx.serialize()。toString('hex');

outErc20Data=outErc20Data.concat(serializedTx)

calcNonce=calcNonce + 1;

}

返回{signCoin:'ERC20',signDataArr: outErc20Data}

“沈阳软件公司”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与

我们联系删除或处理,客服QQ:55506560,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同

其观点或证实其内容的真实性。