В eth-lightwallet есть два типа функций создания Tx;
txutils.valueTx(txObject)
а также
txutils.functionTx(abi, functionName, args, txObject)
Я предполагаю, что; хотя их входные данные очень разные, они оба приводят к Tx
объекту, который выглядит следующим образом:
tx = {
nonce: '..',
gasPrice: '..',
gasLimit: '..',
to: '..',
value: '..',
data: '...'
}
и единственная разница в том, что data
пусто в valueTx
, и это шестнадцатеричная версия вызова функции в functionTx
. Это правильно? data
Единственная разница между двумя ?
Кроме того, как я могу вычислить data
себя, зная адрес контракта, abi и имя/параметры функции? Есть ли другая библиотека для этого?
Спасибо,
Разница между ними заключается в том, что valueTx просто создает транзакцию, которая отправляет «значение» (эфир/wei и т. д.) на определенный адрес в блокчейне, в отличие от functionTx, который создает транзакцию, выполняющую функцию в блокчейне (примечание что в этом случае вы также можете передать «значение» вместе с вызовом функции).
Аргумент «данные» представляет собой шестнадцатеричное представление аргументов, которые получает функция, и существует несколько различных методов его создания.
Я не уверен, как вы используете библиотеку, но если вы используете web3, то, на мой взгляд, самый простой способ — сгенерировать данные, вызвав getData для объекта функции.
Например, если вы хотите создать шестнадцатеричные данные, представляющие аргументы, которые вы хотите передать функции «foo», вы можете сделать следующее:
// for a given foo function in the contract -
// function foo(uint256 a, uint256 b) {}
// create a contract instance -
var contract = web3.eth.contract(contractAbi);
// generate the hex data for the arguments
var data = contract.foo.getData(100, 200);
// at this point, data value will be the hex string that
// represents the "100, 200" arguments.
// note that you might need to add the '0x' prefix to
// the data if it's not already there, some wallets are strict about it
Джефф
getData
похоже на то, что я ищу. Поэтому я предполагаю, что могу отправить 0-значениеvalueTx
(вместоfunctionTx
), просто добавивdata: contract.foo.getData()
.нергалл
Джефф
нергалл