web3.js交易方法的调用方式汇总
Posted 乞力马扎罗的雪CYF
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web3.js交易方法的调用方式汇总相关的知识,希望对你有一定的参考价值。
web3.js中的交易方法调用:
(1)调用方式1
contractAddr.register(amount, from: account);
注意一定要传from参数,也就是哪一个账户去调用的。否则会调用失败。【from参数不能省略】
(2)调用方式2
contractAddr.register(amount, from: account).then(function(returnValue)
console.log("交易hash:" + returnValue);
);
可以获得本次交易方法执行的交易hash;【from参数不能省略】
(3)调用方式3
contractAddr.register.sendTransaction(amount, from: account);
相当于直接发送一个交易。【from参数也不能省略】
(4)调用方式4
contractAddr.register.sendTransaction(amount, from: account).then(function(returnValue)
console.log(returnValue);
);
同样也可以捕获交易hash返回值。 【from参数也不能省略】
web3.js对于tx交易方法返回值的测试Event方式
- 一个Event参数测试
经过测试,Event事件可以返回uint,int,address, bytes32, string, bool类型;
但是不能返回任何的数组类型。
合约中的实现:
event LogRegStatus(address user, bool result);
function register(int ui)
if(ui != 0)
LogRegStatus(msg.sender, true);
else
LogRegStatus(msg.sender, false);
js中的实现:
contractAddr.register(amount, from: account).then(function()
);
contractAddr.LogRegStatus().watch(function(err, event)
if(event.args.result)
console.log("成功啦");
else
console.log("失败啦");
);
- 多个Event参数测试
可以返回多个返回值。
合约中实现:
event LogRegStatus(address user, bool result1, int result2, string result3, bytes32 result4, address result5);
function register(int ui)
if(ui != 0)
LogRegStatus(msg.sender, true, ui, "success", "bytes32", 0x75611bef6091d73546b0a9225105db3c95b9cf5c);
else
LogRegStatus(msg.sender, false, ui, "fail", "bytes323232", 0x544e4107f7bd059f85495d2f8dfcbf7699797a04);
js中实现:
contractAddr.register(amount, from: account).then(function()
);
contractAddr.LogRegStatus().watch(function(err, event)
console.log(event.args.result1);
console.log(event.args.result2.valueOf());
console.log(event.args.result3);
console.log(hexCharCodeToStr(event.args.result4));
console.log(event.args.result5);
);
交易方法不能获得返回值的原因是:交易并不是实时的,在区块链上需要时间被处理。
以上是关于web3.js交易方法的调用方式汇总的主要内容,如果未能解决你的问题,请参考以下文章
关于web3.js中与交易发送交易签名智能合约函数调用相关api的理解