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