Hinweis: Ich habe den html
/ JavaScript
-Code gemäß der Antwort aktualisiert und diesen META-MASK-Beispielcode für den Web3-Anbieter verwendet. Ich erhalte jedoch den gleichen Fehler. Ich habe schließlich nicht verstanden, dass ich testRPC ausführen muss oder nicht? .
Ich führe den folgenden html
JavaScript
Code aus, um eine Signatur zu generieren, nachdem ich Meta Mask wie folgt ausgeführt testRPC
und verwendet habe :
(1) laufen testRPC
:
PS C:\Users\s> testrpc
EthereumJS TestRPC v6.0.3 (ganache-core: 2.0.2
Available Accounts
==================
(0) 0xf4d2b942c3baebef5b81f4b909904015166b238a
(1) 0xef0d1e102d33252f232b39b31950f736ab2535aa
(2) 0x23064a138dc6b681a51a18b837a376f061fbc511
(3) 0x2dfaf5c48bc3c868f63741d6cd0489b336e74b03
(4) 0x372110011158860806d9d9b19aa67c045740727a
(5) 0x3faa74be50e1dfa86e5f6951a8c11b3e726edf65
(6) 0xaecc4c8f0b802b83a2cd84e6c98ecad6b0495c00
(7) 0x36b08ae47ec94870b98b0e0d98fca2646332ae87
(8) 0x1461cfb91f6fd2aca8d722dce9f67f7806732e49
(9) 0x1a0b2fd11e57f6473ae5f9b55e17cbfb6d8b504e
Private Keys
==================
(0) acb8b8ee76ce99fc390127ae88e246d3f8d8ac3db7
(1) 8957622705ccec21da4791f8535c70ab4726bfbe08
(2) 41181e3cf8c0294e949062a894bd96aea15e342db5
(3) c1bad63470c62b56032b034df0f0b827779e678cfd
(4) f49109620e9e56aa0bff9bdeb486d05ca75732cf1a
(5) ed1107372972a702c166924846f6d01234b9d277a7
(6) 10afce272e6a3d1d3474c385bf28be7e58de991995
(7) 0a92c9aa01497d29f01023cdeb50429954be06c949
(8) 87d0c56f9cab4c86ebc66749d0894719b647f72cea
(9) c8ca68e445b249a7d860fc3d76b210d6dd1a1c2197
HD Wallet
==================
Mnemonic: access invest retire civil eagl
Base HD Path: m/44'/60'/0'/0/{account_index}
(2) Auswählen 0xf4d2b942c3baebef5b81f4b909904015166b238a
als Unterzeichneradresse.
(3) Hinzufügen 0xf4d2b942c3baebef5b81f4b909904015166b238a
zu Meta Mask .
(4) Folgendes html
/ JavaScript
Code in ausführen Google Chrome
:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>EthereumJS - Browser Example</title>
</head>
<body>
<script src="https://rawgit.com/ethereumjs/browser-builds/master/dist/ethereumjs-abi/ethereumjs-abi-0.6.5.js"></script>
<script src="https://rawgit.com/ethereum/web3.js/develop/dist/web3.js"></script>
<script src="https://cdn.jsdelivr.net/gh/ethereum/web3.js/dist/web3.min.js"></script>
<script>
window.addEventListener('load', function() {
// Checking if Web3 has been injected by the browser (Mist/MetaMask)
if (typeof web3 !== 'undefined') {
// Use Mist/MetaMask's provider
web3 = new Web3(web3.currentProvider);
} else {
console.log('No web3? You should consider trying MetaMask!')
// fallback - use your fallback strategy (local node / hosted node + in-dapp id mgmt / fail)
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}
// var Web3
// web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
function constructPaymentMessage(contractAddress, amount)
{
return ethereumjs.ABI.soliditySHA3(
["address", "uint256"],
[contractAddress, amount],
);
}
var message = constructPaymentMessage("0x0f0f422477d83bcbed227b0ae2fa3ace7ea3c653", 100);
console.log(message);
web3.personal.sign("0x" + message.toString("hex"), "0xF4D2B942c3baebef5B81F4B909904015166b238A", function(err, signature) {
console.log(signature);
console.log(err);
// Be sure to make use of the signature only here.
// It will not be defined until this callback is invoked.
});
})
</script>
</body>
</html>
Und folgendes ist das Ergebnis:
Bitte beachten Sie das
Uint8Array(32) [2, 16, 48, 216, 191, 103, 173, 178, 132, 121, 144, 241, 45, 224, 83, 239, 76, 206, 69, 151, 42, 86, 174, 144, 3, 97, 172, 171, 166, 231, 234, 10]
ist der message
Wert und das Ergebnis von console.log(message);
und nicht der Signaturwert , und wenn ich console.log(signature);
die Ausgabe verwende, ist nur undefined
.
Wie kann ich den Signaturwert sehen ?
Und das Folgende ist die Fehlermeldung, Ergebnis von console.log(err);
:
Fehler: Methode personal_sign wird nicht unterstützt
Error: Error: Method personal_sign not supported.
at GethApiDouble.handleRequest (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:89858:16)
at next (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:59378:18)
at GethDefaults.handleRequest (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:89767:12)
at next (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:59378:18)
at FilterSubprovider.handleRequest (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:65832:7)
at next (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:59378:18)
at DelayedBlockFilter.handleRequest (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:89595:3)
at next (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:59378:18)
at ReactiveBlockTracker.handleRequest (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:89722:12)
at next (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:59378:18)
at GethApiDouble.handleRequest (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:89858:16)
at next (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:59378:18)
at GethDefaults.handleRequest (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:89767:12)
at next (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:59378:18)
at FilterSubprovider.handleRequest (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:65832:7)
at next (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:59378:18)
at DelayedBlockFilter.handleRequest (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:89595:3)
at next (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:59378:18)
at ReactiveBlockTracker.handleRequest (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:89722:12)
at next (C:\Users\s\AppData\Roaming\npm\node_modules\ethereumjs-testrpc\build\cli.node.js:59378:18)
at Object.InvalidResponse (https://rawgit.com/ethereum/web3.js/develop/dist/web3.js:3138:16)
at https://rawgit.com/ethereum/web3.js/develop/dist/web3.js:6375:36
at XMLHttpRequest.request.onreadystatechange (https://rawgit.com/ethereum/web3.js/develop/dist/web3.js:4377:7)
Zugehörige Frage: "AKTUALISIERT: " "VM-Ausnahme während der Verarbeitung der Transaktion: zurücksetzen"
Die Signatur wird an Ihren Rückruf gesendet, der in dem von Ihnen freigegebenen Code leer ist. Das sollte funktionieren:
web3.personal.sign("0x" + message.toString("hex"), "0xF4D2B942c3baebef5B81F4B909904015166b238A", function(err, signature) {
console.log(signature);
// Be sure to make use of the signature only here.
// It will not be defined until this callback is invoked.
});
Beachten Sie nebenbei, dass Ihr aktueller Code MetaMask nicht verwendet.
undefined
. Übrigens, im testrpc
Terminal erhalte ich eth_getBlockByNumber
einen nach dem anderen, kann das ein Problem sein? Dankeerr
.err
ist Error: Method personal_sign not supported
. Warum? Danketestrpc
unterstützt die Methode nicht personal_sign
. Sie müssen geth, Parity, MetaMask oder etwas anderes verwenden, das diese Methode unterstützt.MetaMask
und nach dem Ausführen testrpc
verbinde ich mich MetaMask
mit private network
(localhost 8545)
. aber ohne Ausführung testrpc
kann ich keine Verbindung zu localhost 8545
using herstellen MetaMask
. Wie kann ich dieses Problem lösen? Danke noch einmaltestrpc
. Und ja, natürlich müssen Sie testrpc
MetaMask ausführen, um sich damit verbinden zu können.HttpProvider("http://localhost:8545"))
durch etwas anderes ersetzen MetaMast web3 proviver
? Wenn ja, können Sie mir bitte mitteilen, was MetaMast provider
das ist, in das eingefügt werden muss HttpProvider(" ? "))
? DanketestRPC
eine vorherige Fehlermeldung und wenn ich nicht mit verbunden bin, testRPC
erhalte ich diesen Fehler: web3.js:4386 OPTIONS http://localhost:8545/ 0 ()
Das bedeutet, dass ich nicht mit verbunden bin MetaMast provider
. Ich bin wirklich verwirrt ..... Danketestrpc
: ibb.co/dFRQpJtestrpc
Ich habe schließlich nicht verstanden, dass ich für diesen Code laufen muss javascript
oder nicht? Dankepersonal_sign not supported
und wenn ich es stoppe, erhalte ich einen weiteren Fehler: Hier ist ein Screenshot des Fehlers, wenn testrpc
es NICHT läuft: ibb.co/dFRQpJ . In beiden Fällen erhalte ich also eine Fehlermeldung. vielleicht Ropsten
wäre testen besser .... ich weiß es nicht. Bitte überprüfen Sie meinen neuen Code, da ich ihn geändert habe. Danketestrpc
. (2) klicken Sie auf das MetaMask-Symbol und wählen Sie localhost 8545
(3) wählen Sie eines der private keys
generierten aus testrpc
(4) wählen Sie import account
aus MetaMask aus und fügen Sie es private key
ein Paste your private key string here
(5) jetzt ist der Rest dieser Adresse 100 eth
(6) fügen Sie diesen address
(öffentlichen Schlüssel) in web3.personal.sign ...
(7) Öffnung ein html
Datei von Google Chrome
(8) beim Empfang dieser Nachrichten: No web3? You should consider trying MetaMask!
& Error: Method personal_sign not supported
.Screenshot: ibb.co/i93oRy .Thxhttps://mainnet.infura.io/<APIKEY>
. hängt das Problem damit zusammen, meine Seite lokal auszuführen? (Laut dieser Antwort) Dankeweb3
, also war es undefined
.) Wenn Sie Ihre Seite von einer file://
URL aus ausführen, dann ja, das ist das Problem. Sie müssen von einer http://
oder https://
URL aus ausgeführt werden. Das lokale Ausführen ist in Ordnung, aber es muss über einen Webserver erfolgen, nicht über das Dateisystem.Parity
mit bsp verbinden. Ropsten
und verwenden Sie dann web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
oben im JavaScript
Code und führen Sie diese JS
Datei mit node filename.js
? Gibt es einen besseren Weg? Dankehttp://
URL öffnen. Jeder Webserver tut es.
Shawn Tabrizi
Fragesteller
Shawn Tabrizi
web3.min.js
es sei denn, Sie möchten sich den Quellcode ansehen. Siehe Minifizierung (Programmierung)Fragesteller
smarx
muss ichMetaMast web3 provider
den Code hinzufügen. Bedeutet das, dass ich durch etwas anderes ersetzen mussHttpProvider("http://localhost:8545"))
? DankeShawn Tabrizi
window.web3 = new Web3(web3.currentProvider);
Siehe meine Antwort auf deine andere FrageFragesteller
MetaMask
Beispielcode: github.com/MetaMask/faq/blob/master/DEVELOPERS.md Wenn ich jedoch mit verbunden bin,testrpc
erhalte ich denselben Fehler, dhMethod personal_sign not supported
weiltestrpc
es nicht unterstützt wird und wenn ich es bin NICHT verbunden mittestrpc
erhalte ich diesen Fehler: ` localhost:8545 0 ()` (Screenshot: ibb.co/dFRQpJ ) DankeCody Django
1.0.0-beta.38
akzeptiertweb3.eth.personal.sign
keinenundefined
Wert mehr für das dritte Argument (Passwort für das Konto).