Mein Hauptziel ist es, web3.shh
Funktionen mit RPC API
, Web3.py
oder aufzurufen Web3.js
. Ich kann Funktionen aufrufen web3.shh
, wenn ich geth attach
; Das ist meine letzte Option.
Ich folge dieser Antwort .
1.8.0-unstable
Ich laufe geth
mit --shh
Fahne und--rpcapi "admin,eth,net,web3,debug,shh"
console.log(web3.version);
gibt zurück: api: '0.20.5'
.
Wenn ich folgendes Skript ausführe:
Web3 = require("web3");
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
if(!web3.isConnected()){ //web3@0.20.5
//if(!web3.eth.net.isListening().then(console.log)){ //web3@1.0.0-beta.34
console.log("notconnected");
process.exit();
}
var kId = web3.shh.newSymKey(); //Error occurs.
var kId = web3.shh.newSymKey();
gibt folgenden Fehler mit web3@'0.20.5'
:
Error: The method shh_newSymKey does not exist/is not available
at Object.InvalidResponse (/home/alper/eBlocBroker/node_modules/web3/lib/web3/errors.js:38:16)
at RequestManager.send (/home/alper/eBlocBroker/node_modules/web3/lib/web3/requestmanager.js:61:22)
at Shh.send [as newSymKey] (/home/alper/eBlocBroker/node_modules/web3/lib/web3/method.js:145:58)
at Object.<anonymous> (/home/alper/eBlocBroker/dd.js:9:20)
at Module._compile (module.js:649:30)
at Object.Module._extensions..js (module.js:660:10)
at Module.load (module.js:561:32)
at tryModuleLoad (module.js:501:12)
at Function.Module._load (module.js:493:3)
at Function.Module.runMain (module.js:690:10)
Bitte beachten Sie, dass ich es damit versucht habe, web3@1.0.0-beta.34
dass auch dieser Fehler auftritt, der wie derselbe Fehler aussieht:
Promise { <pending> }
true
(node:16162) UnhandledPromiseRejectionWarning: Error: Returned error: The method shh_newSymKey does not exist/is not available
at Object.ErrorResponse (/home/alper/eBlocBroker/node_modules/web3-shh/node_modules/web3-core-helpers/src/errors.js:29:16)
at /home/alper/eBlocBroker/node_modules/web3-shh/node_modules/web3-core-requestmanager/src/index.js:140:36
at XMLHttpRequest.request.onreadystatechange (/home/alper/eBlocBroker/node_modules/web3/node_modules/web3-providers-http/src/index.js:77:13)
at XMLHttpRequestEventTarget.dispatchEvent (/home/alper/eBlocBroker/node_modules/xhr2/lib/xhr2.js:64:18)
at XMLHttpRequest._setReadyState (/home/alper/eBlocBroker/node_modules/xhr2/lib/xhr2.js:354:12)
at XMLHttpRequest._onHttpResponseEnd (/home/alper/eBlocBroker/node_modules/xhr2/lib/xhr2.js:509:12)
at IncomingMessage.<anonymous> (/home/alper/eBlocBroker/node_modules/xhr2/lib/xhr2.js:469:24)
at IncomingMessage.emit (events.js:185:15)
at endReadableNT (_stream_readable.js:1101:12)
at process._tickCallback (internal/process/next_tick.js:114:19)
(node:16162) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:16162) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
[F] Wie kann ich diesen Fehler beheben? Was mache ich falsch?
Bitte beachten Sie, dass verfügbare shh
Funktionen hier zu sehen sind ; Ausgabe von console.log(web3.shh)
.
Die newSymKey();
Funktion gibt ein Promise zurück, das aufgelöst werden muss, um den zurückgegebenen Wert zu erhalten.
Aus diesem Grund web3@1.0.0-beta.34
gibt Ihnen der Fehler in der Version eine promise pending
Meldung mit UnhandledPromiseRejectionWarning
und in der web3@0.20.5
Version den Fehlerstatus shh_newSymKey does not exist/is not available
. [noch]
Also versuchevar kId = web3.shh.newSymKey().then(console.log);
odervar kId = web3.shh.newSymKey().then(function(result) { console.log(result) //will log results. })
Ich bevorzuge die Verwendung der neueren async / await-Funktion anstelle von Versprechungen (liest sich einfacher):
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.newSymKey(); //note await
console.log(kId);
}
connect();
shh.getPrivateKey(kId).then(console.log)
es kommt zurück: UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Returned error: invalid argument 0: json: cannot unmarshal object into Go value of type string
Wie könnte ich diesen Fehler auch beheben? @Heroldawait
wie oben gezeigt verwenden oder shh.getPrivateKey(kId) aufrufen; In einer Callback-Funktion anstelle der Konsolenprotokollierung der kId lauten die Funktionsdefinitionen gemäß Dokumentation: web3.shh.newSymKey([callback]) web3.shh.getPrivateKey(id, [callback])
Kaki Meister der Zeit
Kaki Meister der Zeit
Alper
console.log(web3.version)
und es kommt zurück:api: '0.20.5'
@KakiMasterOfTimeKaki Meister der Zeit
Alper
web3.shh
gibt die Methode zurück, aber wenn ich sie aufrufe, gibt es den Fehler. @KakiMasterOfTimeAlper
1.0.0-beta.34
. @KakiMasterOfTimeKaki Meister der Zeit
geth attach
) verwenden? Wenn nicht, versuchen Sie es und sehen Sie, obshh
es richtig aktiviert ist.Alper
geth attach
;web3.shh.newSymKey()
funktioniert! Aber warum funktioniert es nicht über das Skript (das ich auf meine Frage zeige)? @KakiMasterOfTimeAlper
curl -X POST --data ...
aber es sagt auchcurl: no URL specified!
. Ich kann nicht herausfinden, wie ich es übercurl
@KakiMasterOfTime verwenden könnte