Jak vytvořit surové transakce v Ethereum? - Část 1

V tomto příspěvku zjistíme, jak vytvářet, podepisovat a odesílat nezpracované transakce mezi účty pomocí NodeJ.

Nezpracované transakce jsou způsob, kterým můžeme oddělit proces vytváření, podepisování a odesílání nezpracovaných transakcí, což nám dává větší kontrolu nad tím, jak se má transakce provádět na Ethereum. Nezpracované transakce nám pomáhají vytvářet transakce mimo konzolu geth.

Z čeho se skládá transakce?

Když posíláme transakci mezi dvěma účty z konzole geth, potřebujeme 3 parametry, tj. Z účtu, na účet a hodnotu. Ale pod nimi jsou další parametry, které pro nás geth konzole vyplní, jsou gasPrice, gasLimit a nonce.

  • gasPrice je maximální cena plynu, kterou jste ochotni za tuto transakci zaplatit.
  • gasLimit je maximální plyn, který jste ochotni za tuto transakci zaplatit.
  • nonce, které zde vidíte, se nesmí zaměňovat s nonce, které se používá v procesu těžby. Jak se ukazuje, nonce pro transakci je parametr, který se používá k udržení pořadí, ve kterém jsou transakce zpracovávány. Pokud tedy odešlete transakci s jinou než jinou než předchozí transakcí ze stejného účtu, bude tato transakce odmítnuta.

Musíme se proto postarat o správné odeslání hodnoty nonce, bez které transakce selže.

Nezpracované transakce mezi účty

K vytvoření prvotních transakcí mimo geth konzoli použijeme uzlový modul s názvem ethereum-js. Z toho, co jsme hovořili výše, potřebujeme správnou hodnotu nonce k odeslání transakce, takže pojďme zjistit nonce z geth uzlu, ze kterého bude transakce odesílána, kterou lze najít pomocí

eth.getTransactionCount ()

Měli bychom také znát soukromý klíč účtu, ze kterého chceme transakci odeslat. Nejjednodušší způsob, jak získat soukromý klíč, je pomocí funkce zotavení modulu keythereum k nalezení soukromého klíče ze souboru úložiště klíčů geth. Níže je kód pro získání soukromého klíče z klíčového souboru

const keythereum = vyžadovat ('keythereum');
const address = '0x9e378d2365b7657ebb0f72ae402bc08812022211';
const datadir = '/ home / administrator / ethereum / data';
const password = 'password';
let str;
keythereum.importFromFile (adresa, datadir, funkce (keyObject) {
  keythereum.recover (heslo, keyObject, funkce (privateKey) {
    console.log (privateKey.toString ('hex'));
// 05a20149c1c76ae9da8457435bf0224a4f81801da1d8204cb81608abe8c112ca
  });
});

Můžeme vytvořit prvotní transakci z jednoho účtu na druhý pomocí následujícího kódu

const ethTx = vyžadovat ('ethereumjs-tx');

const txParams = {
  nonce: '0x6', // Nahrazení nonce pro váš účet v geth uzlu
  gasPrice: '0x09184e72a000',
  gasLimit: '0x30000',
  do: „0xfa3caabc8eefec2b5e2895e5afbf79379e7268a7“,
  hodnota: '0x00'
};
// Transakce je vytvořena
const tx = new ethTx (txParams);
const privKey = Buffer.from ('05a20149c1c76ae9da8457435bf0224a4f81801da1d8204cb81608abe8c112ca', 'hex');
// Transakce je podepsána
tx.sign (privKey);
const serializedTx = tx.serialize ();
const rawTx = '0x' + serializedTx.toString ('hex');
console.log (rawTx)

Nyní budeme jako výstup programu získávat surový řetězec transakcí. To lze odeslat do sítě Ethereum pomocí následujícího příkazu v konzole geth.

eth.sendRawTransaction ()

Nyní uvidíte transakční hash transakce.

V dalším příspěvku zjistíme, jak poslat nezpracované transakce na smlouvu.

Poznámka:

  • Tuto metodu používejte při práci s mainnetem Ethereum, pouze pokud víte, co děláte, protože by to mohlo mít bezpečnostní důsledky, protože zde je extrahován váš soukromý klíč.
  • Zde je uveden další způsob, jak vytvořit prvotní transakci v Go.

Reference

  • https://github.com/ethereumjs/ethereumjs-tx
  • https://github.com/ethereumjs/keythereum#key-import
  • https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethsendrawtransaction