以太坊ERC20代币web3js^0.18.4转账过程

以上详细记录了以太坊ERC20代币web3js^0.18.4的转账过程,对于想学习以太坊区块链的同学,入门方面会有帮忙

attachments-2018-03-9MDlTgOS5aa74ab46b850.png

作者:梁雁明

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

准备工作:

    1、在chrome浏览器安装metamask插件,领取ropsten环境以太币    

attachments-2018-07-FNKM2QgR5b56da2ead4a7.png

    2、https://ropsten.infura.io发行自己的代币,实现过程可以翻看我的前两篇文章,本例代币MMT https://ropsten.etherscan.io/token/0x6147f2e4c6a363bb55b0e95af3e3a8bec56e068a


attachments-2018-07-67Ogo1IE5b56da7446346.png

    3、准备好代币合约地址及ABI文件

attachments-2018-07-AcdQc7Nm5b56da0cdb131.png

    4、 node项目构建,插件版本如下:

 "ethereumjs-tx": "^1.3.6"
"fs": "0.0.1-security"
"web3": "^0.18.4"

    5、项目结构

attachments-2018-07-GKi7J1ph5b56e44c9205c.png

    6、具体代码

var Web3 = require("web3"); //引入web3支持,我本地使用的是web3^0.18.4
var fs = require("fs"); //文件读写
var Tx = require("ethereumjs-tx"); //引入以太坊js交易支持


//初始化web3
if (typeof web3 !== 'undefined') {
web3 = new Web3(web3.currentProvider);
} else {
web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io"));
}
var contractABI = JSON.parse(fs.readFileSync('./MarmotTokenAbi_web3^0.18.4.json', 'utf-8'));
var from = "0xe9d42e59D3f8F8dC207f48a5C4C5C31444Fd7032";
var fromPrivateKey = "your private key";

var to = "0x01b09833245bf407dfe129fe8ffa7071bee2a9ac";
var contractAddress = "0x6147f2e4c6a363bB55b0e95af3E3a8Bec56e068A";
var tokenValue = 0.9;

//单位转换示例
var balance = web3.eth.getBalance(from);
console.info("balance of holder in wei is : " + balance.toString());
console.info("balance of holder in gwei is : " + web3.fromWei(balance, 'gwei'));
console.info("balance of holder in finney is : " + web3.fromWei(balance, 'finney'));
console.info("balance of holder in ether is : " + web3.fromWei(balance, 'ether'));

//当前的gas价格。这个值由最近几个块的gas价格的中值决定
var gasPrice = web3.eth.gasPrice;
//console.log("gasPrice in wei is : " +gasPrice.toString(10)); // "10000000000000"
//console.log("gasPrice in gwei is : " + web3.fromWei(gasPrice.toString(10), 'gwei'));
var gasLimit = 90000;

//获取nonce
var count = web3.eth.getTransactionCount(from);
//console.log("transaction count of holder is : " + count); // 1


var MMTContract = web3.eth.contract(contractABI).at(contractAddress)
var decimal = MMTContract.decimals();
var balance = MMTContract.balanceOf(from);
var adjustedBalance = balance / Math.pow(10, decimal)
var tokenName = MMTContract.name();
var tokenSymbol = MMTContract.symbol();
console.info("tokenSymbol: " + tokenSymbol);
console.info("tokenName: " + tokenName);
console.info("balance in wei: " + balance);
console.info("adjustedBalance: " + adjustedBalance);
console.info("decimal: " + decimal);


//私钥
var privKey = new Buffer(fromPrivateKey, 'hex');
//交易信息
var rawTransaction = {
"from": from,
"nonce": web3.toHex(count),
"gasPrice": web3.toHex(gasPrice),
"gasLimit": web3.toHex(gasLimit),
"to": contractAddress,
"value": "0x0",
"data": MMTContract.transfer.getData(to, tokenValue*(10**decimal)),
"chainId": 0x03
};
//实例交易
var tx = new Tx(rawTransaction);
//私钥交易签名
tx.sign(privKey);
//交易发送前实例化
var serializedTx = tx.serialize();
//发送交易,留下hash
web3.eth.sendRawTransaction('0x' + serializedTx.toString('hex'), function(err, hash) {
if (!err){
console.log(hash);
} else {
console.log(err);
}
});

    7、验证交易;返回交易tx为0xd41924d99549a52fd294b58e0e85f1695bb141e3cb26601aa8484c87987a8b64,去https://ropsten.etherscan.io/tx/0xd41924d99549a52fd294b58e0e85f1695bb141e3cb26601aa8484c87987a8b64查看交易执行情况;

attachments-2018-07-agpvhqIh5b56dd9bd7cac.png

文章发布只为分享区块链技术内容,版权归原作者所有,观点仅代表作者本人,绝不代表区块链兄弟赞同其观点或证实其描述。

attachments-2018-02-kL1zBfXx5a7ffd0b78798.jpg

  • 发表于 2018-07-24 16:06
  • 阅读 ( 1492 )
  • 分类:以太坊

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
梁雁明

区块链专家

22 篇文章

作家榜 »

  1. amconykx 164465 文章
  2. iwp41863 26912 文章
  3. 社区运营-小以 548 文章
  4. 社区运营-小链 244 文章
  5. 于中阳Mercina-zy 79 文章
  6. 涂晶 75 文章
  7. 李晓琼 44 文章
  8. 兄弟连区块链培训 42 文章