У меня есть частная сеть с Geth, у меня есть настраиваемые смарт-контракты, развернутые Truffle, и простой интерфейс, который использует Metamask в качестве провайдера для подключения к сети.
{
"config": {
"chainId": 331788,
"homesteadBlock": 0,
"eip155Block": 331788,
"eip158Block": 0
},
"nonce": "0x0000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x00",
"gasLimit": "10000100000",
"difficulty": "20",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0d33f764b19d03df4daa283859577378a01c5cad",
"alloc": {
"0x0d33f764b19d03df4daa283859577378a01c5cad": { "balance": "1000000" }
}
}
geth --identity "node" --rpc --rpcport "8545" --rpccorsdomain "*" --datadir=/ethereum/data --ethash.dagdir=/ethereum/ethash --port "30303" --nodiscover --rpcapi "db,eth,net,admin,web3,debug" --networkid 331788 init /ethereum/genesis.json
geth --identity "node" --rpc --rpcaddr="0.0.0.0" --rpcport "8545" --rpccorsdomain "*" --datadir=/ethereum/data --ethash.dagdir=/ethereum/ethash --port "30303" --nodiscover --verbosity=9 --rpcapi "admin,db,eth,net,web3,miner,personal,debug" --networkid 331788
Как только частная сеть запущена, я подключаюсь к ней через geth attach
и запускаю следующее:
personal.unlockAccount(web3.eth.coinbase, "123123", 150000);
miner.setGasPrice(1); miner.setEtherbase(personal.listAccounts[0]); miner.start(5);
Итак, я разблокирую свою учетную запись coinbase и запускаю 5 майнеров с ценой газа 1. Через некоторое время я могу развернуть свои контракты, что я и делаю дальше. Таким образом, они берут первые три значения nonce для моей учетной записи coinbase. Когда контракт развертывается txpool.inspect
, показывает мне следующее:
pending: {
0x0D33f764b19d03DF4DAa283859577378a01C5Cad: {
2: "contract creation: 0 wei + 10010000 gas × 32 wei"
}
},
queued: {}
Контракты развернуты нормально.
Во внешнем интерфейсе у меня есть следующий код для отправки транзакции в мой пользовательский контракт с использованием truffle-contract
абстракции:
sampleNameContract().use(function (instance) {
return instance.addRecord(recordId, address, recordId, address, { gas: "0x10000", from: address })
}).then(function (value) {
console.log(`Tx: ${value}`)
})
Выполняя этот фрагмент, Metamask просит меня одобрить транзакцию, и я это делаю. В результате у меня есть следующая информация в txpool.inspect
:
pending: {
0x0D33f764b19d03DF4DAa283859577378a01C5Cad: {
3: "0x440C9c5DBC21cedcAfF1a98ac7A48b5c6930cd0c: 0 wei + 10010000 gas × 32000000000 wei"
}
},
queued: {}
Эта транзакция никогда не обрабатывается и не применяется и навсегда остается в пуле транзакций как ожидающая.
Транзакция, которую я отправляю в свой пользовательский контракт из внешнего интерфейса, никогда не добывается и не применяется. Не могли бы вы помочь мне понять это?
Попробуйте выполнить транзакцию, используя адрес, 0x0d33f764b19d03df4daa283859577378a01c5cad
для которого вы уже предварительно выделили некоторое количество эфиров. Возможно, стоимость транзакции сравнительно высока и требуется больше времени, чтобы добыть достаточное количество эфиров для выполнения транзакции.
Зульхилми Зайнудин