Как да създадете сурови транзакции в Ethereum? - Част 1

В тази публикация ще разберем как да създавате, подписвате и изпращате сурови транзакции между акаунти с помощта на NodeJs.

Суровите транзакции са начин, по който можем да отделим процеса на създаване, подписване и изпращане на сурови транзакции, което ни дава повече контрол върху начина, по който трябва да се извърши транзакция в Ethereum. Суровите транзакции ни помагат да създаваме транзакции извън geth конзолата.

От какво се състои транзакция?

Когато изпращаме транзакция между два акаунта от geth конзола, се нуждаем от 3 параметъра, т.е. от акаунт, за сметка и стойност. Но има още някои параметри отдолу, които гет конзолата изпълва за нас, те са gasPrice, gasLimit и nonce.

  • gasPrice е максималната цена на газ, която сте готови да платите за тази транзакция.
  • gasLimit е максималният газ, който сте готови да платите за тази транзакция.
  • без това, което виждате тук, не трябва да се бърка с понятието, което се използва в процеса на добив. Както се оказва, nonce за транзакция е параметър, който се използва за поддържане на реда, в който се обработват транзакциите. Така че, ако изпратите транзакция с nonce, която не е една повече от предишната транзакция от същия този акаунт, тогава тази транзакция ще бъде отхвърлена.

Така че ние трябва да се грижим, че стойността без значение е изпратена правилно, без която транзакцията се проваля.

Сурови транзакции между акаунти

Ще използваме модул на възел, наречен ethereum-js, за да създадем сурови транзакции извън geth console. От това, което говорихме по-горе, се нуждаем от коректна стойност на nonce, за да изпратим транзакцията, така че нека да разберем nonce от geth възела, от който ще изпращаме транзакцията, която може да бъде намерена чрез

eth.getTransactionCount (<профил>)

Трябва да знаем и частния ключ на акаунта, от който искаме да изпратим транзакцията. Най-лесният начин да получите частния ключ е като използвате функцията за възстановяване на модула keythereum, за да разберете частния ключ от файла на geth keystore. По-долу е кода, за да получите частния ключ от keyfile

const keythereum = изисквам ('keythereum');
const address = '0x9e378d2365b7657ebb0f72ae402bc08812022211';
const datadir = '/ home / administrator / ethereum / data';
const password = 'парола';
нека str;
keythereum.importFromFile (адрес, datadir, функция (keyObject) {
  keythereum.recover (парола, keyObject, функция (privateKey) {
    console.log (privateKey.toString ( "хекс"));
// 05a20149c1c76ae9da8457435bf0224a4f81801da1d8204cb81608abe8c112ca
  });
});

Можем да създадем сурова транзакция от един акаунт в друг, като използваме следния код

const ethTx = изисквам ('ethereumjs-tx');

const txParams = {
  nonce: '0x6', // Замяна по никакъв начин за вашия акаунт в geth възел
  gasPrice: '0x09184e72a000',
  gasLimit: '0x30000',
  до: '0xfa3caabc8eefec2b5e2895e5afbf79379e7268a7',
  стойност: '0x00'
};
// Транзакцията е създадена
const tx = нов ethTx (txParams);
const privKey = Buffer.from ('05a20149c1c76ae9da8457435bf0224a4f81801da1d8204cb81608abe8c112ca', 'hex');
// Транзакцията е подписана
tx.sign (privKey);
const serializedTx = tx.serialize ();
const rawTx = '0x' + serializedTx.toString ('шестнадесетичен');
console.log (rawTx)

Сега ще получим суров транзакционен низ като изход на програмата. Това може да бъде изпратено до Ethereum Network, като се използва следната команда в geth console.

eth.sendRawTransaction ()

Вече ще можете да видите хеша на транзакцията.

В следващата публикация ще разберем как да изпращаме сурови транзакции по договор.

Забележка:

  • Използвайте този метод, докато работите с Ethereum mainnet, само ако знаете какво правите, тъй като това може да има последици за сигурността, тъй като тук е извлечен личният ви ключ.
  • Друг начин за създаване на сурова транзакция в Go, споменат тук.

Препратки

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