Skip to main content
Glama

Ryntra Solana Evidence Kit

Читайте, что Solana-актив может вам сделать, предварительно просматривайте, что именно сделает перевод, и проверяйте квитанцию, не спрашивая сторону, которая её выписала.

Apache-2.0. Только для чтения по построению: никакого ключа, никакого пути подписания, никакого построения транзакций и один метод RPC — getAccountInfo. Тест перечисляет каждый вызов RPC и каждый идентификатор, похожий на подпись, в поставляемых исходниках при каждом запуске, так что это предложение — скорее шлюз, чем обещание.

npm ci
npm run verify        # lint, typecheck, network-free tests, boundary gate
npm run cli -- inspect 2b1kV6DkPAnxd5ixfnxCpjxmKwqjjaYmCZfHsFu24GXo

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

Почему

Mint Token Extensions может нести полномочия, которые баланс вам не показывает. Постоянный делегат позволяет эмитенту перемещать или сжигать токены с любого аккаунта. Хук перевода запускает чужую программу при каждом переводе. Комиссия за перевод означает, что получатель получает меньше, чем было отправлено. Состояние аккаунта по умолчанию заморожено означает, что получение токена — это не то же самое, что возможность его переместить.

Ничего из этого не скрыто — это в цепочке, в mint-аккаунте, декодируемо кем угодно. Просто это не читается большинством того, на что люди нажимают кнопки.

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

Related MCP server: Solana Debug MCP

Три инструмента

flowchart LR
  RPC[("Solana JSON-RPC<br/>getAccountInfo")]
  MINT["mint account bytes"]

  RPC --> MINT
  MINT --> P["<b>inspect_solana_mint</b><br/>Asset Passport<br/>identity · authorities<br/>extensions with provenance"]
  P --> F["<b>preflight_solana_action</b><br/>exact preview<br/>fee math · resolved hook<br/>expected balance deltas"]
  POL["owner policy<br/>13 declared dials"] --> V["policy verdict<br/>13 findings"]
  F --> V
  R[("Outcome Receipt<br/>JSON")] --> VR["<b>verify_solana_receipt</b><br/>schema · integrity<br/>issuer · binding"]

  classDef tool fill:#101418,stroke:#4c8bf5,color:#e8eef6
  classDef data fill:#0d1117,stroke:#3d444d,color:#c9d1d9
  class P,F,V,VR tool
  class RPC,MINT,POL,R data

Что отвечает

Обращается к сети

inspect_solana_mint

Что это за актив, и что его эмитент может сделать держателю

да, одно чтение

preflight_solana_action

Что сделает именно этот перевод, и как моя политика его оценивает

да, одно чтение

verify_solana_receipt

Цела ли эта квитанция, кто её подписал, и относится ли она к Solana

нет — полностью локально

Каждый доступен тремя способами: как типизированный вызов SDK, как инструмент MCP и из CLI.

Структура

lib/solana/          the evidence core — decoding, passport, preflight, policy, receipt
lib/agent-control/   the frozen canonical hashing and the Solana registry adapter
lib/guard/           the one canonical JSON serializer both hashers use
packages/solana-evidence-sdk/   typed calls over the core
packages/solana-evidence-mcp/   local stdio MCP server
examples/solana-evidence-cli/   the runnable CLI
docs/solana/schemas/            published JSON Schemas for non-JS consumers

lib/ — это не копия. Это те же модули, которые запускает ryntra.io, извлечённые с сохранением путей — так что результат из этого набора и результат из продукта исходят из одного кода, и извлечение, нарушающее это, проваливает собственные тесты. lib/stellar/evidence.ts здесь по той же причине и никакой другой: конверт доказательств не зависит от цепочки, и поставка одной реализации лучше, чем поставка копии, которая расходится. lib/solana/evidence.ts сообщает об этом там, где вы с ним встречаетесь.

Правила проектирования и их цена

Каждый факт несёт информацию о том, как он известен. ONCHAIN_VERIFIED, DECLARED, DERIVED, CONFLICTING, UNKNOWN, UNSUPPORTED. Значение без источника здесь не является значением. Цена — многословность, и она того стоит: маркетинг самого эмитента и чтение реестра никогда не должны носить один и тот же значок.

Предложение описывает обстановку, а не слот. Mint, несущий TransferHook с нулевым идентификатором программы, не имеет установленного хука — паспорт говорит об этом и говорит, кто может его установить. Общее предложение было бы ложным для единственного наиболее проверяемого mint Token Extensions.

Суммы — это сырые базовые единицы в виде строк. 64-битная сумма не переживёт число JavaScript, а потерянная сумма — это неверная сумма. Никаких десятичных знаков на пути значений.

Расширение, для которого никто не написал семантики, всё равно отображается, с пометкой и сырым видом. Декодированный факт без красивого предложения всё равно остаётся фактом; скрывать его было бы ложью.

Ничего не выбрасывает исключений. Отказы — это значения с кодом и причиной — ACCOUNT_NOT_FOUND, NOT_A_MINT, DECODE_FAILED. «Нет ответа» и «этот ответ» не должны выглядеть одинаково.

Повторы покрывают транспорт, но никогда не ответ. Ответ, который разбирается, возвращается как есть, включая «нет аккаунта», потому что повторный запрос не меняет факты.

Квитанции

Квитанция результата Ryntra — это наблюдение за тем, что уже произошло — никогда не инструкция и никогда не доказательство того, что это сделала Ryntra. verify_solana_receipt пересчитывает оба хеша из собственных байтов квитанции и проверяет подпись Ed25519 по ключу, который несёт квитанция. Четыре оси, отчитываемые отдельно:

  • схема — имеет ли это вообще форму квитанции;

  • целостность — пересчитываются ли оба хеша;

  • эмитент — корректна ли подпись; и, только если вы передаёте trustedPublicKeys, является ли ключ тем, которому вы доверяете;

  • привязка — указывает ли имя реестра на адаптер Solana.

«Подписано кем-то» — это не «подписано Ryntra», и объединение их — это ошибка, для предотвращения которой существует эта ось. lib/solana/fixtures/receipt-*.json — это реальные артефакты, с которыми вы можете это запустить, включая тот, который является подписанным с одним изменённым символом.

Граница доверия

  • Некастодиальный и без ключей. Никакой ключ не хранится, не читается, не извлекается и не запрашивается. Нет пути подписания, и пограничный шлюз проваливает сборку, если такой появляется.

  • Ничего не выполняется. Никакая транзакция не строится и не отправляется.

  • Заключение — это не оценка безопасности. Оно сообщает об отсутствии известных блокировок в рамках политики, объявленной вызывающим, и в словаре заключений нет слова для безопасности.

  • Конечная точка — это выбор оператора. Ни один инструмент или вызов SDK не принимает URL от вызывающего; конечные точки провайдера берутся из RYNTRA_SOLANA_RPC_MAINNET и RYNTRA_SOLANA_RPC_DEVNET, а публичные значения по умолчанию работают без аккаунта.

  • Распространяется с исходниками. Корневой пакет является private, поэтому случайный npm publish отказывает. Никакой npm-пакет не заявлен.

Ссылки

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • Ask what you can't be sure of. Read-only checks on tokens, NFTs, wallets and contracts.

  • Read-only crypto safety: token honeypot checks, EIP-712 signature decode, approval scans.

  • Solana on-chain intelligence — token scans, wallet profiling, bundle detection, 19 MCP tools.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ryntra-io/ryntra-solana-evidence'

If you have feedback or need assistance with the MCP directory API, please join our Discord server