[решено] Преобразуйте открытый ключ валидатора в правильный формат
-
Мне удалось получить список валидаторов из lite-клиента.
В ответе есть список валидаторов, которые выглядят следующим образом
value:( validator_addr public_key:(ed25519_pubkey pubkey:x7613BCA2CBB4AE0F5309D70E14900D38E60BD1207136AFFDED7BFCF683E00FD4) weight:5240089054832364 adnl_addr:x6DF20651F61604A8763882856EDC3484DF6B6513E992CDE84A71BC1D1C75A72B )
Насколько я понимаю, я должен быть в состоянии преобразовать public_key в такой формат, чтобы я мог найти его на одном из сайтов explorer, например tonscan.org и так далее.
Похоже, это не работает. Может кто-нибудь, пожалуйста, указать мне на решение?
-
У меня нет никакого опыта работы с конфигурацией валидатора, но я могу поделиться с вами идеей открытого ключа, который мы используем в TON, и тем, как он взаимодействует со смарт-контрактами.
import { randomBytes } from "crypto"; import { keyPairFromSeed } from "ton-crypto"; let keypair = keyPairFromSeed(randomBytes(32)); let public_key_hex = keypair.publicKey.toString("hex"); let public_key_int = BigInt("0x" + public_key_hex); let public_key_cell = beginCell().storeUint(public_key_int, 256).endCell(); console.log(keypair.publicKey); console.log(public_key_hex); console.log(public_key_int); console.log(public_key_cell);
Вы получите:
<Buffer 3b 19 27 24 86 4a 6a 7b fa 02 5f 4e b6 20 c9 fb 51 1e 31 b6 5f 9f 4f 72 8f cc d8 ac dd ea 12 c1> 3b192724864a6a7bfa025f4eb620c9fb511e31b65f9f4f728fccd8acddea12c1 26730899395840241403219970071225489010060933487521107827084323612022786364097n x{3B192724864A6A7BFA025F4EB620C9FB511E31B65F9F4F728FCCD8ACDDEA12C1}
Как вы можете видеть, эти четыре строки результатов - это все сгенерированные мной открытые ключи, но выглядят они по-разному. Вот почему вы получили сообщение об ошибке, что формат был неправильным. Я думаю, вам нужно передать открытый ключ в виде целого числа без знака с 256 битами, чтобы попробовать.
В TON или TVM мы передаем смарт-контракту только тип данных ячейки. Вот почему мне нужно преобразовать мой открытый ключ
uint
в указанный там тип данных ячейки! -
Валидаторы создают новую пару ключей для каждого раунда проверки и используют ее для участия в выборах и создания блоков. Они также могут менять свой ADNL-адрес в каждом раунде, но это не то, что они обычно делают.
Если вы хотите посмотреть на их кошельки в TON blockchain explorers, вам нужно сначала найти контролирующий кошелек, то есть кошелек, который отправляет TON для участия в выборах.
Эту информацию можно найти, запустив метод get
participant_list_extended
, и он возвращает полезные данные только до завершения выборов.Например, если я запущу lite-клиент в testnet и выполню эту команду:
runmethod kf8zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM_BP participant_list_extended
Результатом будет что-то вроде:
result: [ 1692631422 1692631242 10000000000000 14019250477034344 ([1785726394745260293869629821187026920743160317479397166793665319642004602034 [1000001000000000 1966080 101184175721668699951755525112601793644527200681998252172335557711320252984635 87647878168491834245916094424296400596840187149190938906730361646994336065092]] [...
Здесь первые 4 поля связаны с выборами (
elect_at, elect_close, min_stake, total_stake
), затем идет список валидаторов, первое поле - идентификатор валидатора, а затем 4 связанных поля, третье - адрес управляющего кошелька.Например, здесь
1785726394745260293869629821187026920743160317479397166793665319642004602034
- это идентификатор валидатора или validator_pubkey, и101184175721668699951755525112601793644527200681998252172335557711320252984635
- это десятичное число, которое может идентифицировать кошелек. Если вы преобразуете его в шестнадцатеричное значение, а затем преобразуете в адрес TON (ton.org/address и добавляя '-1:'), тогда вы прибудете по адресу: kf_ftDbFY_gRWt2FkqVk68scKhuoniW6Po7GndTGdkCtO_2Z.