Transactions

無法發送交易

  • October 29, 2018

我有一個線上商店,使用者可以在那裡接收ETH和購物。因此,為了擁有一個安全的錢包,我創建了一個離線服務,它生成xpubxpriv用於在我的線上服務中生成地址。

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()

引用自:https://ethereum.stackexchange.com/questions/61245