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.sign
ein öffentlicher Schlüssel bereitgestellt und das Konto entsperrt werden muss.
secp256k1
werden, aber ist das nur mit web3 machbar?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',
...}
xaxa