Ich kann online keine Dokumentation darüber finden, wie Sie dies in Javascript tun, außer dieser .
Ich möchte wissen, wie die Authentifizierung in einer Ethereum-dApp funktioniert. Nach meinem Verständnis wird der Benutzer-Seed irgendwie in einen privaten Schlüssel generiert, der dann diesen privaten Schlüssel verwendet, um den öffentlichen Schlüssel abzuleiten, und daraus leitet man die Adresse ab. Hat jemand Weitere Informationen darüber, wie dies mit Javascript erreicht wurde oder wie die Architektur für diese Art von Setup aussieht. Jede Hilfe zum Verständnis wäre großartig.
Ich weiß, wie man die Seed-Phrase usw. mit der js bip39-Bibliothek generiert, danach bin ich ein bisschen festgefahren.
das ist im Grunde das, was ich bisher versuche:
const mnemonic = "vacant element sleep harsh stick else salt great kitten clutch salad subway"
const privateKey = new Buffer( mnemonic )
const publicKey = ethUtil.privateToPublic(privateKey).toString('hex')
const address = ethUtil.privateToAddress(privateKey).toString('hex')
Ich habe diesen Code von HD Wallet Provider extrahiert
const bip39 = require('bip39');
const hdkey = require('ethereumjs-wallet/hdkey');
const mnemonic = '..';
const hdwallet = hdkey.fromMasterSeed(bip39.mnemonicToSeed(mnemonic));
const path = "m/44'/60'/0'/0/0";
const wallet = hdwallet.derivePath(path).getWallet();
const address = `0x${wallet.getAddress().toString('hex')}`;
console.log(`Address: ${address}`);
Wenn Sie bereits einen Seed generiert haben, der einem privaten Schlüssel entspricht, können Sie den Rest wahrscheinlich aus dem GitHub-Repo von Ethereum abrufen . (Die gleiche Funktionalität wird wahrscheinlich im BIP-39 JS-Code bereitgestellt .)
Etwas in der Art von:
var utils = require('ethereumjs-util')
var privateKey = new Buffer(<from_seed>)
var publicKey = utils.privateToPublic(privateKey).toString('hex')
var address = utils.privateToAddress(privateKey).toString('hex')
Bearbeiten:
Das Obige geht davon aus, dass Sie bereits einige abgeleitete private Schlüssel aus Ihrer Mnemonik generiert haben. Um von der rohen BIP-39-Mnemonik zum obigen zu gelangen, ist ein bisschen komplizierter. (Ich bin wahrscheinlich nicht am besten qualifiziert, um eine anständige Antwort auf JS-Code zu geben ... Jemand hat möglicherweise eine bessere Methode als die folgende. Wie @smarx sagt, ist auch nicht klar, was Ihre ultimativen Ziele sind.)
Kurz gesagt - aus index.js
dem BIP-39 JS-Code - müssen Sie Folgendes tun:
getDerivationPath()
)calcBip32ExtendedKey()
)bip32ExtendedKey.derive()
)key.keyPair
)Dann können Sie Ihre Werte direkt abrufen :
var privKeyBuffer = keyPair.d.toBuffer(32);
privkey = privKeyBuffer.toString('hex');
var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
var hexAddress = addressBuffer.toString('hex');
var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
address = ethUtil.addHexPrefix(checksumAddress);
privkey = ethUtil.addHexPrefix(privkey);
pubkey = ethUtil.addHexPrefix(pubkey);
Das Obige könnte Ihnen zumindest eine Vorstellung davon geben, wo Sie suchen müssen, um weiter zu kommen.
privateKey
Puffer? (Sie müssen einen der abgeleiteten privaten Schlüssel verwenden.)Wenn Sie es im Browser oder React Native with Expo verwenden, versuchen Sie es mit ethers.js . Andernfalls werden Sie hier viele Arbeiten einführen, da Sie auf nativen Code zugreifen müssen, um React-native-randomBytes zu verwenden
mit ethers.js
, führen Sie einfach aus:
const wallet = Wallet.fromMnemonic(mnemonic);
Benutzer19510
Benutzer19510