1. 程式人生 > >web3.js交易方法的呼叫方式彙總

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);



});

交易方法不能獲得返回值的原因是:交易並不是實時的,在區塊鏈上需要時間被處理。