§ field log
how it works
- re
- Private Solana node under pump.fun. Your bot reads and lands from inside.
- bore
- 01, sealed
- status
- Closed. Node opens soon.
- handling
- Read below ground.
§00 abstract
burowd is a private Solana node dug in beside the pump.fun program. Your bot does not stand in the public RPC queue. It reads account state from a local replay, built from shreds as they come off the wire, and it lands transactions by handing them straight to the leaders that own the coming slots, over a staked QUIC path. One tenant per tunnel. No shared rate limit, no shared send lane, no load balancer between your bot and the chain. The public endpoint is a road on the surface. burowd is the tunnel under it.
surface ............................................................
bot --> public rpc --> balancer --> queue --> shared node --> ?
=============================================================== ground
|
| burowd
+---+--------------------------------------------+
| turbine shreds --> repair --> replay --> CACHE |
| | |
| your bot <===== tunnel =====> NODE <-------+ |
| | |
| +--quic--> TPU(L, L+1, L+2)
+------------------------------------------------+
§01 galleries
The node is one machine with one job. It joins gossip like any full node that sits next to validators, takes turbine shreds at its layer of the broadcast tree, repairs gaps, and replays the bank. Each tenant gets a gallery: a dedicated socket, a dedicated stream, a dedicated send path. Galleries never share a queue. A tenant that floods its gallery floods only its own gallery. The rest of the burrow does not feel it.
gossip / turbine
|
+------v------+
| NODE |
| replay |
+--+---+---+--+
| | |
g.01 +----+ | +----+ g.03
| g.02 |
bot a | bot c
bot b
gallery := { socket, stream, read, land, quota(self) }
§02 read path
Shreds are recovered from their erasure sets and entries are rebuilt before the block is whole. Transactions that touch the program are decoded on arrival and folded into a hot account cache: the global config, the fee recipients, every bonding curve and the token account behind it. A read never leaves the machine. Asking for a curve is a memory lookup, not a trip across the internet. Commitment starts at processed and is upgraded in place as the bank confirms.
struct CurveView {
mint Pubkey
curve Pubkey // pda ["bonding-curve", mint]
v_sol u64 // virtual sol reserve
v_tok u64 // virtual token reserve
r_sol u64 // real sol reserve
r_tok u64 // real token reserve
complete bool // curve filled, migration next
slot u64
commit processed | confirmed | finalized
}
price is never stored. it is derived from reserves at read time.
§03 land path
A signed transaction enters the tunnel and leaves the machine once, toward the leaders. The node holds the leader schedule for the epoch, resolves the TPU QUIC address of the leader that owns the coming slot and of the ones after it, and fans the same packet out to each of them over a staked connection, so stake-weighted QoS lets it through when the public lanes are full. No hop through a shared RPC. No retry storm. If the slot passes, the transaction is sent again with a fresh blockhash only if your bot asked for that.
bot --sign--> tunnel --> NODE
| schedule[epoch]
| owner(s), owner(s+1), owner(s+2)
|
+--quic/staked--> TPU L
+--quic/staked--> TPU L+1
+--quic/staked--> TPU L+2
+--(opt) bundle--> block engine, tip
the node can drop a transaction. it can never change one.
§04 leader clock
Slots are counted from the bank the node replays, not polled from a remote endpoint. The send path reads the schedule from the same bank, so it aims at the leader that owns the coming slot and the one after it, never at the one that just left. A skipped slot moves the aim forward. A fork moves it back to the last bank both branches agree on.
slot s-1 s s+1 s+2 s+3
leader L0 L1 L1 L2 L2
| | | | |
send . x------->x------->x . fanout 3
watch . . sig? --------+-------> landed
+-------> expired
+-------> dropped
§05 pump.fun surface
The node keeps warm every account the program reads on create, buy and sell, so a transaction built from the cache never waits on a lookup. Instructions are decoded with their inner instructions, so a buy routed through a wrapper or an aggregator still lands in the log as a buy against the curve. Failed transactions are kept. A reverted snipe still tells you who was in the slot.
ix accounts kept warm
create global, mint, curve, curve_ata, metadata, creator
buy global, fee_rcpt, mint, curve, curve_ata, user_ata, user
sell global, fee_rcpt, mint, curve, curve_ata, user_ata, user
migrate curve, pool, lp_mint, pool_base, pool_quote
failed Attempt(slot, tx, err) // kept
§06 tunnel protocol
A tunnel is one long-lived connection bound to one wallet. It opens with a Sign-In With Solana message: a nonce, a domain, a wallet, a signature. No transaction, and no key ever crosses the tunnel. Inside it there are three channels, each with its own order. Stream carries decoded events. Read answers account and slot questions. Land takes signed transactions and reports what happened to them. Nothing in one channel waits on another.
open siws(nonce, domain, wallet, sig) -> Session
chan stream events.tail(filter, from?) -> stream<Event>
chan read account(pubkey) -> AccountView
curve(mint) -> CurveView
slot() -> SlotInfo
chan land send(tx, fanout?, tip?) -> Receipt
watch(sig) -> landed | expired | dropped
close drain, then seal
§07 backfill
When a fork is abandoned, history is not rewritten. Every event that came out of the dead slot is followed, in order, by a tombstone, and the cache rewinds each curve it touched to the last view both branches share. Bots tailing the stream see the retraction arrive like any other event. A collapsed gallery is backfilled. The tunnel stays open.
slot tx kind mint commit
s+0 014 buy 7Hq..pump processed
s+0 015 buy 7Hq..pump processed
s+1 --- tomb s+0/014..015 fork < cache rewinds 7Hq
s+1 009 buy 7Hq..pump processed
s+2 --- --- --- confirmed
§08 custody
burowd never holds a key. Transactions arrive signed and leave signed. The node does not reorder your bundle, does not copy your flow into another gallery, and does not trade. It digs, it reads, it carries.
holds keys no
signs for you no
reorders you no
copies your flow no
shares your lane no
§09 non-goals
No terminal. No charts. No signals. No copy trading. No dashboard to stare at. A node, a tunnel and a send path, for bots that already know what they want.
terminal no
charts no
signals no
copy trade no
dashboard no
§10 access
Sealed for now. Every wallet that digs in goes into the draw for the first galleries. Node opens soon.
status sealed
galleries draw, per connected wallet
node opens soon
— end of log —