Как создать адрес записи для цепочек субстратов, таких как Polkadot или Kusama?

Я хочу сгенерировать адрес без ключа, чтобы он мог служить адресом записи - адресом, на который можно отправлять токены и никогда не извлекать их. Как мне его создать?

2 ответа

Решение

Вы можете использовать подмодуль связки ключей PolkadotJS:

const { encodeAddress } = require('@polkadot/keyring');

const zero = '0x' + '00'.repeat(32);
const output = encodeAddress(zero, 2);

console.log(output.toString());

Это выводит: CaKWz5omakTK7ovp4m3koXrHyHb7NG3Nt7GENHbviByZpKp который является адресом Кусамы (из-за 2 в encodeAddress выше), который никогда не может быть разблокирован - для открытого ключа нет закрытого ключа 0x0.

В качестве альтернативы, encodeAddress(new Uint8Array(32)) также работает - u8a инициализируется нулями, а для случайных адресов вы можете использовать encodeAddress(randomAsU8a()).

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

В противном случае более технический способ сжигания средств, учитывая текущую реализацию модуля "Балансы", заключался бы в использовании преимуществ экзистенциальной логики депозита.

В основном, если на счете есть средства меньше, чем экзистенциальный депозит, эти средства буквально сжигаются, и "общий выпуск" в цепочке сокращается правильно. Все, что вам нужно, как пользователю с некоторыми средствами, - это совершать множество микротранзакций, отправляя средства, меньшие, чем существующий депозит, на пустой счет. Каждый из этих переводов приведет к тому, что баланс системы будет действительно уничтожен.

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