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 SenditBank guarda o pUSD, o ETH e os tokens lançados de cada conta, e as chaves de negociação dela. Todo outro contrato é um venue que debita o banco com
pulle o credita compush. - O motor de perps (PepperPerps VERSION 3), o seu livro de ordens para mercados em dois passos e gatilhos, e o cofre de LP.
- O roteador spot, a casa de câmbio de pUSD e o copy trading, além do próprio pUSD.
- As APIs HTTP: o dex-api para mercados, posições, saldos, o feed e os tokens; o social-api para as sessões.
- Construir um bot junta tudo isso.
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.
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
| Chave | Tipo |
|---|---|
| perps | addressThe perps engine, PepperPerps VERSION 3. /api/perp/deployment calls it `engine`. |
| perpOrders | addressThe two-step orders book, PepperPerpOrders. `orders` in /api/perp/deployment. |
| perpVault | addressThe LP vault, PepperPerpVault (pLP). `vault` in /api/perp/deployment. |
| bank | addressSenditBank: every trader's pUSD, ETH and launched tokens, and the trading keys. |
| spotRouter | addressSenditSpotRouter: buy, sell and launch tokens with bank money. |
| copyFactory | addressCopyFactory VERSION 3: one CopyAccount per copier and leader. |
| copyAccountImpl | addressThe CopyAccount implementation every copy account clones (EIP-1167). |
| pusd | addressPickleUSD (pUSD), six decimals. The test dollar every position is margined in. |
| pusdExchange | addressSenditPusdExchange: pUSD for ETH at one dollar. |
| perpsPrevious | arrayEngines that still hold positions: [{ engine, orders, vault, block, version }]. Legacy positions there are closed by the wallet. |
| copyFactoryPrevious | arrayEarlier copy factories: [{ factory, impl, block, version, engine }]. Stop and withdraw old copies there. |
| perpsBlock, bankBlock, copyFactoryBlock, pusdExchangeBlock | numberThe block each contract was deployed in: where an indexer starts reading logs. |
| pusdWethPool, feeRecipient, keeper | addressThe 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.
| Chave | Endereço |
|---|---|
| bank | 0x3366f560DC1539B5Db4f889CB603C3BDd369298F |
| perps | 0x57c61D24BaE12D24100ac1FB20950B88904be971VERSION 3, idBase() 10000000: position and request ids start at 10,000,001 |
| perpOrders | 0xcb62fcb714f8aa69d2b2abC8Ba9cCEF2A1E02C84 |
| perpVault | 0x20F4E42E5f56E47e6e058fA137c698C86B0aF459 |
| spotRouter | 0xD6516A4720018AFa6c777F2D686247d715EDa04B |
| copyFactory | 0xf288A5F90Ea3b07b014f52110FC4C7f82206dd95 |
| pusd | 0x47091c58e34bDC4f32A05541C1243710249Dd777 |
| pusdExchange | 0x07b5E6fd6b5A86FBE3685B434988D3b5aFB4385F |
| perpsPrevious[0].engine | 0x8452242B9d7C453556E3a9b0556e48a25ced0ef2VERSION 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.
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.