Nota: Esta pregunta está relacionada con esto: "Actualizado:" ¿Cómo ver la "salida" de "web3.personal.sign" en el "navegador"? ("Método personal_sign no compatible")
Hago los siguientes pasos para firmar un mensaje usando web3.personal.sign
. Sin embargo, no debo hacerlo MetaMask
. (Nota: aparentemente, web3.personal.sign
no es compatible con testRPC
). Estos son los pasos que hago:
(1) abro cmd
y ejecutotestrpc
(2) Hago clic en MetaMask
el icono y seleccionolocalhost 8545
(3) Selecciono uno de los private keys
generados portestrpc
(4) Selecciono import account
y MetaMask
pego esto private key
en el cuadro de texto dePaste your private key string here
(5) ahora el saldo de esta dirección es100 eth
(6) Inserto esta dirección (clave pública) en web3.personal.sign
función de firmar el mensaje (consulte el código completo a continuación)
(7) Abro html
expediente porGoogle Chrome
(8) Recibo estos mensajes : No web3? You should consider trying MetaMask!
y Error: Method personal_sign not supported
. Aquí está la captura de pantalla: https://ibb.co/i93oRy
Aquí está el código completo para firmar un mensaje usando web3.personal.sign
:
<!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("message to be signed", 100);
console.log(message);
web3.personal.sign("0x" + message.toString("hex"), "0x01e7D1D50804fDc2fD5A134081076A8E487Ca747", 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>
Aparentemente, no estoy conectado MetaMask
y, de ser así, ¿cómo puedo solucionar este problema?
Aquí hay una captura de pantalla de MetaMask
cuando se abre y se conecta localhost 8545
(como puede ver, el saldo de la testRPC
dirección es 100 eth
):
Se requiere un servidor web para que Metamask interactúe con su página web:
Http(s) - Servidor web requerido
Debido a las restricciones de seguridad del navegador, no podemos comunicarnos con dapps que se ejecutan en file://. Utilice un servidor local para el desarrollo.
Implemente su página en un servidor local para detectar Metamask.
https://mainnet.infura.io/<APIKEY>
en lugar de localhost 8545
si ejecuto mi página localmente. Entonces, ¿puedo usar "https://mainnet.infura.io/noapikey"
eso que se usa en la página que compartiste? GraciasRopsten
by Parity
pero lo uso localhost 8545
en mi html
archivo, ¿funciona? GraciasParity
para conectarse a ej. Ropsten
y luego use web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
en la parte superior del JavaScript
código y ejecute este JS
archivo usando node filename.js
? ¿Hay alguna forma mejor? Gracias
shawn tabrizi
shawn tabrizi
Preguntador
Web3 Detected! MetamaskInpageProvider
: ibb.co/gZfwDd