Transactions
無法發送交易
我有一個線上商店,使用者可以在那裡接收
ETH
和購物。因此,為了擁有一個安全的錢包,我創建了一個離線服務,它生成xpub
並xpriv
用於在我的線上服務中生成地址。我
xpub
在我的線上服務中使用為使用者生成地址,並xpriv
在我的第二個離線服務中使用來發送交易。這是一個生成的程式碼
xpub
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();
比
xpub
在我的線上服務中使用我為使用者生成地址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(); };
所以一切都很好,但我在離線服務中也有一項服務,它應該將所有硬幣從生成的地址發送到我自己的帳戶。
這是我的第二個服務
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}`); } } );
但在這種情況下,我得到一個看起來像這樣的錯誤
私鑰長度無效
我
xpriv
用作私鑰。這個可以嗎 ?或者我的錯誤在哪裡?我需要添加/更改什麼來發送交易?任何建議將不勝感激。
使用您的私鑰,您無法為子地址簽署交易。您必須首先為子地址派生一個錢包。
const privKey = new Buffer('xprv_MY_XPRIV_KEY','hex') const wal = hdkey.fromExtendedPrivateKey(privKey) const w = wal.deriveChild(index).getWallet() const childPK = w.getPrivateKey()