Для разработчиков / SENDIT

SENDIT для разработчиков

SENDIT - это набор контрактов в Pickle Chain вокруг одного банка плюс два API для чтения. Всё, что делает трейдер, - это транзакция, которую вы можете отправить сами, с кошелька или с зарегистрированного торгового ключа.

Составные части

SENDIT работает в публичной тестовой сети (chain ID 78270). Приложение и API отдаются с https://sendit.picklechain.xyz; JSON-RPC принадлежит сети, по адресу https://rpc.picklechain.xyz.

Чтение манифеста

Читайте адреса во время работы. Обновление движка разворачивает новые контракты рядом со старыми и меняет все ключи, а вызов адреса без кода в EVM завершается успешно, поэтому зашитый в код адрес, который устарел, ломается молча.

JavaScript
const ORIGIN = "https://sendit.picklechain.xyz";

// The deployment, as the app itself reads it. Never cached (Cache-Control: no-store).
const manifest = await fetch(`${ORIGIN}/op-deployment/l2-perps.json`).then((r) => r.json());

const { bank, perps, perpOrders, perpVault, spotRouter, copyFactory, pusd, pusdExchange } = manifest;

// Or the same addresses, lower-cased and renamed, from the API:
// { engine, orders, vault, previous, bank, spotRouter, pusdExchange }
const deployment = await fetch(`${ORIGIN}/api/perp/deployment`).then((r) => r.json());

Ключи манифеста

КлючТип
perpsaddressThe perps engine, PepperPerps VERSION 3. /api/perp/deployment calls it `engine`.
perpOrdersaddressThe two-step orders book, PepperPerpOrders. `orders` in /api/perp/deployment.
perpVaultaddressThe LP vault, PepperPerpVault (pLP). `vault` in /api/perp/deployment.
bankaddressSenditBank: every trader's pUSD, ETH and launched tokens, and the trading keys.
spotRouteraddressSenditSpotRouter: buy, sell and launch tokens with bank money.
copyFactoryaddressCopyFactory VERSION 3: one CopyAccount per copier and leader.
copyAccountImpladdressThe CopyAccount implementation every copy account clones (EIP-1167).
pusdaddressPickleUSD (pUSD), six decimals. The test dollar every position is margined in.
pusdExchangeaddressSenditPusdExchange: pUSD for ETH at one dollar.
perpsPreviousarrayEngines that still hold positions: [{ engine, orders, vault, block, version }]. Legacy positions there are closed by the wallet.
copyFactoryPreviousarrayEarlier copy factories: [{ factory, impl, block, version, engine }]. Stop and withdraw old copies there.
perpsBlock, bankBlock, copyFactoryBlock, pusdExchangeBlocknumberThe block each contract was deployed in: where an indexer starts reading logs.
pusdWethPool, feeRecipient, keeperaddressThe pool the protocol's fee share is sold through, the FeeRouter that receives it, and the keeper's wallet.

idBase в манифесте нет: читайте idBase() у движка.

Текущие адреса

В том виде, в каком они отдавались на 2026-10-20. Сверяйте их с манифестом; не зашивайте их в код.

КлючАдрес
bank0x3366f560DC1539B5Db4f889CB603C3BDd369298F
perps0x57c61D24BaE12D24100ac1FB20950B88904be971VERSION 3, idBase() 10000000: position and request ids start at 10,000,001
perpOrders0xcb62fcb714f8aa69d2b2abC8Ba9cCEF2A1E02C84
perpVault0x20F4E42E5f56E47e6e058fA137c698C86B0aF459
spotRouter0xD6516A4720018AFa6c777F2D686247d715EDa04B
copyFactory0xf288A5F90Ea3b07b014f52110FC4C7f82206dd95
pusd0x47091c58e34bDC4f32A05541C1243710249Dd777
pusdExchange0x07b5E6fd6b5A86FBE3685B434988D3b5aFB4385F
perpsPrevious[0].engine0x8452242B9d7C453556E3a9b0556e48a25ced0ef2VERSION 1, ids from 1, wallet-signed only

Идентификаторы и прежние движки

Текущий движок нумерует позиции начиная с idBase() + 1, то есть с 10,000,001, а его книга ордеров нумерует запросы от той же базы, так что идентификатор обозначает одну позицию или один запрос во всей сети, в каком бы движке они ни находились. Прежний движок (VERSION 1, в perpsPrevious) нумерует с 1, появился раньше банка и работает только с подписью кошелька: позиции, всё ещё открытые там, закрываются его собственным close с того кошелька, который их открыл. dex-api помечает каждую строку из него как legacy: true.

Отсутствующий ключ означает, что функция выключена

Манифест - единственный источник истины, которым пользуется само приложение. Если ключа нет (в сети нет банка, обменника ещё нет), функция там выключена; /api/perp/deployment просто опускает это поле.