我用web3@1.00在node.js与私有区块链交互。我根据web3的官方文件编写代码@1香水。
varWeb3=需要(“web3”);varTx=需要(“ethereumjs-tx”);varweb3=新Web3(“http://localhost: 8101”);/ /得到privatekeyvardecryptPK=web3.乙.账户.解密({“地址”:“68 c5cb5aa9f568ae2a6ec530e982f4f1144f2d10”,“密码”:{“密码”:“aes - 128 ctr”,“密文”:“96 b6a86bd5ff16a5669975974eabba844bc414bc52d9cc36843b4f41e89d46b9”,“cipherparams”:{“四”:“6858473 ac21c43e94add7e0b70306da5”},“kdf”:“scrypt”,“kdfparams”:{“dklen”:32,“n”:262144,“p”:1,“r”:8,“盐”:“4 dee1ee7cf929cd38938aaf0a6c83ceeb743348980052b6fb94ab139ae7e09db”},“苹果”:“f7d9bbd81f9c91ffa21e564e613bae57bd77c1914a6690f6018623ff2ce80845”},“id”:“0 eb12580 - d11a - 49 - f5 - 91 - bb - 3592 - a530e4d8”,“版本”:3.},“123”);varprivateKey=新缓冲(decryptPK.privateKey.子字符串(2),十六进制的);/ /检查现时标志web3.乙.getTransactionCount(“0 x68c5cb5aa9f568ae2a6ec530e982f4f1144f2d10”).然后(控制台.日志);varrawTx=web3.乙.账户.signTransaction({从:“0 x68c5cb5aa9f568ae2a6ec530e982f4f1144f2d10”,来:“0 x7fdec66a5c1b69824dfe3bc29138fac9ddf13ed4”,价值:“1000000000”,气体:2000000},decryptPK.privateKey).然后(控制台.日志).rawTransaction;vartx=新Tx(rawTx);tx.标志(privateKey);varserializedTx=tx.序列化();web3.乙.sendSignedTransaction(“0 x”+serializedTx.toString(十六进制的));
但是,我无法发送交易。web3.eth.sendSignedTransaction()给出了以下错误:
(节点:78916)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝id:1):错误:返回错误:目前过低(节点:78916)[DEP0018]DeprecationWarning:未处理的拒绝承诺将被弃用.在未来,未处理的承诺拒绝将终止节点.js的过程与一个非-零退出代码.
请帮我解决这个问题。
这段代码看起来是错误的:
varrawTx=web3.乙.账户.signTransaction({从:“0 x68c5cb5aa9f568ae2a6ec530e982f4f1144f2d10”,来:“0 x7fdec66a5c1b69824dfe3bc29138fac9ddf13ed4”,价值:“1000000000”,气体:2000000},decryptPK.privateKey).然后(控制台.日志).rawTransaction;
我假设rawTx在这之后是未定义的?您试图访问Promise对象上一个名为“rawTransaction”的字段。
代码应该是这样的(完全未经测试):
web3.乙.账户.signTransaction({现时标志:1,//在这里使用right nonce,只是硬编码为1的例子。从:“0 x68c5cb5aa9f568ae2a6ec530e982f4f1144f2d10”,来:“0 x7fdec66a5c1b69824dfe3bc29138fac9ddf13ed4”,价值:“1000000000”,气体:2000000},decryptPK.privateKey).然后(tx=>{varrawTx=tx.rawTransaction;web3.乙.sendSignedTransaction(rawTx).在(“收据”,控制台.日志);});