Гет: баланс всегда равен 0 на --rinkeby - PullRequest
0 голосов
/ 06 января 2020

Согласно Etherscan, у меня есть 7.5 Ether, но когда я выполняю eth.getBalance (eth.accounts [0]) внутри консоли Javascript, он всегда возвращает «0»

, вот как я подключаюсь geth to rinkeby (работает более 24 часов)

geth  --rinkeby

это состояние syn c

λ geth --rinkeby attach ipc:\\.\pipe\geth.ipc
Welcome to the Geth JavaScript console!

instance: Geth/v1.9.9-stable-01744997/windows-amd64/go1.13.4
coinbase: 0x7f9153e8fe06c4b3eb10e8457c20d0559921de5c
at block: 0 (Wed, 12 Apr 2017 16:59:06 CEST)
 datadir: C:\Users\andre_000\AppData\Local\Ethereum\rinkeby
 modules: admin:1.0 clique:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

> eth.syncing
{
  currentBlock: 5746334,
  highestBlock: 5746402,
  knownStates: 32641057,
  pulledStates: 32636964,
  startingBlock: 5746304
}
> eth.getBalance(eth.accounts[0])
  0
> eth.getBalance(eth.coinbase)
  0
> web3.fromWei(eth.getBalance(eth.coinbase)); 
  0
> eth.getBalance("0x7f9153e8fe06c4b3eb10e8457c20d0559921de5c")
  0
> eth.blockNumber
  0

du -h 30G

1 Ответ

0 голосов
/ 08 января 2020

Похоже, что geth еще не синхронизирован.

Пожалуйста, введите это в вашу консоль geth:

eth.getBlock("latest").number

Начиная с этого поста, вы должны получить 5757199 или выше.

«Синхронизация Ethereum - это болевая точка», как говорит Петер Силаджи (командный отряд ethereum).

С https://github.com/ethereum/go-ethereum/issues/16875:

Текущий режим по умолчанию syn c для Geth называется fast syn c. Вместо того, чтобы начинать с блока генезиса и повторно обрабатывать все транзакции, которые когда-либо происходили (что может занять несколько недель), быстрая синхронизация загружает блоки и проверяет только соответствующие доказательства работ. Загрузка всех блоков - это простая и быстрая процедура, которая сравнительно быстро соберет всю цепочку.

Многие люди ошибочно полагают, что, поскольку у них есть блоки, они синхронизированы c. К сожалению, это не так, поскольку транзакция не была выполнена, поэтому у нас нет доступного состояния учетной записи (ie. Остатки, одноразовые номера, код смарт-контракта и данные). Они должны быть загружены отдельно и перепроверены с последними блоками. Эта фаза называется состоянием загрузки tr ie и фактически выполняется одновременно с загрузками блоков; увы, в настоящее время это занимает намного больше времени, чем загрузка блоков.

Итак, каково состояние tr ie? В Ethereum mai nnet уже есть тонна учетных записей, которые отслеживают баланс, nonce и т. Д. c каждого пользователя / контракта. Однако самих учетных записей недостаточно для запуска узла, их необходимо криптографически связать с каждым блоком, чтобы узлы могли фактически убедиться, что учетные записи не подделаны. Это криптографическое связывание c выполняется путем создания древовидной структуры данных над учетными записями, каждый уровень объединяет слой под ним в еще меньший слой, пока не будет достигнут единый root. Эта гигантская структура данных, содержащая все учетные записи и промежуточные криптографические c доказательства, называется состоянием tr ie.

Хорошо, так почему же это создает проблему? Эта структура данных tr ie представляет собой сложную взаимосвязь сотен миллионов крошечных криптографических доказательств (tr ie узлов). Чтобы действительно иметь синхронизированный узел, вам нужно загрузить все данные учетной записи, а также все крошечные криптографические доказательства, чтобы убедиться, что никто в сети не пытается вас обмануть. Это само по себе уже сумасшедшее количество элементов данных. Еще более усложняется то, что эти данные постоянно изменяются: из каждого блока (15 с) из этого tr ie удаляется около 1000 узлов и добавляется около 2000 новых. Это означает, что ваш узел должен синхронизировать набор данных, который изменяется 200 раз в секунду. Хуже всего то, что во время синхронизации сеть движется вперед, и состояние, в котором вы начали загрузку, может исчезнуть во время загрузки, поэтому ваш узел должен постоянно следить за сетью, пытаясь собрать все последние данные. Но до тех пор, пока вы на самом деле не соберете все данные, ваш локальный узел не будет использоваться, так как он не сможет ничего криптографически доказать о каких-либо учетных записях.

Если вы видите, что вы на 64 блока отстаете от mai nnet, вы не все же синхронизированы, даже не близко. Вы только что закончили с фазой загрузки блоков и по-прежнему выполняете загрузку состояния. Вы можете сами убедиться в этом через бесконечный [...] поток журналов записей о состоянии импорта. Вам также придется подождать, пока ваш узел не станет действительно подключенным.

...