2. Установка клиента
./scripts/2-client.shЧто он делает
Заголовок раздела «Что он делает»- Скачивает
casty-<os>-<arch>из последнего GitHub-релиза проекта, сверяет его sha256 сSHA256SUMS, опубликованным рядом, и ставит его как./bin/casty: один файл размером около 77 МБ на macOS и 97 МБ на Linux, внутри которого клиент, его зависимости и веб-страница, собранный с помощью bun. Ему не нужен Node.js.THIRD_PARTY_LICENSESрядом с ним называет каждый пакет внутри файла с его лицензией. Релизы собираются для linux-x64, linux-arm64 и darwin-arm64; на любой другой машине или с--from-sourceскрипт вместо этого проверяет наличие Node.js 22.12 или новее, ставит зависимости клиента из lock-файла с помощью pnpm через corepack (Node 25 и новее больше не включают corepack;npm install -g corepack), собирает клиент и пишет./bin/castyкак обёртку, которая запускает его через Node. - Запускает
casty doctorпротивhttp://127.0.0.1:3381. Если никто не отвечает, он останавливается с кодом выхода 4 и говорит открыть туннель. - Запускает
casty init --fid <fid>с--fid, иначеcasty init, который спрашивает вашу seed-фразу. Этот шаг пропускается, когда у casty уже есть ключ, который нода показывает для вашего fid, так что повторный запуск скрипта никогда не добавляет второй ключ. - Печатает вашу ленту и несколько команд, которые стоит попробовать; после
--fid— как добавить ключ вcasty webвашим кошельком.
--node <url> направляет его на другую ноду. --no-init останавливается после casty doctor. Всё, что после
--, передаётся в casty init, например ./scripts/2-client.sh -- --address-index 1.
CASTY_RELEASE_URL задаёт другое место для скачивания, для форка или зеркала. Когда скачивать
нечего, для клона, который никогда не выпускался, или без соединения, скрипт об этом сообщает и
сам собирает casty из исходников, как сделал бы --from-source.
casty init
Заголовок раздела «casty init»Seed-фраза управляет всем аккаунтом. Для этого руководства используйте тестовый аккаунт, вставляйте
seed-фразу только в программы разработчиков, которым доверяете, и предпочитайте ключ, одобренный вашим
кошельком: casty init --fid <fid>, затем casty web и в разделе о вас «add a key with your wallet».
Вашим кошельком: ./bin/casty init --fid <fid> пишет конфиг по данным ноды, включая custody-адрес,
и не создаёт ключа; затем ./bin/casty web добавляет его кошельком в
браузере (В браузере и на телефоне).
Seed-фразой: casty init спрашивает пароль для хранилища ключей, в первый раз дважды,
затем печатает предупреждение выше и спрашивает вашу seed-фразу. Ни то, ни другое не отображается при вводе.
A seed phrase controls the whole account. Use a test account to try casty, and paste a seedphrase only into software from developers you trust. Prefer a key authorised by your wallet:casty init --fid <fid>, then casty web and, under you, "add a key with your wallet".custody address 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266 holds fid 2000000001the custody address signs one KEY_ADD message, and only this: fid 2000000001 new app key 0x4224ff3035db6350cfae06e0ad54b79d98a6bbcb962488e0c090c24bd54e6190 may sign cast, reaction, link lapses 30 days after its last use requested by fid 2000000001, this accountadding a gasless app key (no transaction, no gas)fid 2000000001custody 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266app key 0x4224ff3035db6350cfae06e0ad54b79d98a6bbcb962488e0c090c24bd54e6190scopes cast, reaction, linkexpires 2026-11-17, after 30 days without usenext: casty feed, then casty cast "hello from my own node"Этот запуск использовал тестовую фразу против mock-ноды; ваш покажет ваш адрес и fid. По порядку casty:
- выводит custody-адрес с индексом 0 из seed-фразы (
--address-indexвыбирает другой); - спрашивает ноду, каким fid владеет этот адрес;
- отказывается работать с fid без storage unit, поскольку сеть не приняла бы его сообщения;
- создаёт новый ключ Ed25519 и даёт custody-адресу подписать запрос на него;
- сохраняет ключ зашифрованным вместе с подписанным сообщением
KEY_ADDи отправляет это сообщение на вашу ноду; - ждёт, пока нода не покажет ключ, затем удаляет сохранённое сообщение.
Seed-фраза никогда не записывается на диск. Ключ может подписывать касты, реакции и подписки; добавьте
--scopes cast,reaction,link,user-data, если он должен ещё и менять ваш профиль. Он истекает после 30
дней без использования (--ttl, не больше 90d), и каждое подписанное им сообщение продлевает этот срок.
Custody-адрес и ключи приложений объясняет запрос.
Если нода принимает ключ, но casty перестаёт ждать до того, как он появится, ключ сохраняется. Повторный запуск
casty init отправляет то же подписанное сообщение ещё раз, и seed-фраза для этого не нужна.
Если нода ещё не знает ваш адрес, потому что всё ещё синхронизируется, --op-rpc <url> вместо этого читает
fid из контракта IdRegistry в OP Mainnet.
casty mentions перечисляет, что вам написали другие: касты, в которых вас упоминают, и ответы на ваши
последние 25 кастов, с номерами, как в ленте, так что casty reply 1 "thanks" отвечает на первый.
casty thread 2 показывает второй каст последнего списка вместе с кастом, на который он отвечает, и
ответами на него, старые сначала, снова с номерами, так что casty like 3 ставит лайк первому ответу.
$ casty feed --limit 31 @casty-test · 1s · via casty hello from casty
2 @user-2000000002 · 17d · via app-alpha @casty-test thanks for the pointer, it worked. https://example.com/2000000002/3
3 @user-2000000011 · 17d · via app-beta Reading the Snapchain docs on a train. A good way to spend an hour.Лента — это ваши собственные касты и касты аккаунтов, на которые вы подписаны, новые сначала. Каждый каст показывает
автора, возраст, приложение, через которое он опубликован, на что он отвечает и в каком канале находится. via
называет приложение, которое запросило ключ, подписавший каст; список ключей и приложений для любого
fid выдаёт casty clients --fid <fid>.
| Флаг | Показывает |
|---|---|
--limit 20 |
не больше 20 кастов (по умолчанию 50) |
--since 24h |
касты новее заданной длительности: 45m, 24h, 7d |
--no-replies |
без ответов |
--channel /name |
касты одного канала, названного так, как его показывает лента, или по его родительскому URL |
--only-app <name|fid> |
только касты, опубликованные через это приложение; можно повторять |
--exclude-app <name|fid> |
всё, кроме кастов, опубликованных через это приложение; можно повторять |
--fids 2,@alice |
эти аккаунты вместо ваших подписок, по fid или @name |
casty читает не больше --limit кастов (до 100) с каждого аккаунта, сначала пять, а больше только
там, где они могут оказаться среди новейших, поэтому фильтр может вернуть меньше кастов, чем --limit.
./bin/casty cast "hello from my own node"./bin/casty reply 2 "agreed"./bin/casty like 2./bin/casty recast 2./bin/casty delete 1./bin/casty follow @nameНомер — это позиция каста в последнем показанном списке, от casty feed, casty mentions,
casty thread или casty web. Каст можно указать и как
<fid>:<0x hash> или ссылкой на farcaster.xyz, которую печатает casty cast. Каст вмещает до 320 байт
или до 1024 как длинный каст, который casty выбирает сам.
casty cast "text" --channel /name публикует в канал. Имени канала на ноде нет,
только его родительский URL, поэтому casty принимает /name, когда напечатанный им список уже показал каст в этом
канале, а сам родительский URL — в любое время.
casty cast "gm @alice" упоминает alice: её приложение показывает каст среди её уведомлений. casty
ищет каждое @name так же, как follow, на вашей ноде, а затем в публичном реестре fname
(--no-allow-fname-server ограничивает поиск нодой), и вынимает его из текста вместе с её fid и
местом, где оно стояло: так передаются упоминания. Имя, которое никому не принадлежит, уходит как текст, и casty
об этом сообщает; --no-mentions отправляет каждое @name как текст. Каст упоминает не больше 10 аккаунтов.
Каждая запись ждёт, пока у ноды не появится сообщение, поскольку read-нода только передаёт его дальше. Read-ноды и валидаторы рассказывает, сколько casty ждёт и что делает, когда сообщение не появляется.
Где casty хранит свои файлы
Заголовок раздела «Где casty хранит свои файлы»В ~/.config/casty, или $XDG_CONFIG_HOME/casty, или в каталоге, заданном через --config:
| Файл | Что |
|---|---|
config.json |
ваш fid, custody-адрес и публичные половины ключей приложений casty |
keys.enc.json |
ключи приложений, зашифрованные вашим паролем (scrypt, XChaCha20-Poly1305), режим 0600 |
last-feed.json |
касты, пронумерованные последним показанным списком, для casty like 2 и подобного |
web-token |
токен, который связывает браузер с casty web, режим 0600 |
cache/ |
списки подписок, метки приложений и имена пользователей, чтобы следующая лента меньше спрашивала ноду, каналы, которые показывали списки, и новейшее показанное вам упоминание, для счётчика в casty web |
Команды, которые только читают, никогда не спрашивают пароль. Чтобы набирать casty вместо ./bin/casty:
ln -s "$PWD/bin/casty" ~/.local/bin/casty--json у любой команды печатает её результат как JSON, а --quiet убирает заметки о ходе работы.
Usage: 2-client.sh [--node <url>] [--fid <fid>] [--from-source] [--no-init] [-- <casty init options>]
--node <url> the node's HTTP API (default: http://127.0.0.1:3381, the tunnel from step 1); any Snapchain node will do, and casty remembers it for later commands --fid <fid> no seed phrase: casty init --fid, then add the key in casty web with your wallet --from-source build casty here with Node 22.12 or newer and pnpm, instead of downloading it --no-init stop after casty doctor; run ./bin/casty init yourself later -- <options> passed to casty init, e.g. -- --address-index 1
Without --fid, casty init asks for your seed phrase. Use a test account for this.
The download is casty-<os>-<arch> and SHA256SUMS from CASTY_RELEASE_URL, by default thisproject's latest GitHub release, which has linux-x64, linux-arm64 and darwin-arm64.
Exit codes: 0 ok, 2 bad arguments, 3 missing prerequisite, 4 node unreachable or no good download,5 key problem.Usage: casty [options] [command]
Read and write Farcaster through your own Snapchain node.
Options: --node <url> node HTTP API; casty init remembers the one it is given (default: "http://127.0.0.1:3381") --json print results as JSON --config <dir> config directory (default: $XDG_CONFIG_HOME/casty) --quiet print results only, no progress notes -h, --help display help for command
Set up: doctor check the node, its sync, the local clock and the local setup init [options] add a gasless app key for your fid: with --fid and your wallet in casty web, or from your seed phrase whoami your fid, username, custody address, active app key and storage key your app keys
Read: feed [options] newest casts from you and the accounts you follow, read from your node mentions [options] casts that mention you and replies to your casts, newest first thread <cast> a cast with what it answers and its replies, numbered as the feed is clients [options] the app keys of a fid and which app requested each storage [options] storage units and how full each message store is node about the node itself
Write: cast [options] <text> publish a cast (up to 320 bytes, or 1024 as a long cast) reply [options] <cast> <text> reply to a cast; same as cast --reply delete <cast> delete one of your casts like <cast> like a cast unlike <cast> take a like back recast <cast> recast a cast to your followers unrecast <cast> take a recast back follow [options] <fid|@name> follow an account unfollow [options] <fid|@name> stop following an account
In a browser: web [options] the feed, threads and a compose box in a browser, on this machine or a phone serve [options] the page over an index of the feed, with push; on the node's host behind HTTPS, which 1-node.sh serve installs
Commands: help [command] display help for command
Examples: casty feed --since 24h --no-replies casty feed --exclude-app <name> leave out casts posted through one app casty like 2 the second cast of the last casty feed casty reply 2 "agreed" casty follow @name casty web the feed in your browser, or on your phone