Go-Ethereum

錯誤:無效參數 0:json:無法將對象解組為字元串類型的 Go 值

  • June 27, 2018

我遵循了以下解決方案

當我嘗試做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();

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