web3.js交易方法的呼叫方式彙總
阿新 • • 發佈:2019-02-15
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);
});
交易方法不能獲得返回值的原因是:交易並不是實時的,在區塊鏈上需要時間被處理。