Ich habe einen Online-Shop, in dem Benutzer Waren empfangen ETH
und einkaufen können. Um also eine sichere Brieftasche zu haben, habe ich einen Offline-Dienst erstellt, der Adressen in meinem Online-Dienst generiert xpub
und mit xpriv
dem ich Adressen generiere.
Ich verwende xpub
in meinem Online-Dienst, um Adressen für Benutzer zu generieren, und verwende xpriv
in meinem zweiten Offline-Dienst, um Transaktionen zu senden.
Hier ist ein Code, der generiertxpub
const hdkey = require('ethereumjs-wallet/hdkey');
const bip39 = require('bip39');
var seed = bip39.mnemonicToSeed('my_mnemonic_phrase', 'my_password');
var chain = hdkey.fromMasterSeed(seed);
var xpub = chain.publicExtendedKey();
var xpriv = chain.privateExtendedKey();
Als ich in meinem Online-Dienst nutze xpub
, generiere ich Adressen für Benutzer
const generate = async (index) => {
const xpub = process.env.ETH_XPUB;
const hdk = hdkey.fromExtendedKey(xpub);
index = index || 0;
const child = hdk.deriveChild(index);
const w = wallet.fromExtendedPublicKey(child.publicExtendedKey());
return w.getAddressString();
};
Also alles ok, aber ich habe in meinem Offline-Dienst auch einen Dienst, der alle Coins von generierten Adressen an mein eigenes Konto senden soll.
Hier ist mein zweiter Dienst
onst ethTx = require('ethereumjs-tx');
const Web3 = require('web3');
const web3 = new Web3(
new Web3.providers.HttpProvider('http://localhost:8545')
);
//Verify connection is successful
web3.eth.net.isListening()
.then(() => console.log('is connected'))
.catch(e => console.log('Wow. Something went wrong'));
const params = {
nonce: 0,
to: my_address,
value: '0.1',
gasPrice: 5000000000,
gasLimit: 21000,
chainId: 3
};
const privKey = new Buffer('xprv_MY_XPRIV_KEY','hex');
const tx = new ethTx(params);
//Signing the transaction with the correct private key
tx.sign(privKey);
const serializedTx = tx.serialize();
Web3.eth.sendSignedTransaction(
`0x${serializedTx.toString('hex')}`,
(error, result) => {
if (error) { console.log(`Error: ${error}`); }
else { console.log(`Result: ${result}`); }
}
);
Aber in diesem Fall bekomme ich einen Fehler, der so aussieht
Die Länge des privaten Schlüssels ist ungültig
Ich verwende xpriv
als privaten Schlüssel . Ist das ok ? oder wo mein fehler ? Was muss ich hinzufügen/ändern, um Transaktionen zu senden?
Irgendwelche Vorschläge würden viel schätzen.
Mit Ihrem privaten Schlüssel können Sie keine Transaktion für die untergeordnete Adresse signieren. Sie müssen zuerst eine Brieftasche für die untergeordnete Adresse ableiten.
const privKey = new Buffer('xprv_MY_XPRIV_KEY','hex')
const wal = hdkey.fromExtendedPrivateKey(privKey)
const w = wal.deriveChild(index).getWallet()
const childPK = w.getPrivateKey()
WBT
Jur Gasparjan