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



});

交易方法不能获得返回值的原因是:交易并不是实时的,在区块链上需要时间被处理。

猜你喜欢

转载自blog.csdn.net/CHENYUFENG1991/article/details/81265600