Почему локальный узел RSK показывает «недопустимый адрес» для моего смарт-контракта, даже если подумал, что я вижу его в проводнике блоков?

Я запускаю RSKj со следующей командой, чтобы подключиться к RSK Testnet:

      java -cp rskj-core-2.2.0-PAPYRUS-all.jar -Drpc.providers.web.cors=* co.rsk.Start --testnet

Однако когда я запрашиваю адрес, я получаю следующую ошибку:

      Invalid address
The checksum is invalid for the current network: RSK Testnet (31)

(Адрес представляет собой смарт-контракт, чего бы он ни стоил). Я убедился, что этот адрес существует в обозревателе блоков RSK. Так что же заставляет это происходить?

1 ответ

Если вы подключаетесь к RSKj, работающему локально с подключением к RSK Testnet, а адрес не существует; но тот же адрес действительно существует на публичных узлах RSK; тогда вы должны убедиться, что ваш локальный узел полностью синхронизирован. Сделать это:

(1) Узнайте, какой номер блока находится на общедоступном узле:

      curl \
  -X POST \
  -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
  https://public-node.testnet.rsk.co/

Это дает большое значение 0x1bfe36 который 1834550.

      {"jsonrpc":"2.0","id":1,"result":"0x1bfe36"}

(2) Узнайте, какой номер блока находится на вашем локальном узле:

      curl \
  -X POST \
  -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' \
  http://localhost:4444/

Если у вас есть новый запуск на вашем локальном RSKj, и он не работает в течение длительного времени, вы можете получить небольшое число в результате, например 0x3fff, который 16383.

      {"jsonrpc":"2.0","id":1,"result":"0x3fff"}

(3) Сравните два значения. Если эти команды выполняются в течение короткого промежутка времени друг с другом, они должны иметь одинаковое значение, и это будет означать, что ваш локальный узел полностью синхронизирован. Однако, как видно из приведенного выше примера, у локального узла был номер блока, значение которого было меньше, чем у общедоступного узла. Это означает, что он не был полностью синхронизирован. Если смарт-контракт на этом конкретном адресе был развернут после этого конкретного номера, вы получите указанную выше ошибку, потому что по этому адресу ничего не существует. Решение состоит в том, чтобы дождаться полной синхронизации вашего локального узла с остальной частью сети (включая общедоступный узел); перед повторным запуском запроса.

Другие вопросы по тегам