robinhood-trading-tools README

The project's README from github.com/casatrickdev/robinhood-trading-tools. As one markdown file: README.md.

Pons SDK

Robinhood Chain trading tools for Pons. TypeScript SDK for token launches, a historical indexer, and research for a Robinhood copy trading bot. A Robinhood sniper bot and Robinhood bundler are on the roadmap and are not live.

Typed access to Pons factory contracts, token launches, and TokenLaunched events with viem queries.

Site: casatrickdev.github.io/pons-sdk

Write-up: Pons SDK on Robinhood Chain

This package is read-only. It does not sign transactions, hold keys, or execute trades.

This is a client for Pons on Robinhood Chain. It is not Pons Network (@pons-network/pons.js) or the Pons microkernel SDK.

Features

Installation

pnpm add pons-sdk

Peer runtime: Node.js 20+ and viem.

Quickstart

import { PonsClient } from "pons-sdk";

const pons = new PonsClient();

const launches = await pons.getLaunches({
  fromBlock: 8_991_118n,
  toBlock: "latest",
});

for (const launch of launches.slice(0, 10)) {
  console.log(launch);
}

The public Robinhood Chain RPC times out on wide eth_getLogs ranges. The SDK splits requests into bounded chunks (2,000 blocks by default). A full backfill from the V1 start block still takes time against the public endpoint; prefer a tighter toBlock while developing.

Override the RPC when you have a dedicated provider:

const pons = new PonsClient({
  rpcUrl: "https://your-robinhood-rpc.example",
});

Reading a launch

import { PONS_REFERENCE, PonsClient } from "pons-sdk";

const pons = new PonsClient();

const launch = await pons.getLaunch(PONS_REFERENCE.token, {
  version: "v1",
  includeLegacy: true,
});

const graduation = await pons.getGraduationStatus(PONS_REFERENCE.token, {
  includeLegacy: true,
});

V1 and V2 factories have different TokenLaunched ABIs and different getLaunchedToken records. The SDK models them as separate types instead of collapsing incompatible fields.

const v2Launches = await pons.getLaunches({
  fromBlock: 55_400_000n,
  toBlock: "latest",
  version: "v2",
});

const canLaunch = await pons.canLaunch("0x...");

Event filtering

token and deployer are indexed on both factory generations and can be passed through to eth_getLogs:

const launches = await pons.getLaunches({
  fromBlock: 8_991_118n,
  toBlock: 8_993_118n,
  token: "0x39dBED3a2bd333467115dE45665cC57F813C4571",
});

pool is not an indexed TokenLaunched argument on V1, and V2 has no pool field on that event. The SDK does not pretend those filters exist at the RPC layer.

Architecture

Robinhood Chain
      ↓
Pons Contracts
      ↓
Events
      ↓
Pons SDK
      ↓
Historical Indexer / SQLite
      ↓
Future Analytics / Scanner
Layer Responsibility
chain/ Robinhood Chain definition and default public RPC
contracts/ Official factory addresses and verified ABI fragments
events/ Block-range chunking, log fetch, TokenLaunched decode
launches/ Normalized launch objects and verified contract reads
client/ Developer-facing PonsClient
indexer/ Historical TokenLaunched sync, cursor, and queries
storage/ SQLite schema and launch persistence

Contract addresses and event signatures come from the official Pons documentation and the ponsdotdev/ponsfamily repository. They are not invented and are not taken from a third-party SDK.

Contracts

Generation Role Address Start block
V1 Active factory 0xA5aAb3F0c6EeadF30Ef1D3Eb997108E976351feB 8,991,118
V1 Legacy factory 0x0c37a24F5D23A486FA692d1500881d698B1F77a4 8,600,612
V2 Factory 0x7eD598BcEf8bd9Edd8C97A195C6d13f40801EC7e —

The official PONS reference token (0x39dBED3a2bd333467115dE45665cC57F813C4571) was launched through the V1 legacy factory. Use includeLegacy: true when you need that history.

Milestone 1

Milestone 1 is the read-only data layer: connect to Robinhood Chain, talk to the official Pons V1 and V2 factories, and turn real TokenLaunched logs into typed objects.

Robinhood Chain
      ↓
Pons Contracts
      ↓
Onchain Events
      ↓
Typed SDK

Shipped in this milestone:

The next milestone after this read layer is persistent historical state. Milestone 2 (the SQLite indexer) is included in this package.

Full write-up: Building a Pons SDK on Robinhood Chain.

Historical Indexer

Milestone 2 turns decoded TokenLaunched events into local, queryable history.

Pons contracts
      ↓
TokenLaunched events
      ↓
Pons SDK
      ↓
Historical indexer
      ↓
SQLite
      ↓
Queryable launches

The indexer uses the SDK's getLaunches() and splitBlockRange() helpers. It does not send transactions. Blockchain integers are stored as decimal strings.

Re-processing the same block range does not create duplicate events. Identity is transactionHash + logIndex, enforced by a SQLite unique constraint. The indexer can safely replay a range. It does not unwind chain reorganizations.

import { PonsClient, PonsDatabase, PonsIndexer } from "pons-sdk";

const indexer = new PonsIndexer({
  client: new PonsClient(),
  database: new PonsDatabase("pons-indexer.sqlite"),
});

await indexer.sync({
  fromBlock: 8_963_000n,
  toBlock: 8_965_000n,
});

const launches = indexer.getLatestLaunches(20);

Resume after a stop by omitting fromBlock. The cursor only advances after the chunk is committed.

pnpm indexer:sync --from 8963000 --to 8965000
pnpm indexer:latest

Copy-Trading Research

This module detects and evaluates wallet activity but does not execute trades.

Copy-trade domain logic is tested against normalized synthetic domain fixtures. Real Pons wallet/swap ingestion will be connected when the indexer supports those events. Token addresses used in tests can still come from live Robinhood Chain reads.

Pons Events
     ↓
Indexer
     ↓
Wallet Activity
     ↓
Trade Detection
     ↓
Filtering
     ↓
Risk
     ↓
Copy-Trade Signal
     ↓
Execution Adapter
        X
   Disabled

Research-only: mode is research. Constructing live throws. Signals use a deterministic id (transactionHash + logIndex). Filtering and risk are separate deterministic layers. No private keys. No live execution. engine.execute() throws Live execution is disabled in research mode. NoopExecutionAdapter returns not_executed.

import { CopyTradeEngine } from "pons-sdk";

const engine = new CopyTradeEngine({
  mode: "research",
  policy: {
    allowedWallets: ["0x..."],
    minTradeSize: 1n,
  },
});

const signal = engine.process(activity);
console.log(engine.explain(signal));

Robinhood copy trading bot, sniper bot, and bundler

This repo is the open-source foundation for Robinhood Chain trading tools:

Tool Status
Robinhood copy trading bot Research pipeline only. Detects and scores wallet activity. Does not copy trades.
Robinhood sniper bot Not implemented. Planned after swap indexing and a real-time event stream.
Robinhood bundler Not implemented. Planned after paper execution.
Other Robinhood trading tools Launch indexer and read-only SDK are available now.

Live copy-trading, sniping, bundling, and fund execution are disabled. There is no environment flag that turns them on.

Real trading is not implemented. If it is added later, do not use the public Robinhood Chain RPC (https://rpc.mainnet.chain.robinhood.com). Live reads and execution need a dedicated paid RPC such as Alchemy or QuickNode, passed as rpcUrl on PonsClient.

Roadmap

[x] Robinhood Chain client
[x] Pons V1/V2 contracts
[x] Contract reads
[x] TokenLaunched decoding
[x] Launch queries
[x] SDK tests
[x] Live RPC tests

[x] Historical indexer
[x] Persistent indexed state
[x] Copy-trading research architecture
[x] Read-only signal pipeline

[ ] Real-time event stream
[ ] Wallet activity indexing
[ ] Wallet intelligence
[ ] Copy-trading backtesting
[ ] Paper execution
[ ] Live execution
[ ] Scanner
[ ] Bundler
[ ] Sniper
[ ] Additional Robinhood Chain launchpads
[ ] Swap indexing

Development

pnpm install
pnpm lint
pnpm typecheck
pnpm test
pnpm build

Read-only integration tests hit the public Robinhood Chain RPC and never require a wallet:

pnpm test:integration

Run the example:

pnpm example:launches
pnpm indexer:sync --from 8963000 --to 8965000
pnpm indexer:latest

Safety

This package is data infrastructure and copy-trading research only.

On-chain values stay as bigint / addresses. The SDK does not convert token amounts to floating-point numbers.

License

MIT

robinhood-trading-tools (casatrickdev/robinhood-trading-tools)

Searching Database…

这是什么?这是面向 Robinhood Chain 上 Pons 的 TypeScript SDK 和工具集:它提供对 Pons 工厂合约和代币发行的可类型化只读访问、针对 TokenLaunched 事件的历史 SQLite 索引器,以及为未来 Robinhood 跟单机器人准备的研究工具。
这是我能直接运行的交易机器人,还是我在其之上构建的库?它是只读的库/SDK,而不是可运行的机器人:它从不签名交易、不保管密钥、也不执行交易,你需要基于它的 PonsClient 构建自己的工具。
怎么把它加进项目?把该包添加到 Node.js 20+ 项目并将 viem 设为对等依赖,导入 PonsClient 查询发行情况,再用 'tsx examples/read-launches.ts' 运行自带的示例。
使用之前需要安装什么?你需要 Node.js 20+ 和作为对等依赖的 viem 库;历史索引器还额外依赖 better-sqlite3 在本地持久化事件。
它现在真能让我在 Robinhood Chain 上跟单、狙击或打包交易吗?不能——狙击机器人和打包器尚未实现,实盘跟单、狙击、打包和执行都被禁用,也没有环境变量开关可以打开;公共 RPC 在大范围日志查询时还会超时,所以 SDK 把请求分块成 2,000 个区块的区间。
它会碰我的钱包或私钥吗?不会——SDK 没有交易签名功能,也不托管钱包,它的执行适配器是一个写死的空操作,无法启用。
跟单研究模块到底做什么?它仅在研究模式下通过确定性过滤和风险规则检测并评估钱包活动;调用 engine.execute() 会直接抛错,因此不存在通往实盘执行的路径。
SDK 为什么要把区块链查询分块?公共的 Robinhood Chain RPC 在大范围 eth_getLogs 查询时会超时,所以 SDK 默认按有界的 2,000 区块分块获取 TokenLaunched 事件,并可选择传入专用 RPC 以加快历史回填。
历史索引器存储什么?它把解码后的 TokenLaunched 事件持久化到本地 SQLite 数据库,按 transactionHash 加 logIndex 去重,并且省略 fromBlock 即可恢复同步而不会产生重复记录。
合约地址和 ABI 从哪里来?它们直接取自 Pons 官方文档和 ponsdotdev/ponsfamily 仓库,不是逆向工程得来,也不是从第三方 SDK 借用的。
Size
0.4 MB
Stars
119
Updated
CommitSep 15
Age
1mo
Commits · 90 Days