Para desenvolvedores / SENDIT

O SENDIT para desenvolvedores

O SENDIT é um conjunto de contratos na Pickle Chain em torno de um banco, mais duas APIs de leitura. Tudo o que um trader faz é uma transação que você mesmo pode enviar, de uma carteira ou de uma chave de negociação registrada.

As peças

O SENDIT roda na rede de teste pública (chain ID 78270). O app e as APIs são servidos a partir de https://sendit.picklechain.xyz; o JSON-RPC é o da cadeia, em https://rpc.picklechain.xyz.

Ler o manifesto

Leia os endereços em tempo de execução. Uma atualização do motor implanta contratos novos ao lado dos antigos e move todas as chaves, e uma chamada a um endereço sem código tem sucesso em uma EVM, então um endereço fixo no código que ficou desatualizado falha em silêncio.

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());

Chaves do manifesto

ChaveTipo
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 não está no manifesto: leia idBase() no motor.

Endereços atuais

Como servidos em 2026-10-20. Confira-os com o manifesto; não os fixe no código.

ChaveEndereço
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

Ids e motores anteriores

O motor atual numera as posições a partir de idBase() + 1, 10.000.001, e o seu livro de ordens numera os pedidos a partir da mesma base, então um id designa uma única posição ou pedido em toda a cadeia, seja qual for o motor que o guarda. O motor anterior (VERSION 1, em perpsPrevious) numera a partir de 1, é anterior ao banco e só aceita assinatura pela carteira: as posições ainda abertas lá são fechadas com o próprio close dele, a partir da carteira que as abriu. O dex-api marca toda linha vinda dele com legacy: true.

Uma chave ausente significa que o recurso está desligado

O manifesto é a única fonte de verdade que o próprio app usa. Se uma chave estiver ausente (nenhum banco em uma rede, nenhuma casa de câmbio ainda), o recurso está desligado ali; o /api/perp/deployment omite o campo.