scripts/telegram-private-transfer.ts
Command Syntax
Prerequisites
- Build Anchor artifacts so
target/idl/*andtarget/types/*exist:
- Provide valid signer keypairs (
SENDER_KEYPAIR,CLAIMER_KEYPAIR) or use~/.config/solana/id.jsondefaults. - Configure base and ephemeral RPC endpoints as needed.
Commands
delegate: initializes/funds sender deposit, ensures username deposit, creates permissions, delegates both deposits.send: executestransferToUsernameDepositon PER.subscribe: watches username deposit updates on PER until interrupted (or untilTARGET_AMOUNT).claim: claims from username deposit to recipient ATA using verified Telegram session.undelegate: commits and undelegates sender + username deposits back to base.
Important Environment Variables
PROVIDER_ENDPOINT/ANCHOR_PROVIDER_URL: base RPC (defaulthttp://127.0.0.1:8899)WS_ENDPOINT: base WS (default derived from base RPC)EPHEMERAL_PROVIDER_ENDPOINT: PER RPC (defaulthttp://127.0.0.1:7799)EPHEMERAL_WS_ENDPOINT: PER WS (defaultws://127.0.0.1:7800for local)EPHEMERAL_AUTH: settrueto request MagicBlock auth token for hosted PERER_VALIDATOR: validator pubkey (default from script)SENDER_KEYPAIR,CLAIMER_KEYPAIR: keypair file pathsTOKEN_MINT: override mint; otherwise script reads/writesSTATE_PATHSTATE_PATH: defaults toscripts/.state/telegram-private-transfer.jsonDEPOSIT_AMOUNT,SEND_AMOUNT,CLAIM_AMOUNT,TARGET_AMOUNT: raw token amountsAIRDROP: iftrue, request localnet airdrop when balance is low
End-to-End Example
Flow Mapping
The CLI commands map to SDK operations as follows:| CLI Command | SDK Operations |
|---|---|
delegate | initializeDeposit → modifyBalance(increase) → initializeUsernameDeposit → createPermission / createUsernamePermission → delegateDeposit / delegateUsernameDeposit |
send | transferToUsernameDeposit (on PER) |
subscribe | getEphemeralUsernameDeposit polling |
claim | claimUsernameDepositToDeposit (on PER) |
undelegate | undelegateDeposit / undelegateUsernameDeposit → modifyBalance(decrease) |
Notes
subscribelistens for account changes and can auto-exit onceTARGET_AMOUNTis reached.- The script uses a state file to persist mint context between commands.
- This CLI is a repo operational tool and may evolve with program workflows.

