Состояние контракта Solidity не обновляется подписанной транзакцией в nodejs

Подписанной транзакцией с использованием 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

Какие могут быть возможные причины?

Можете ли вы поделиться своим кодом Solidity и JavaScript? Это поможет воспроизвести проблему и лучше ее понять.
@SohamLawar обновлено

Ответы (1)

После получения поля квитанции поле статуса было неопределенным , то есть транзакция не майнилась из-за низкого уровня газа. Наконец проблема была решена после предоставления достаточного количества газа по умолчанию.

 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
        }