Kann ich mit dem privaten Schlüssel web3.eth.signieren?

Ich möchte verwenden web3.eth.sign, um eine Signatur zu erstellen, die in der Blockchain gespeichert und später durch einen Vertrag (mit ecrecover) verifiziert wird. Ich möchte so wenig Bibliotheken wie möglich verwenden.

Web3-Dokumente geben an, dass zur Verwendung web3.eth.signein öffentlicher Schlüssel bereitgestellt und das Konto entsperrt werden muss.

  1. kann ich ein Konto entsperren, ohne einen Ethereum-Knoten zu betreiben?
  2. Ich kenne den privaten Schlüssel für dieses Konto. Kann ich eine Signatur mit dem privaten Schlüssel anstelle des öffentlichen Schlüssels und ohne Entsperren erstellen? Scheint, als könnte es mit Hilfe von Paketen gemacht secp256k1werden, aber ist das nur mit web3 machbar?

Antworten (1)

  1. N/A, da Sie ein Konto überhaupt nicht entsperren müssen.
  2. Ja, siehe unten.

Im Folgenden wird Web3.js Version 1.0.0-beta verwendet , die jetzt standardmäßig von npm installiert wird. Beachten Sie, dass kein Knoten angehängt ist.

> var Web3 = require('web3');
> var web3 = new Web3();
> web3.version
'1.0.0-beta.10'

Der zweite Parameter im Folgenden ist der private Schlüssel:

> web3.eth.accounts.sign("Hello, world!", '0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef')
{ message: 'Hello, world!',
  messageHash: '0xb453bd4e271eed985cbab8231da609c4ce0a9cf1f763b6c1594e76315510e0f1',
  v: '0x1b',
  r: '0x3bc843a917d6c19c487c1d0c660cdd61389ce2a7651ee3171bcc212ffddca164',
  s: '0x193f1f2e06f7ed8f9fbf2254232d99848a8102b552032b68a5507b4d81492f0f',
  signature: '0x3bc843a917d6c19c487c1d0c660cdd61389ce2a7651ee3171bcc212ffddca164193f1f2e06f7ed8f9fbf2254232d99848a8102b552032b68a5507b4d81492f0f1b' }

Und die Signatur wird auch ausgecheckt (das wiederhergestellte Konto ist dasselbe wie das Konto, das direkt aus dem privaten Schlüssel generiert wurde):

> web3.eth.accounts.recover('0xb453bd4e271eed985cbab8231da609c4ce0a9cf1f763b6c1594e76315510e0f1', '0x1b', '0x3bc843a917d6c19c487c1d0c660cdd61389ce2a7651ee3171bcc212ffddca164', '0x193f1f2e06f7ed8f9fbf2254232d99848a8102b552032b68a5507b4d81492f0f')
'0xFCAd0B19bB29D4674531d6f115237E16AfCE377c'
>
> web3.eth.accounts.privateKeyToAccount('0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef');
{ address: '0xFCAd0B19bB29D4674531d6f115237E16AfCE377c',
  privateKey: '0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef',
...}
Danke, denke, ich werde secp256k1 verwenden, bis web3@1.0.0 offiziell draußen ist, und dann deine Lösung verwenden.