Как создать адрес записи для цепочек субстратов, таких как 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())
.
Вместо того, чтобы отправлять ваши токены на произвольную учетную запись, я бы предложил вместо этого отправить ваши средства на адрес казначейства (если он есть в вашей цепочке субстратов).
В противном случае более технический способ сжигания средств, учитывая текущую реализацию модуля "Балансы", заключался бы в использовании преимуществ экзистенциальной логики депозита.
В основном, если на счете есть средства меньше, чем экзистенциальный депозит, эти средства буквально сжигаются, и "общий выпуск" в цепочке сокращается правильно. Все, что вам нужно, как пользователю с некоторыми средствами, - это совершать множество микротранзакций, отправляя средства, меньшие, чем существующий депозит, на пустой счет. Каждый из этих переводов приведет к тому, что баланс системы будет действительно уничтожен.