Я пытаюсь написать клиентский скрипт, который вызывает функцию смарт-контракта ethereum ER C -20, которую я вызываю transferMultiple
. Эта функция похожа на функцию transfer
в том смысле, что она передает токены ER C -20 нескольким пользователям одновременно. Я определяю его твердо следующим образом:
function transferMultiple(address[] memory recipients, uint256[] memory amounts) public virtual returns (bool) {
uint256 i=0;
for(i; i < recipients.length; i++){
_transfer(_msgSender(),recipients[i],amounts[i]);
}
return true;
}
Я пытаюсь прочитать данные из файла .csv с двумя столбцами (адресами и токенами) в два массива (const address = [];
и const tokens = [];
), поэтому я могу передать их в качестве параметров в моем сценарии со следующим кодом:
web3.eth.getTransactionCount(account1, (err, txCount) => {
const txObject = {
nonce: web3.utils.toHex(txCount),
gasLimit: web3.utils.toHex(800000),
gasPrice: web3.utils.toHex(web3.utils.toWei('20', 'Gwei')),
to: contractAddress,
data: contract.methods.transferMultiple(addresses,tokens).encodeABI()
}
const tx = new Tx(txObject, {chain:'ropsten', hardfork: 'petersburg'})
tx.sign(privateKey1)
const serializedTx = tx.serialize()
const raw = '0x' + serializedTx.toString('hex')
web3.eth.sendSignedTransaction(raw, (err, txHash) => {
console.log('err:', err, 'txHash:', txHash)
})
})
Я много искал, чтобы найти способ сделать это. Кажется, есть два пути: синхронный и асинхронный. Код, который пока лучше всего работает для меня:
var csv = require('ya-csv');
var reader = csv.createCsvFileReader('data.csv', { 'separator': ',' });
reader.setColumnNames([ 'col1', 'col2' ]);
const address = [];
const tokens = [];
reader.addListener('data', function(data) {
address.push(data.col1);
tokens.push(data.col2);
});
Однако, когда я помещаю этот сегмент кода перед сегментом создания транзакции, массивы передаются пустыми. Я немного запутался в том, как объединить оба сегмента, чтобы он работал правильно. Может кто-нибудь объяснить, что я делаю неправильно. И если для этого есть другой более действенный способ.