Подписанной транзакцией с использованием web3 в nodejs
Хэш транзакции
0x3c7688326afc83e6524e8c491f203852e34aa0f572d952569b6253e98dbd83a1
Данные
0xf9bcd5450000000000000000000000008d19c274d690f84efd4a443c21c4f4a1b77720ed000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000036162630000000000000000000000000000000000000000000000000000000000
Квитанция
{"receipt":{"blockHash":"0x54f01d72226e3cd75d7b5c6952cac149dab47aabffbf5251d87f86613f223657","blockNumber":549010,"contractAddress":null,"cumulativeGasUsed":23384,"from":"0x0a889e242e6afaaaf51d9e40b2f089ab03889f97","gasUsed":23384,"logs":[],"logsBloom":"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","root":"0x4a0f79b6b74ce735aebfaa2e19ef066f500a6fa3051922fd193abe4219a158b8","to":"0x32ffcced3e2d7979cf7005fd8a9de681408f70dc","transactionHash":"0x3c7688326afc83e6524e8c491f203852e34aa0f572d952569b6253e98dbd83a1","transactionIndex":0}}
Использование ремикса
Хэш транзакции
0x7b7c6006c078abaf10150e685f4bb7b755bf3de2e6baa29105128a7ef4f838f9
данные
0xf9bcd5450000000000000000000000008d19c274d690f84efd4a443c21c4f4a1b77720ed000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000036162630000000000000000000000000000000000000000000000000000000000
Квитанция
receipt={"receipt":{"blockHash":"0x8e365df7f4d07510b69a9f540cefc39c47ec117e7cfdd5516c15b92abc1d7488","blockNumber":549012,"contractAddress":null,"cumulativeGasUsed":99095,"from":"0x0a889e242e6afaaaf51d9e40b2f089ab03889f97","gasUsed":99095,"logs":[{"address":"0x32fFcceD3e2d7979cf7005Fd8A9DE681408F70Dc","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x0000000000000000000000000a889e242e6afaaaf51d9e40b2f089ab03889f97","0x0000000000000000000000008d19c274d690f84efd4a443c21c4f4a1b77720ed"],"data":"0x000000000000000000000000000000000000000000000000000000000000012c","blockNumber":549012,"transactionHash":"0x7b7c6006c078abaf10150e685f4bb7b755bf3de2e6baa29105128a7ef4f838f9","transactionIndex":0,"blockHash":"0x8e365df7f4d07510b69a9f540cefc39c47ec117e7cfdd5516c15b92abc1d7488","logIndex":0,"removed":false,"id":"log_8e8a9b3e"}],"logsBloom":"0x00000000000000000000000000000000000080000000000000000000000000000000000000000400000000000000002000000000000000000000000000000000000000000000000000000008000000000000000000000000000000200000000000000000000000000000000004000000000000000000000000000010000008000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000","root":"0x156468c1bbde543ecae47841270c2037f4bc284df744e4a1ea7b5171bea1704e","to":"0x32ffcced3e2d7979cf7005fd8a9de681408f70dc","transactionHash":"0x7b7c6006c078abaf10150e685f4bb7b755bf3de2e6baa29105128a7ef4f838f9","transactionIndex":0}}
Прочность (функция)
function createUser(address _address, string _name) onlyOwner public {
User memory newUser;// for temporary data
newUser.id=_address;
newUser.name=_name;
//check if exists
users[newUser.id]=newUser;
_totalUser++;
//Send initial ether to that public key
balances[_address] = balances[_address].add(NEW_ACCOUNT_TOKEN);
_totalSupply=_totalSupply.add(NEW_ACCOUNT_TOKEN);
emit Transfer(owner,_address , _totalSupply);
}
нодейс + веб3джс
const contract = new web3.eth.Contract(abi, process.env.CONTRACT_ADDRESS);
const data = contract.methods.createUser('0x40c6f8cda775e5fc26c3f7782518f146a1fdf746', 'abc').encodeABI();
var privateKey = Buffer.from(process.env.WALLET_PRIVATE_KEY, 'hex');
web3.eth.estimateGas({
to: process.env.WALLET_ADDRESS,
data: data
}).then((estimateGas) => {
log('estimateGas: ' + estimateGas);
web3.eth.getTransactionCount(process.env.WALLET_ADDRESS).then((nonce) => {
log('nonce:' + nonce); //
var rawTx = {
nonce: nonce,
from: process.env.WALLET_ADDRESS,
to: process.env.CONTRACT_ADDRESS,
gasPrice: web3.utils.toHex(web3.utils.toWei('2', 'gwei')),
gas: estimateGas,
data: data
}
var ethTx = new EthereumTx(rawTx);
ethTx.sign(privateKey);
var serializedTx = ethTx.serialize();
web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex'))
.once('transactionHash', function (hash) {
log('hash: ' + hash)
res.json({
'status': true,
'msg': 'Successfully submitted',
'data': {
'tx': hash
}
});
})
.once('receipt', function (receipt) {
log('receipt for ' + receipt.transactionHash);
})
.on('error', function (error) {
log(error);
})
.then(function (receipt) { // will be fired once the receipt is mined
log(receipt.transactionHash + ' is mined' );
log('tx: ' + receipt.transactionHash + ' \n' + 'cumulativeGasUsed : ' + receipt.cumulativeGasUsed
+ ', blockNumber: ' + receipt.blockNumber +', blockHash: '+ receipt.blockHash + ' \nlogs : ' + receipt.logs)
});
});
});
Обе транзакции подписаны в одном и том же контракте одним и тем же закрытым ключом. В обоих случаях входные параметры функции одинаковы, поэтому данные одинаковы для обоих случаев. Но транзакция Remix обновляет внутреннее состояние, а web3 (с использованием nodejs) — нет. И журнал транзакций также отсутствует для транзакции web3js (nodejs). Общее количество пользователей не меняется с web3js+nodejs
Какие могут быть возможные причины?
После получения поля квитанции поле статуса было неопределенным , то есть транзакция не майнилась из-за низкого уровня газа. Наконец проблема была решена после предоставления достаточного количества газа по умолчанию.
var rawTx = {
nonce: nonce,
from: process.env.WALLET_ADDRESS,
to: process.env.CONTRACT_ADDRESS,
gasPrice: web3.utils.toHex(web3.utils.toWei('2', 'gwei')),
gas: 1500000,
data: data
}
Сохам Лавар
Шариф2008