正在打开 Ripples 上的发行
正在打开 Ripples 上的发行
集成
有两种接入方式,返回的是同一批市场。一是直接读链:在 Robinhood 上,Ripples 的发行从第一个区块起就是一个 Uniswap v4 池,与其他所有 v4 池使用同一个 PoolManager,所以任何已在监听这个合约的程序,都会在发行开盘的那一刻看到它。二是读取我们的数据接口:它按 DEX Screener 和 GeckoTerminal 的规范返回数据,数据来自我们自己的页面所读取的同一个存储。
以下内容全部由部署记录和编译后的合约生成。同一份文档的 JSON 版本见 /integrate/manifest.json。
数据接口
DEX Screener Adapter Specs v1.1 和 GeckoTerminal Integration API Standards v0.1,由同一个服务应答。这些路由是公开的:不需要密钥,也不需要 origin 请求头。
| 网络 | 基础 URL | 交易场所标识 |
|---|---|---|
| robinhood | https://api.ripples.run/v1/dex/robinhood | ripples |
| 端点 | 查询参数 | 返回 |
|---|---|---|
/latest-block | 无 | { block } |
/asset | id | { asset } |
/pair | id | { pair } |
/events | fromBlock, toBlock | { events } |
fromBlock=10&toBlock=15 覆盖区块 10 至 15。400 invalid_request,消息中会写明上限。请把你的分块大小设为不超过这个值。/latest-block 是索引器自己的游标,从来不是链本身的高度。The head is the lowest indexed cursor across every source writing the chain, and /events stops at it, so a block is never served twice and never skipped. 只要读到这个头部区块就停下,就永远不会碰到截断。共四次调用。先取头部区块,再取一个窗口内的交易,然后是市场及其两种资产。下面每个 URL 都是 Robinhood 数据接口的真实地址。
# Ask how far the feed has indexed. Never read past this block. https://api.ripples.run/v1/dex/robinhood/latest-block # block.blockNumber is the head. Everything below stops there. # Read a window of trades. Both bounds are inclusive. https://api.ripples.run/v1/dex/robinhood/events?fromBlock=57699981&toBlock=57700000 # Each event carries pairId, the legs, priceNative and reserves. # Look up the market an event names. Its record is fixed at creation, so read it once. https://api.ripples.run/v1/dex/robinhood/pair?id=0x…poolId # asset0Id is the launch token and asset1Id is what it is priced in. # Look up each side of the market, for decimals and supply. https://api.ripples.run/v1/dex/robinhood/asset?id=0x…token # decimals is always present. Supplies are exact decimal strings.
已达到目标金额的市场仍会在 /pair 上返回。在 Robinhood 上,它继续在同一个池中、在永久流动性之下交易,所以它的交易会继续出现在 /events 中。
地址
每条链一个 Hook 合约,它是区分 Ripples 池与其他任何 Uniswap v4 池的唯一标志。按 PoolManager 的 Initialize 事件中的 hooks 字段筛选,就能得到这条链上所有的 Ripples 市场。
每个 Ripples 池都使用相同的池键:fee = 0 和 tickSpacing = 200,所有发行都一样。两者都是 Hook 合约中的常量,部署无法更改它们,可以放心硬编码。池本身不收取任何费用,所有费用都由 Hook 合约收取。
| 合约 | 地址 |
|---|---|
| Uniswap v4 PoolManager | 0x8366a39CC670B4001A1121B8F6A443A643e40951 |
| 发行 Hook 合约 | 0xaF59944A7d03B914567cb0272b7E588A7aE7AAC4 |
| LaunchLens 合约 | 0x5E16EA0A8910053c333383CF8eb13369eFb5c0b8 |
| 代币发行工厂合约 | 0xE89C1b33B6C2505414667bE7E5084774a72150e1 |
| 合集工厂合约 | 0x5136aBf2F4059E390459a7dc9FAD4b0859834894 |
| 只读 RPC | https://rpc.mainnet.chain.robinhood.com |
池键:fee = 0、tickSpacing = 200、hooks = 0xaF59944A7d03B914567cb0272b7E588A7aE7AAC4。两种货币的排序方式:numeric ascending, and fixed for the pool's life; both currencies are ERC20s, because a launch settles in an approved quote asset and never in native ETH。这也是两项数据接口标准对资产标识符的要求。池 ID 为 keccak256(abi.encode(currency0, currency1, fee, tickSpacing, hooks))。
Hook 合约的权限是它自身地址的低 14 位,0x2AC4:beforeInitialize beforeAddLiquidity beforeRemoveLiquidity beforeSwap afterSwap afterSwapReturnsDelta
| 合约 | 地址 |
|---|---|
| Uniswap v4 PoolManager | 0x8366a39CC670B4001A1121B8F6A443A643e40951 |
| 发行 Hook 合约 | 0xaF59944A7d03B914567cb0272b7E588A7aE7AAC4 |
| LaunchLens 合约 | 0x2BD4aB15858d35cedF837f236C51cD3901Eed372 |
| 代币发行工厂合约 | 0x0338754d997967402896c9D45dFd5352E68606ba |
| 合集工厂合约 | 0x3A632Ce9B54C499abD837c1809a5369f0A224cDc |
| 只读 RPC | https://rpc.testnet.chain.robinhood.com |
池键:fee = 0、tickSpacing = 200、hooks = 0xaF59944A7d03B914567cb0272b7E588A7aE7AAC4。两种货币的排序方式:numeric ascending, and fixed for the pool's life; both currencies are ERC20s, because a launch settles in an approved quote asset and never in native ETH。这也是两项数据接口标准对资产标识符的要求。池 ID 为 keccak256(abi.encode(currency0, currency1, fee, tickSpacing, hooks))。
Hook 合约的权限是它自身地址的低 14 位,0x2AC4:beforeInitialize beforeAddLiquidity beforeRemoveLiquidity beforeSwap afterSwap afterSwapReturnsDelta
事件
价格和交易量来自 PoolManager,而不是来自我们。Hook 合约自己的事件说明了 PoolManager 无法说明的内容:哪个池是 Ripples 的发行、Hook 合约从一笔兑换中扣取了多少以及以哪种货币扣取,以及发行处于生命周期的哪个阶段。
| 事件 | topic0 | 索引字段 |
|---|---|---|
Initialize(bytes32,address,address,uint24,int24,address,uint160,int24) | 0xdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d6438 | id, currency0, currency1 |
ModifyLiquidity(bytes32,address,int24,int24,int256,bytes32) | 0xf208f4912782fd25c7f114ca3723a2d5dd6f3bcc3ac8db5af63baa85f711d5ec | id, sender |
Swap(bytes32,address,int128,int128,uint160,uint128,int24,uint24) | 0x40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f | id, sender |
Hook 合约在兑换内部收取手续费,所以 PoolManager 的 Swap 事件中的金额会比交易者实际收到的多,差额正好是所收取的手续费。手续费以兑换的非指定货币计:精确输入的买入是发行代币,精确输入的卖出是市场的计价资产,精确输出的兑换则是兑换者支付的那种货币,在其指定金额之上另外收取。请从事件中读取货币,而不要根据方向推断。从同一笔交易中读取 TradeFeeCharged、CreatorTaxCharged,以及开盘税期间的 SnipeTaxCharged,然后全部减去。每个事件都携带金额和货币,而不是费率,这样读取方就永远不需要重建费率表。它们都不会把代币转到任何外部地址:它们是保存在 PoolManager 内部的债权,直到被领取。
TradeFeeCharged 按每个收款方各触发一次,所以当发行既向创作者付款也向国库付款时,一笔交易会产生两个这样的事件,手续费是两者之和。CreatorTaxCharged 是按另一个费率收取的另一项费用:交易手续费与国库分配,创作者税则不分配;在设置了创作者税的发行上交易,两者都要支付。
| 事件 | topic0 | 索引字段 |
|---|---|---|
Claimed(address,address,uint256) | 0xf7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683 | token, account |
ContributionRecorded(bytes32,address,uint256,uint256) | 0x3b848fcbc1d1d0f19a4a9f30e3990d2ca028a1972bf282879a6fde3e4b28dcba | poolId, from |
CreatorFeeRecipientSet(bytes32,address,address) | 0xe98b751fcb6b01f7da48fff9556bd647d42ca4105dc6220341437f98853c6090 | poolId, previous, recipient |
CreatorTaxCharged(bytes32,address,address,uint256) | 0x2876f994f3ad04672af9d383779387ed0d3bac89871b923c9f9eef41cd6db318 | poolId, currency, recipient |
Credited(address,address,uint256) | 0x4e45da441832cf53bdaa69235704fc0575e68210f459ee1562911024b12967d5 | token, account |
Graduated(bytes32,uint256,uint256) | 0xc1eaf6441a62895ddec3612cee606bd971cf6b1b38dd700f103e7b6b94167d0c | poolId |
GraduationRaiseSettled(bytes32,uint256) | 0xd83e1ca0da2f9ec27f30bfc1a0e691a966ad11db495309f9ba21e5c51bf3ad83 | poolId |
GraduationSettled(bytes32,uint128) | 0x0ee67cdb506e34995a59d35b93c370999743c9c5f4237b1b7f61fa3629cae904 | poolId |
LaunchRegistered(bytes32,address,address,address,address,uint256,uint160,int24,int24,uint128) | 0xc072459bb9c7ab9120cc03eec0a7110f7a20df41ccb3610b0c54814b3aaff318 | poolId, token, quote |
LaunchSeeded(bytes32,uint128,int24,int24) | 0x56a662ac2d06fd82f68115bc8aae74e0d9a11dc119aed160f41a5d4def5a5445 | poolId |
LaunchpadSet(address,bool) | 0x6bce717262ad8d508f67dc3376d3a257125260f8a426f2afef7296415f64850a | launchpad |
OwnershipTransferStarted(address,address) | 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700 | previousOwner, newOwner |
OwnershipTransferred(address,address) | 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 | previousOwner, newOwner |
PositionManagerConfigured(address) | 0x4e707227e66a64d0a1563ff08548a1e23e88544de6e5a5f0f7adbeb177ee5c7a | positionManager |
SnipeTaxCharged(bytes32,address,address,uint256,uint256) | 0x5b35e3889fff69d0365744fa6d7a696f04c94a77c6200b004fda6320ea34606e | poolId, currency, recipient |
TradeFeeCharged(bytes32,address,address,uint256) | 0x2285eb140ea82ca28170f503bd29870d3ff46c2cea01b0d3bf42deed0d8da500 | poolId, currency, recipient |
除了主题,还要按发出事件的地址筛选。两个工厂合约并列部署、分别轮换,它们有 10 个管理事件的签名逐字节相同。只按主题读取的程序,会把其中一个工厂合约的管理操作算到另一个头上。
| 签名 | topic0 | 发出方 |
|---|---|---|
AssetOriginSet(string) | 0x73b3415953bb883c64e683859b3e778e2ffbee212a395f92fe8b7a2784381407 | TokenLaunchFactory, LaunchpadFactory |
FeePassCollectionSet(address) | 0x23631d31dc72ddf493ae1a8e4578e58a5b375a1c6a5daae27c73c01278c072d2 | TokenLaunchFactory, LaunchpadFactory |
FeePassConsumed(uint256,address) | 0x2575cb7be131797b2b269f251e7bcc8713b9c113ab30a4df1c90f384365def77 | TokenLaunchFactory, LaunchpadFactory |
FeesWithdrawn(address,uint256) | 0xc0819c13be868895eb93e40eaceb96de976442fa1d404e5c55f14bb65a8c489a | TokenLaunchFactory, LaunchpadFactory |
LaunchFeeSet(uint256) | 0x9c14cfb9531fb93979e22b461eaa41216ae6de79984d69ee4b411726defedeba | TokenLaunchFactory, LaunchpadFactory |
OwnershipTransferStarted(address,address) | 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700 | TokenLaunchFactory, LaunchpadFactory |
OwnershipTransferred(address,address) | 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 | TokenLaunchFactory, LaunchpadFactory |
PlatformSignerSet(address) | 0xf1589df78975fe5494fa74969b25e6930dd0785c88cce9fb712c07e39aceedd9 | TokenLaunchFactory, LaunchpadFactory |
QuoteRegistrySet(address) | 0xc70b5b06e2432adbb407847681d30654be86cd6573a21454d58858ff7ec05db5 | TokenLaunchFactory, LaunchpadFactory |
TreasurySet(address) | 0x3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f | TokenLaunchFactory, LaunchpadFactory |
| 事件 | topic0 | 索引字段 |
|---|---|---|
AssetOriginSet(string) | 0x73b3415953bb883c64e683859b3e778e2ffbee212a395f92fe8b7a2784381407 | 无 |
FeePassCollectionSet(address) | 0x23631d31dc72ddf493ae1a8e4578e58a5b375a1c6a5daae27c73c01278c072d2 | collection |
FeePassConsumed(uint256,address) | 0x2575cb7be131797b2b269f251e7bcc8713b9c113ab30a4df1c90f384365def77 | passTokenId, creator |
FeesWithdrawn(address,uint256) | 0xc0819c13be868895eb93e40eaceb96de976442fa1d404e5c55f14bb65a8c489a | to |
LaunchCreated(address,address,bytes32,address,address,(string,string,uint256,uint256,uint256,uint256,uint256,uint64,uint96,address,string,string,string,string,string,string,string)) | 0xe6b9a7f89a54ef27b5f1a729370db18a53da3bcedf25a9cce395d3a7151c9d15 | creator, token, poolId |
LaunchFeeSet(uint256) | 0x9c14cfb9531fb93979e22b461eaa41216ae6de79984d69ee4b411726defedeba | 无 |
LaunchHookSet(address) | 0x4cce86045ee56e14b861f315f9bbfd9d15354e2b7546aa36b0b6c0d637caaa22 | hook |
LinkedLaunchCreated(address,address,address,address,address) | 0x12279582cbf91e478c8256e79366d189bc65274e22711012d134561b98fcdb79 | creator, token |
NftProtocolFeeSet(uint96) | 0xac2a075822a6a2a357f96fc654b9ebe49d686520b38aacb2d6f0c378d7deab1b | 无 |
OwnershipTransferStarted(address,address) | 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700 | previousOwner, newOwner |
OwnershipTransferred(address,address) | 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 | previousOwner, newOwner |
PlatformSignerSet(address) | 0xf1589df78975fe5494fa74969b25e6930dd0785c88cce9fb712c07e39aceedd9 | signer |
QuoteRegistrySet(address) | 0xc70b5b06e2432adbb407847681d30654be86cd6573a21454d58858ff7ec05db5 | registry |
TokenWithdrawn(address,address,uint256) | 0x8210728e7c071f615b840ee026032693858fbcd5e5359e67e438c890f59e5620 | token, to |
TreasurySet(address) | 0x3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f | treasury |
WaveCreated(address,address,address,uint256,uint96) | 0x9f1af47c78a2baeaaca67ab23f33a8b692892145caf22a42ec2c21f3550182ee | creator, locker |
| 事件 | topic0 | 索引字段 |
|---|---|---|
AssetOriginSet(string) | 0x73b3415953bb883c64e683859b3e778e2ffbee212a395f92fe8b7a2784381407 | 无 |
CollectionCreated(address,address,(string,string,uint256,uint256,uint256,uint64,uint64,uint8,string,string,uint96,address)) | 0x97cb7b021a2c09bd07f0519545e6cb005ae3c7bd3dc6d434a64c0308f7f833b2 | creator, collection |
DefaultProtocolFeeSet(uint96) | 0x95465226ac2117c565282226e964ccd12d2c9aa47cc47869f27d19ef1de07c33 | 无 |
FeePassCollectionSet(address) | 0x23631d31dc72ddf493ae1a8e4578e58a5b375a1c6a5daae27c73c01278c072d2 | collection |
FeePassConsumed(uint256,address) | 0x2575cb7be131797b2b269f251e7bcc8713b9c113ab30a4df1c90f384365def77 | passTokenId, creator |
FeesWithdrawn(address,uint256) | 0xc0819c13be868895eb93e40eaceb96de976442fa1d404e5c55f14bb65a8c489a | to |
LaunchFeeSet(uint256) | 0x9c14cfb9531fb93979e22b461eaa41216ae6de79984d69ee4b411726defedeba | 无 |
OwnershipTransferStarted(address,address) | 0x38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700 | previousOwner, newOwner |
OwnershipTransferred(address,address) | 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0 | previousOwner, newOwner |
PlatformSignerSet(address) | 0xf1589df78975fe5494fa74969b25e6930dd0785c88cce9fb712c07e39aceedd9 | signer |
QuoteRegistrySet(address) | 0xc70b5b06e2432adbb407847681d30654be86cd6573a21454d58858ff7ec05db5 | registry |
TokenFeesWithdrawn(address,address,uint256) | 0x6241d2d4228642a412963629be2a38b8fea3c68fc02692659f2afb536393e3af | token, to |
TreasurySet(address) | 0x3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f | treasury |
读取
两个调用列出工厂合约创建的所有发行,第三个调用判断某个地址是否来自这个工厂合约,而 Hook 合约能回答某个池 ID 背后市场的全部信息。launchesOf 接受批量查询,遇到不认识的 ID 时返回零值而不是回滚,所以一个错误的 ID 不会让其他结果丢失。
| 调用 | 选择器 | 返回值 |
|---|---|---|
launchCount() | 0x27cca59f | uint256 |
launches(uint256,uint256) | 0x90166851 | (address,address,address,address)[] |
isFromFactory(address) | 0x2e2ecd8d | bool |
| 调用 | 选择器 | 返回值 |
|---|---|---|
collectionCount() | 0xd57f966b | uint256 |
collections(uint256,uint256) | 0x7697c512 | address[] |
isFromFactory(address) | 0x2e2ecd8d | bool |
| 调用 | 选择器 | 返回值 |
|---|---|---|
poolKeyFor(address,address) | 0x8f15ae9b | (address,address,uint24,int24,address) |
poolIdOfToken(address) | 0x65d7b483 | bytes32 |
configOf(bytes32) | 0x6ef61607 | (address,address,address,address,address,address,address,uint96,uint96,uint96,uint64,uint64,uint64,uint96,address,uint256) |
stateOf(bytes32) | 0x64482ac4 | (uint8,uint128,uint256,uint256) |
planOf(bytes32) | 0xff798040 | (uint160,int24,int24,uint128,uint256) |
realQuote(bytes32) | 0x05ca6842 | uint256 |
graduationQuote(bytes32) | 0x4ce1c4a2 | uint256 |
graduationReady(bytes32) | 0x5315769b | bool |
snipeTaxBps(bytes32) | 0x7da3dafe | uint256 |
launchesOf 由一个单独的合约应答,已部署的链在上面按链列出了它的地址。它不持有任何状态、资金或权限:它返回的每个字段都读取自上面五个 Hook 只读函数和 PoolManager,所以不想信任它的读取方,可以从这两个地址自行得出相同的结果。部署记录公布的每条链都有一个这样的合约。列表中没有 LaunchLens 合约的链不支持批量读取:请通过上面的工厂合约调用枚举它的发行,并通过 Hook 只读函数读取每个市场。
| 调用 | 选择器 | 返回值 |
|---|---|---|
HOOK() | 0xa54eb242 | address |
POOL_MANAGER() | 0x62308e85 | address |
launchesOf(bytes32[]) | 0x52c17af4 | (bytes32,(address,address,address,address,address,address,address,uint96,uint96,uint96,uint64,uint64,uint64,uint96,address,uint256),(uint160,int24,int24,uint128,uint256),(uint8,uint128,uint256,uint256),uint256,uint160,uint256)[] |
Ripples 市场就是普通的 Uniswap v4 池,所以任何支持 v4 的路由合约都能交易它。只有一种规模的订单需要用我们的路由合约。发行的流动性是单一有界价格区间上的单一头寸,Hook 合约会拒绝任何结束价格落在该区间之外的兑换,所以如果路由合约以宽松的价格限制下单,一笔超过市场剩余量的买入会直接被拒绝。整笔订单会回滚,而不是成交现有的部分。
地址为 0x22DB9B2c6C6DB56ABC3fc196E4bC1FBb9c4338a6 的 LaunchRouter 可以承接这类订单。swapExactIn(key, zeroForOne, amountIn, minAmountOut, recipient, deadline) 以区间端点作为价格限制下单,所以池会成交到曲线末端后停止,并返回 (spent, amountOut)。它只通过 Permit2 从调用方转出 spent,市场无法承接的那部分订单资金不会移动。minAmountOut 是一个价格,而不是数量:路由合约保证 spent * minAmountOut <= amountIn * amountOut,对于全额成交的订单,这等同于 amountOut >= minAmountOut;对于部分成交的订单,成交部分也按同样的比率计算。
从 Filled(poolId, sender, recipient, zeroForOne, amountIn, spent, amountOut) 读取成交结果。spent 小于 amountIn 表示部分成交,且市场已到达曲线末端。PoolManager 的 Swap 只报告成交的部分,不涉及未成交的部分,所以想知道差额的读取方必须从这里获取。CurveEndReached 是市场已无可售代币时的回滚错误,它表示“这个发行可以毕业了”,而不是故障。
Solana
两种 Solana 发行共用上面的数据接口,每条记录上的 engine 字段说明它属于哪一种。在 Meteora 的 Dynamic Bonding Curve 上的发行(dbc)从第一笔交易起就是一个 Meteora DBC 池,交易终端会像列出其他 Meteora 池一样列出它,曲线募满后它会转入一个 Meteora DAMM v2 池。在 Ripples 程序上的发行(ripples,或没有 engine)是一个由程序拥有、带虚拟储备的账户,而不是池,只有达到目标金额后才会有 Raydium CPMM 池。在那之前没有可读取的池:请从上面的数据接口获取市场,或用下面的接口定义解码发行账户。
| 项目 | 值 |
|---|---|
| 程序 | RippcKjgg9pkjHY7RKp6R1K8jPGwq2BRSJcgbErufjF |
曲线程序(dbc 发行) | dbcij3LWUppWqq96dh6gJWwBifmcGfLSB5D4DuSMaqN |
毕业后的池程序(dbc 发行) | cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGG |
| 曲线配置 | 6opv6HHth5Diu89wq9V7wiMUUZj2oVd97SRF17kf5Sn9(standard)CYMBTFb6p8jfXLeMMT6ebzvrJXh2C5ebGq5FrjrFB7Tm(combined-spark)6coc8Ys3a9gZNAdUpMPLRPf2M3s22uCTKsTpES9Tq7Zf(combined-wave)9Vp4xBXqUeukFxBqHrT21ow2dZcirtoN9XRrF5jASv97(combined-tide) |
| 接口定义 | solana/idl/ripples.json at 34c39a9e2b40,版本 0.1.0 |
| 指令 | 57 |
| 事件 | AssetMinted, AssetRevealed, AuthorityAccepted, AuthorityProposed, BeneficiaryFinalized, Bought, BuybackSwept, CollectionCreated, CollectionCreatorSet, CollectionLinked, ConfigUpdated, ContributionRecorded, CreatorPayoutSet, DbcCollectionLinked, DbcLeftoverBurned, DbcLinkSettled, DbcPieceClaimed, DbcRoutedBuy, EscrowClaimed, ExternalLaunchControllerSet, ExternalLaunchCreated, GraduationBegun, GraduationCancelled, GraduationFinalized, HolderRewardClaimed, HolderRewardEpochPublished, HolderRewardsInitialized, HolderShareSet, LaunchCreated, LiquidityLocked, LockedFeesClaimed, LockedFeesCollected, LockedFeesCredited, MetadataUpdated, PoolCreated, QuoteAssetSet, RevenueWithdrawn, Sold, UnattributedRecovered, VestingClaimed |
Manifest
本页的每个地址、主题、选择器和规则都读取自同一个自动生成的文件,这个文件由我们的部署记录和编译后的合约写成。本页没有任何内容是手工输入的,重新部署导致地址变化时,本页也会随之变化。
本页的地址都属于当前这一代合约。更早的代币发行工厂合约仍保有它创建的发行,这些市场也仍在交易,所以它仍会为这些发行响应 launchCount 和 launches。要覆盖 Robinhood 上所有 Ripples 市场的索引器,需要读取这两个工厂合约,两者都在地址列表中列出。两个工厂合约创建的所有市场都共用同一个发行 Hook 合约和同一个池键,所以按 Hook 合约筛选的读取方无需知道哪个市场由哪个工厂合约创建,就能看到全部市场。
同一份文档的 JSON 版本见 /integrate/manifest.json。如果这里的某个地址与链上不一致,以链上为准,也请告诉我们:通过支持页面可以联系到我们。