Documentation

How Makero actually behaves.

Protocol, verified rather than remembered

Makero uses the official Pump.fun SDKs: @pump-fun/pump-sdk and @pump-fun/pump-swap-sdk, on top of @solana/web3.js v1 and Anchor 0.31. That web3.js version is dictated by the SDK itself, not chosen by us.

⚠ Bonding curve trade instructions are currently v3: buy_v3, sell_v3, buy_exact_quote_in_v3, each with 17 accounts in a fixed order. v2 still works and may be mixed on the same token, so it is not deprecated, but new code uses v3. Token creation remains create_v2.

bonding curve 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P · AMM pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA

Creator rewards, and why they are permanent

Creator fee sharing is created on chain in four steps: create_fee_sharing_config → update_fee_shares_v2 → transfer_creator_fees_to_pump_v2 → distribute_creator_fees_v2.

⚠ The second step may only ever run once. After it, admin is revoked and the recipient list cannot be changed by anyone, permanently. Protocol limits: at most 10 recipients, no duplicates, every share above zero, and the shares summing to exactly 10,000 bps.

⚠ The creator share never passes through the Makero treasury. The protocol pays every recipient directly on chain. That removes custody risk for rewards entirely, and it also means those rewards are not automatically available as capital for the trading engine.

Money, in integers

Not one authoritative number in Makero is a number. Lamports and token units are bigint; money columns in Postgres are NUMERIC(40,0), not bigint, because Postgres bigint is an i64 while a Solana balance is a u64, twice the range.

⚠ A price is a ratio, not a decimal. It is stored as two integers (price_quote, price_base) and only turned into a decimal at the display boundary. Two prices one lamport apart at large magnitudes are treated as exactly equal by a float, and a strategy trigger that reads “buy if it drops 5%” will miss because of it.

The ledger is double-entry: every movement of money is a set of lines summing to zero, and the database refuses an unbalanced journal. Idempotency belongs to the database too: a journal with the same key cannot be written twice, so a worker that retries after a crash cannot double-credit.

Security, and what is deliberately still shut

Signing in to Makero means signing a single-use message that is bound to its purpose: a nonce issued for “login” cannot be reused for “withdraw”. The withdrawal destination is pinned to the owner when the maker is created and is never taken from the request body.

⚠ Makero never asks for a private key or seed phrase, and the API refuses a request whose contents merely look like one, before those contents are recorded anywhere.

⚠ Unattended trading ships switched OFF. It requires server-side signing, which may only happen through a KMS or HSM. Until that custody exists the gate stays shut, and there is no plaintext key path anywhere as a shortcut. The gate needs four things to be true at once, one of them a kill switch that lives in the database so it can be pulled in seconds without waiting for a deploy.

The gate status, together with the reasons it is shut, is always visible on /dashboard.

Numbers we do not invent

Every chain read returns either a result or the reason it failed, never a substitute zero. “The RPC did not answer” and “the wallet is empty” are two different facts, and swapping the first for a zero makes a funded maker look empty, a position look closed, and a stop-loss look already triggered.

Across the interface, a value we could not read appears as n/a in a cold colour, not as a number. A platform that is still empty reports zero, and says that the zero is a measurement.