Membangun transaksi
Alur quote → plan → tanda tangan → tracking yang dipakai situs, tersedia juga untuk aplikasi Anda. Server tidak pernah menandatangani atau menyiarkan transaksi.
Alur
- 1.
POST /v1/quotes(headerIdempotency-Key8–128 karakter): server membaca on-chain, menghitung hasil, minimum, biaya, lalu mensimulasikan transaksi final dari wallet Anda. - 2. Bila
requiresApproval, kirim transaksiapprovals(izin sebesar jumlah transaksi) lalu minta quote lagi. - 3.
POST /v1/transaction-plansdenganquoteId→ transaksi unsigned{ id, to, data, value }. - 4. Tanda tangani & kirim dari wallet, lalu laporkan hash:
POST /v1/transactions/:id/submissions. - 5. Pantau
GET /v1/transactions/:id(submitted → confirmed → finalized / failed) atau terima event SSE/webhooktransaction.finalized.
Contoh: swap ETH → USDC di Base
ts
import { createWalletClient, http } from 'viem';
import { base } from 'viem/chains';
import { privateKeyToAccount } from 'viem/accounts';
const API = 'https://banipool.com/api/v1';
const ETH = '0x0000000000000000000000000000000000000000';
const USDC = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913';
const account = privateKeyToAccount(process.env.WALLET_PRIVATE_KEY as `0x${string}`);
const wallet = createWalletClient({ account, chain: base, transport: http() });
const auth = { authorization: `Bearer ${process.env.BANIPOOL_SESSION}`, 'content-type': 'application/json' };
// Rute terbaik (1–2 langkah)
const route = await fetch(`${API}/swap-routes`, { method: 'POST', headers: auth,
body: JSON.stringify({ chainRef: 'eip155:8453', tokenIn: ETH, tokenOut: USDC, amountIn: '1000000000000000' }) }).then((r) => r.json());
const [first, second] = route.data.steps;
// Quote (disimulasikan di mainnet dari wallet Anda)
const quote = await fetch(`${API}/quotes`, { method: 'POST',
headers: { ...auth, 'idempotency-key': crypto.randomUUID() },
body: JSON.stringify({ action: 'swap', deploymentId: first.deploymentId, poolAddress: first.poolAddress,
tokenIn: ETH, amountIn: '1000000000000000', unwrapNative: false, slippageBps: 100,
...(second ? { viaDeploymentId: second.deploymentId, viaPoolAddress: second.poolAddress } : {}) }) }).then((r) => r.json());
console.log('minimum:', quote.data.swap.minOut, 'fee platform:', quote.data.platformFee);
// Plan → tanda tangan → laporkan hash
const plan = await fetch(`${API}/transaction-plans`, { method: 'POST', headers: auth,
body: JSON.stringify({ quoteId: quote.data.id }) }).then((r) => r.json());
const hash = await wallet.sendTransaction({ to: plan.data.to, data: plan.data.data, value: BigInt(plan.data.value) });
await fetch(`${API}/transactions/${plan.data.id}/submissions`, { method: 'POST', headers: auth, body: JSON.stringify({ txHash: hash }) });Selalu tampilkan hasil minimum, biaya, dan alamat kontrak kepada pengguna sebelum menandatangani. Jangan pernah menaruh private key di frontend.
Aksi yang didukung
| Aksi | Keterangan |
|---|---|
swap | Tukar token lewat pool (1–2 langkah dalam satu transaksi). |
mint / add | Buat posisi baru atau tambah likuiditas ke posisi. |
mint + createPool | Buat pool baru sekaligus likuiditas pertama (createPool: true, initialPrice = token1 per token0; v4 juga tickSpacing). Cek dulu dengan GET /v1/pool-create/check. Zap In (bayar satu token): rencana dari POST /v1/pool-create/zap-plan, jalankan swap per langkah lalu mint dengan hasilnya. |
remove / claim | Tarik likuiditas (sebagian/semua) atau klaim fee. |
compound / rebalance | Tambahkan fee ke posisi, atau pindah ke rentang baru. |
stake / unstake | Aerodrome: stake posisi ke gauge untuk reward. |
Zap memakai endpoint rencana tersendiri: POST /v1/zap-in-contract-plans dan POST /v1/zap-out-contract-plans (satu transaksi lewat kontrak BaniZap), dengan respons berisi approvals, call, hasil minimum, dan platformFee.
Bridge lewat API
bash
# Rute tersedia
curl -s https://banipool.com/api/v1/bridge/routes | jq '.data[] | {symbol, fromChainRef, toChainRef}'
# Kuota (sesi wallet; Idempotency-Key wajib) → transaction + approvals
curl -s -X POST https://banipool.com/api/v1/bridge/quotes \
-H "authorization: Bearer $BANIPOOL_SESSION" -H "idempotency-key: $(uuidgen)" \
-H "content-type: application/json" \
-d '{"fromChainRef":"eip155:8453","toChainRef":"eip155:1","symbol":"USDC","amount":"5000000"}'
# Setelah transaksi dikirim: daftarkan untuk dilacak sampai completed
curl -s -X POST https://banipool.com/api/v1/bridge/transfers -H "authorization: Bearer $BANIPOOL_SESSION" \
-H "content-type: application/json" -d '{"quoteId":"<id kuota>","txHash":"0x…"}'