Custody-адрес и ключи приложений
Здесь участвуют ключи двух видов. Custody-адрес владеет вашим fid. Ключ приложения подписывает ваши
повседневные сообщения: касты, реакции, подписки. casty использует custody-адрес один раз, чтобы добавить ключ
приложения, и хранит только ключ приложения. Custody подписывает либо в кошельке, со страницы
(Кошельки и ключи), либо в терминале, по seed-фразе, которую спрашивает casty init.
Custody-адрес
Заголовок раздела «Custody-адрес»Это аккаунт Ethereum, выведенный из вашей seed-фразы. Он может добавлять и удалять ключи приложений и
переносить fid, поэтому casty никогда его не хранит: casty init читает фразу, подписывает один запрос и
обнуляет фразу. casty key revoke спрашивает её снова, потому что удаление ключа custody-адресом
требует новой подписи.
Ключ приложения
Заголовок раздела «Ключ приложения»Ключ Ed25519, который casty генерирует на вашей машине. Он подписывает сообщения для вашего fid, и ноды принимают их, пока ключ зарегистрирован и не истёк.
Начиная с версии движка 16, Snapchain регистрирует такие ключи сообщением KEY_ADD вместо
ончейн-транзакции: без газа, и ключ можно использовать, как только сообщение сольётся. casty собирает
его с помощью функций makeKeyAddBody и makeKeyAdd из @farcaster/core. См.
writing messages в документации
Snapchain. Старые руководства, в том числе пример hello-world в hub-monorepo, до сих пор добавляют ключ транзакцией в контракт KeyGateway в OP Mainnet: это стоит газа и требует кошелька с ETH и RPC, и casty этот путь не использует.
KEY_ADD несёт три подписи:
- подпись запрашивающего приложения над запросом ключа, сделанную custody-адресом fid приложения
(
--app-fid, по умолчанию ваш собственный fid); - подпись custody-адреса над ключом, его scopes, сроком жизни, nonce и дедлайном;
- конверт сообщения, подписанный самим новым ключом, что доказывает, что у casty есть его приватная половина.
Nonce свой для каждого fid и должен расти с каждым изменением ключей: casty читает текущий с
ноды и прибавляет 1. Если первым проходит другое изменение, нода отвергает сообщение, и casty init
один раз повторяет попытку с новым nonce.
Ключ без газа перечисляет типы сообщений, которые он может подписывать. По умолчанию casty запрашивает эти:
Имя в --scopes |
Типы сообщений |
|---|---|
cast |
CAST_ADD, CAST_REMOVE |
reaction |
REACTION_ADD, REACTION_REMOVE |
link |
LINK_ADD, LINK_REMOVE |
user-data (USER_DATA_ADD, ваш профиль) добавляется, только если вы его запросите. KEY_ADD и
KEY_REMOVE никогда не могут входить в scopes ключа, поэтому ключ приложения не может добавлять ключи или удалять другие
ключи; он может удалить только себя.
Срок жизни
Заголовок раздела «Срок жизни»--ttl задаёт, сколько ключ живёт без использования: по умолчанию 30 дней, не больше 90. Каждое сообщение,
которое подписал ключ и которое слилось, начинает срок заново, так что ключ, которым вы пользуетесь, не истекает. casty init
печатает дату, когда он истечёт, если им не пользоваться. У fid может быть не больше 1000 активных ключей без газа.
Какое приложение опубликовало каст
Заголовок раздела «Какое приложение опубликовало каст»Каждый ключ записывает fid приложения, которое его запросило. Каст несёт публичный ключ, который его
подписал, так что лента может сказать, из какого приложения он пришёл: casty ищет подписавший ключ в списке
ключей автора, берёт запросивший fid и показывает имя пользователя этого fid после via. --only-app и
--exclude-app фильтруют по нему, а casty clients --fid <fid> перечисляет ключи любого аккаунта с их
приложениями. Ключи, добавленные ончейн, несут такой же запрос, и casty читает их так же.
Удаление ключа
Заголовок раздела «Удаление ключа»| Команда | Кем подписано | Что нужно |
|---|---|---|
casty key revoke <key> |
custody-адресом | seed-фраза |
casty key revoke <key> --self |
самим ключом приложения | ключ в хранилище casty |
Обе отправляют KEY_REMOVE и ждут, пока нода не перестанет показывать ключ. Ключи, добавленные ончейн,
удаляются ончейн, в контракте KeyRegistry; casty этого не делает.