添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

web3发交易经常出现invalid sender ,或者Invalid JSON RPC response: {"size":0,"timeout":0}报错,这个报错很不具体,云里雾里。经过我的反复测试,这是和web3相关的包版本有关。

以web3.js发送交易为例,以下两种写法可以发送成功,

一、ethereumjs-tx安装最新版本, web3安装最新版本

var Tx = require('ethereumjs-tx').Transaction
web3.eth.getTransactionCount(config.managerAddress, "pending", (err, txCount) => {
    web3.eth.estimateGas({
	    from: config.managerAddress,
	    to: toAddress,
	    data: inByteCode
	}, (err, gas) => {
        var transaction = {
	        "nonce": web3.utils.toHex(txCount),
	        "from": config.managerAddress,
	        "to": toAddress,
	        "value": "0x0",
	        "gasPrice": web3.utils.toHex(10000000000),
	        "gasLimit": web3.utils.toHex(gas),
	        "data": inByteCode
       var web3Account = web3.eth.accounts.privateKeyToAccount(config.managerPrivatekey);
	   web3Account.signTransaction(transaction, (err, signedTx) => {
	             web3.eth.sendSignedTransaction(signedTx.rawTransaction, (err,hash) => {

注意这里不能用以下方式发交易

var tx = new Tx(transaction);

var privateKey = Buffer.from(config.managerPrivatekey,'hex');

tx.sign(privateKey1);

var serializedTx = tx.serialize();

web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex')

否则会出现Invalid JSON RPC response: {"size":0,"timeout":0}异常。

如果想用这种发,则按如下第二种写法:

二、ethereumjs-tx必须为1.3.7版本,web3可以为最新版本

var Tx = require('ethereumjs-tx') //-----注意这里没有.Transaction
web3.eth.getTransactionCount(config.managerAddress, "pending", (err, txCount) => {
    web3.eth.estimateGas({
	    from: config.managerAddress,
	    to: toAddress,
	    data: inByteCode
	}, (err, gas) => {
        var transaction = {
	        "nonce": web3.utils.toHex(txCount),
	        "from": config.managerAddress,
	        "to": toAddress,
	        "value": "0x0",
	        "gasPrice": web3.utils.toHex(10000000000),
	        "gasLimit": web3.utils.toHex(gas),
	        "data": inByteCode
        var tx = new Tx(transaction);
	    var privateKey = Buffer.from(config.managerPrivatekey,'hex');
	    tx.sign(privateKey);
	    var serializedTx = tx.serialize();
	    web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'),         
          function(err, hash) {
	        if (!err){
	            console.log(hash);
	        }else{
	            console.log(err);
官方文档里var Tx = require('@ethereumjs/tx').Transaction,这种引用新的版本包我至今还没发成功过。
                                    本测试启动:geth console --kiln --rpc.gascap 0 --rpc.txfeecap 0 --http -http.api web3,eth,net,personal,debug --http.corsdomain '*'  --ws --ws.api web3,net,eth,personal,debug --allow-insecure-unlock --vmdebug 2>~/geth.log。产生此问题的根本原因是事务提交操作的链信息没有指定,或者指定的不对。
                                    我们使用AFNetworking时常用的解析器是AFJSONResponseSerializer,这样可以在block中直接得到字典或数组对象,因为AFNetworking已经帮我们序列化好了,我们可以直接使用。但是在一些情况下AFN会抛出异常,如-1016和3840的错误,这个时候必须对服务器响应和AFN进行分析。常用的AFN配置代码类似于:@interface XLHTTPSessionMan...
                                    在新浪微博授权后调用获取用户信息的接口时候会报以下错误(用户不存在):
错误原文:
com.sina.weibo.sdk.exception.WeiboHttpException: {"error":"User does not exists!","error_code":20003,"request":"/2/users/show.json"}
一开始,我很郁闷为什么获取不到user,后来
[ethjs-rpc] rpc error with payload {"id":7663982154336,"jsonrpc":"2.0","params":
["0xf86b808504a817c800833d090094001a4039eed5...
在使用电子邮件的过程中经常会出现邮件无法 发出,发出后被退回,或者无法收取邮件的提示。邮件系统的错误提示常常是英文的,对 于普通用户来说正确理解错误提示信息,并做出适当的处理,确实有一定难度。为此电院 网络中心SEENIC从网上搜集了一些资料,供大家参考。希望大家能更好地使用电子邮件系 统
 new JsonRpcResponse ( id , error , result ) ;
 可以使用或不使用new关键字来构造响应对象。
 参数error和result是互斥的。 如果传递error则参数result必须是未定义的。 如果result存在,则将null作为错误传递。
 var JsonRpcResponse = require ( 'json-rpc-response' ) ;
// Result response
new JsonRpcResponse ( 1 , null , 'some result' ) ;
// Error response
new JsonRpcResponse ( 1 , { code
                                    错误详情:
[ethjs-rpc] rpc error with payload {"id":7663982154336,"jsonrpc":"2.0","params":["0xf86b808504a817c800833d090094001a4039eed5a5099b2bd25085b48ef137902be38084be9a65558207f2a0aff9e56abb6bbeee508bf...