Bieten Sie eine Sicherheitsmappe an

Ich habe einen Service, bei dem Benutzer mein Produkt kaufen können. Neben der Zahlung per Karte möchte ich es den Benutzern ermöglichen, in einzuzahlen ETH. Ich denke, dass es Adressen für jeden Benutzer korrekt generieren wird, so dass es möglich ist, den Kontostand zu verfolgen. Auf dem Server habe ich ausgeführt geth, und die Benutzer erhalten ihre Adressen über die rpcAnfrage. Aber wenn jemand Server gehackt wird, kann er alle Beträge abheben. Wie kann ich eine sichere Brieftasche bereitstellen?

Irgendwelche Vorschläge würden sehr geschätzt.

Antworten (1)

Sie können HD-Geldbörsen verwenden . Sie können Ihre Seed-Wörter sicher offline speichern, den öffentlichen Master-Schlüssel auf einem Server ablegen und darauf basierend Empfangsadressen generieren.

So können Sie Adressen basierend auf einem Master Public Key generieren, der einem Basisableitungspfad entspricht:

const wallet = require('ethereumjs-wallet')
const hdkey = require('ethereumjs-wallet/hdkey')

const create_addresses = async (from, to) => {

  const addresses = [];

  const master_public_key = process.env.MASTER_PUBLIC_KEY;

  const hdk = hdkey.fromExtendedKey(master_public_key);

  from = from || 0;
  to = to || 100;

  for (let i = from; i <= to; i++){
    const child = hdk.deriveChild(i);
    const w = wallet.fromExtendedPublicKey( child.publicExtendedKey() );
    const addr = {};
    addr[w.getAddressString()] = `${process.env.BASE_DERIVATION_PATH}/${i}`;
    addresses.push(addr);
  };

  return addresses;
}

Unter der Annahme, dass der in gefundene Wert process.env.MASTER_PUBLIC_KEYdem Ableitungspfad entspricht, m/44'/60'/0generiert die obige Funktion, wenn sie ohne Parameter aufgerufen wird, Adressen von m/44'/60'/0/0bism/44'/60'/0/100

Update - Abrufen des öffentlichen Masterschlüssels:

const get_mpk = ( seed, bdp ) => {
  const seed = bip39.mnemonicToSeed(mnemonic)
  const hdk = hdkey.fromMasterSeed(seed);

  const base_derivation_path = bdp || "m/44'/60'/0'/0";
  const base_derived = hdk.derivePath(base_derivation_path);
  const master_public_key = base_derived.publicExtendedKey();
  return master_public_key;
}
Danke! Können Sie auch angeben, wie ich MASTER_PUBLIC_KEY generieren kann. und wie ziehe ich dann erhaltene Coins ab?
Ich habe den Code hinzugefügt, der die MASTER_PUBLIC_KEYAusgangswörter und den Ableitungspfad generiert. Leider habe ich nicht den Code, um Transaktionen an einem einzigen Ort zu erstellen und zu signieren (wir erstellen die TX online und signieren sie offline), und ich habe jetzt keine Zeit, sie zusammenzustellen.
Ich möchte nur verstehen, was ich für Transaktionen benötige. Wie kann ich verstehen, dass ich einen privaten Schlüssel benötige, um Transaktionen von diesen Adressen durchzuführen. Aber welchen privaten Schlüssel muss ich haben? Und wie kann ich es verwenden?