Ожидающие транзакции не добываются

Предварительные условия

У меня есть частная сеть с Geth, у меня есть настраиваемые смарт-контракты, развернутые Truffle, и простой интерфейс, который использует Metamask в качестве провайдера для подключения к сети.

Версии

  • Geth: 1.8.12-стабильная
  • Трюфель: v4.1.13 (ядро: 4.1.13)
  • Solidity: v0.4.24 (solc-js)

Генезис Блок

{
    "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: {}

Эта транзакция никогда не обрабатывается и не применяется и навсегда остается в пуле транзакций как ожидающая.

Проблема

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

Не имеет прямого отношения. Но это может дать вам некоторые идеи/указатели: medium.com/@jgm.orinoco/…

Ответы (1)

Попробуйте выполнить транзакцию, используя адрес, 0x0d33f764b19d03df4daa283859577378a01c5cadдля которого вы уже предварительно выделили некоторое количество эфиров. Возможно, стоимость транзакции сравнительно высока и требуется больше времени, чтобы добыть достаточное количество эфиров для выполнения транзакции.

Привет asvisosila, В настоящее время на моем счету 55130.000 ETH. Как я могу получить текущую стоимость транзакции в этой частной сети?
Вы можете развернуть свой контракт на ганаше? Я рекомендую вам использовать ganache для разработки и тестирования DAPP. Ganache изначально предварительно распределяет 100 эфиров на 10 учетных записях (по умолчанию 10), чтобы вы могли быстро протестировать свое приложение.
asvisosila, Нет, я запускаю geth node, где я могу без ошибок развертывать контракты, используя Truffle. Тем не менее, мне нужно попробовать использовать что-то еще, чтобы это сработало, так как я пока не смог это исправить :(