开发者
索引看板
用普通 JSON-RPC 从链上日志重建 Realbond 看板,方法与网站相同。
Realbond 网站没有数据库。看板(Board)是在浏览器中根据公开日志和 view 调用重建的,你也可以用任意 BNB Smart Chain RPC 做到同样的事。
数据来源
| 看板字段 | 来源 |
|---|---|
| 内盘列表 | AgentLaunchpad 的 LaunchCreated 日志 |
| 状态 | statusOf(id),始终实时读取(从不根据事件推断) |
| 已募集 | launches(id).netRaised,相对于 TARGET(1 BNB) |
| 参与者 | 该 id 的 Bought 日志中不重复的 buyer 值 |
| 创建者身份 | Agent ID 注册合约上的 handleOf(creator),以及注册合约上的 bindingOf(creator).screenName |
| 已注册 agent | IdentityRegistry 的 Registered 日志 |
状态必须来自 statusOf:募集中(Live)的内盘在截止时间过后会变为已过期(Expired),而这一时刻没有任何事件标记。
扫描方法
fromBlock = 129986828 # deploy block
chunk = 1000 blocks
loop:
getLogs(address = AgentLaunchpad, topics = [LaunchCreated | Bought], fromBlock, fromBlock + chunk - 1)
on "range too large" error → halve chunk and retry
on HTTP 429 → back off 2 s, 4 s, 8 s, then retry
fromBlock += chunk
until fromBlock > latest
then: every 15 s, scan only blocks after the last scanned block网站最多同时保持 2 个 eth_getLogs 请求在途,若 60 秒内没有成功刷新,会显示 "data may be stale" 提示。公共 RPC 端点常常限制区块范围或限流,因此请保持较小的分块和较低的并发。
viem 示例
import { createPublicClient, http, parseAbiItem } from 'viem';
import { bsc } from 'viem/chains';
const LAUNCHPAD = '0xDb6709D84573c507113CD605F934E6F19678643E';
const DEPLOY_BLOCK = 129986828n;
const CHUNK = 1000n;
const client = createPublicClient({ chain: bsc, transport: http(process.env.RPC_URL) });
const launchCreated = parseAbiItem(
'event LaunchCreated(uint256 indexed id, address indexed creator, string name, string symbol, string metaCid, bytes32 salt)',
);
const latest = await client.getBlockNumber();
for (let from = DEPLOY_BLOCK; from <= latest; from += CHUNK) {
const to = from + CHUNK - 1n > latest ? latest : from + CHUNK - 1n;
const logs = await client.getLogs({ address: LAUNCHPAD, event: launchCreated, fromBlock: from, toBlock: to });
for (const log of logs) console.log(log.args.id, log.args.name, log.args.symbol);
}用同样的方式加入 Bought 事件来统计参与者,再对每个内盘读取 statusOf(id) 和 launches(id) 补全其余字段。
生命周期事件
如需完整历史,还要索引 Sold、Full、Graduated、GraduateFailed、Claimed、Refunded 和 SaltUpdated。签名见 ABI 与事件。内盘已毕业(Filled)后,Graduated.token 给出 Flap 代币地址。