Web3js

Infura + Ropsten 節點 + Truffle 控制台上 sendTransaction 的 JSON RPC 響應錯誤

  • February 7, 2022

呼叫工作,但事務拋出錯誤-

錯誤:無效的 JSON RPC 響應:“”

我正在使用 web3 v0.19.0 和松露 v3.4.9。使用 truffle 部署合約,

truffle migrate --network ropsten

成功提供了 api 和合約地址。

我的 web3 提供者和 ropsten 網路(infura 節點)是在react-auth-box項目 之上的 truffle.js 中定義的。

我打開truffle console --network ropsten並定義 web3 -

var Web3 = require('web3')
let web3 = new Web3()
web3.setProvider(new web3.providers.HttpProvider('https://ropsten.infura.io/my_access_token_here')) 

沒有預設賬戶

web3.eth.defaultAccount(返回 null)

web3.eth.accounts(返回

$$ $$) 設置預設賬戶,

web3.eth.defaultAccount = '0xpersonalaccount'

定義合約實例,

let contract = web3.eth.contract(abi).at(address)

到目前為止一切順利,通話工作-

contract.checkIdExists.call(1, {'from': account, 'to': address})

(返回 ‘0x0000000000’)

contract.fetchDataById.call(1, {'from': account, 'to': address})

(返回“0x”)

1. 交易失敗 -

contract.addRecord.sendTransaction(1, 'fjdnjsnkjnsd', '03:00:21 12-12-12', 'true', '', {'from': account, 'to': address})

錯誤:無效的 JSON RPC 響應:“”在 Object.InvalidResponse (/var/www/html/react-auth-box/node_modules/web3/lib/web3/errors.js:38:16) 在 HttpProvider.send (/var /www/html/react-auth-box/node_modules/web3/lib/web3/httpprovider.js:91:22) 在 RequestManager.send (/var/www/html/react-auth-box/node_modules/web3/lib /web3/requestmanager.js:58:32) 在 Eth.send

$$ as sendTransaction $$(/var/www/html/react-auth-box/node_modules/web3/lib/web3/method.js:145:58) 在 SolidityFunction.sendTransaction (/var/www/html/react-auth-box/node_modules/ web3/lib/web3/function.js:167:26) 在 evalmachine.:1:20 在 ContextifyScript.Script.runInContext (vm.js:53:29) 在 Object.runInContext (vm.js:108:6) 在TruffleInterpreter.interpret (/home/shivam/.npm-global/lib/node_modules/truffle/build/cli.bundled.js:213786:17) 在綁定 (domain.js:301:14)

2.讓我覺得我可能必須先解鎖帳戶(是嗎?)

web3.personal.unlockAccount(account, password)

錯誤:無效的 JSON RPC 響應:“”在 Object.InvalidResponse (/var/www/html/react-auth-box/node_modules/web3/lib/web3/errors.js:38:16) 在 HttpProvider.send (/var /www/html/react-auth-box/node_modules/web3/lib/web3/httpprovider.js:91:22) 在 RequestManager.send (/var/www/html/react-auth-box/node_modules/web3/lib /web3/requestmanager.js:58:32) 在 Personal.send

$$ as unlockAccount $$(/var/www/html/react-auth-box/node_modules/web3/lib/web3/method.js:145:58) 在 evalmachine.:1:15 在 ContextifyScript.Script.runInContext (vm.js:53: 29) 在 Object.runInContext (vm.js:108:6) 在 TruffleInterpreter.interpret (/home/shivam/.npm-global/lib/node_modules/truffle/build/cli.bundled.js:213786:17) 處(domain.js:301:14) 在 REPLServer.runBound$$ as eval $$(domain.js:314:12)

跑到現在很無知。任何支持將不勝感激。謝謝!

讓我在這裡發布完整的答案(感謝@Ismael)。

相關包 -

web3@0.18.2

ethereumjs-tx@1.3.3

crypto-js

const Web3 = require('web3')  
let web3 = new Web3()  
web3.providers.HttpProvider('https://ropsten.infura.io/my_access_token_here'))  
let contract = web3.eth.contract(abi).at(address)  
var coder = require('web3/lib/solidity/coder')  
var CryptoJS = require('crypto-js')  
var privateKey = new Buffer(myPrivateKey, 'hex')  

var functionName = 'addRecord'  
var types = ['uint','bytes32','bytes20','bytes5','bytes']  
var args = [1, 'fjdnjsnkjnsd', '03:00:21 12-12-12', 'true', '']  
var fullName = functionName + '(' + types.join() + ')'  
var signature = CryptoJS.SHA3(fullName,{outputLength:256}).toString(CryptoJS.enc.Hex).slice(0, 8)  
var dataHex = signature + coder.encodeParams(types, args)  
var data = '0x'+dataHex  

var nonce = web3.toHex(web3.eth.getTransactionCount(account))  
var gasPrice = web3.toHex(web3.eth.gasPrice)  
var gasLimitHex = web3.toHex(300000) (user defined)  
var rawTx = { 'nonce': nonce, 'gasPrice': gasPrice, 'gasLimit': gasLimitHex, 'from': account, 'to': address, 'data': data}  
var tx = new Tx(rawTx)  
tx.sign(privateKey)  
var serializedTx = '0x'+tx.serialize().toString('hex')  
web3.eth.sendRawTransaction(serializedTx, function(err, txHash){ console.log(err, txHash) })   

(返回'0xf802614fd6a53cb372752634630265063d0b48fec12ea8f5ed363de1d4bd372d’)

web3.eth.getTransaction('0xf802614fd6a53cb372752634630265063d0b48fec12ea8f5ed363de1d4bd372d', console.log)

(列印交易數據)

(參考這裡

引用自:https://ethereum.stackexchange.com/questions/26999