Go-Ethereum
錯誤:無效參數 0:json:無法將對象解組為字元串類型的 Go 值
我遵循了以下解決方案。
當我嘗試做
shh.getPrivateKey(kId).then(console.log)
我收到以下錯誤,請注意此行適用於
web3.py
:
UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Returned error: invalid argument 0: json: cannot unmarshal object into Go value of type string
**$$ Q $$**我該如何解決這個錯誤?
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); if(!web3.isConnected()){console.log("notconnected"); process.exit();} var Shh = require('web3-shh'); // "Shh.providers.givenProvider" will be set if in an Ethereum supported browser. var shh = new Shh(Shh.givenProvider || 'http://localhost:8545'); var kId = shh.newKeyPair().then(console.log); //b9180e43e5b712868482173d71cf18ff78900e645699d00f9129d6458aaa1fb7 var privateKey = shh.getPrivateKey(kId); //Error Occurs!!!
您需要使用回調,以便非同步函式在完成處理後返回一個值。或者使用非同步/等待。
該行將
var privateKey = shh.getPrivateKey(kId);
在 kId 有值之前執行,因為 newKeyPair 函式尚未完成。大多數 web3.js 對像都允許回調作為最後一個參數,以及返回對鏈函式的承諾。
https://web3js.readthedocs.io/en/1.0/callbacks-promises-events.html
回調文件,範例:http: //javascriptissexy.com/understand-javascript-callback-functions-and-use-them/
因此,使用 async / await 而不是回調,您可以嘗試以下操作:
Web3 = require("web3"); web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); async function connect() { //note async function declaration if(!await web3.isConnected()){ //await web3@0.20.5 //if(!await web3.eth.net.isListening()){ //await web3@1.0.0-beta.34 console.log("notconnected"); process.exit(); } var kId = await web3.shh.newKeyPair(); var privateKey = await web3.shh.getPrivateKey(kId); //the await keyword resolves the promise console.log(privateKey); } connect();