@floorlaunchpad/sdk-evm 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/LICENSE +61 -0
  2. package/README.md +154 -2
  3. package/dist/abi/floor.d.ts +1315 -0
  4. package/dist/abi/floor.d.ts.map +1 -0
  5. package/dist/abi/floor.js +154 -0
  6. package/dist/abi/floor.js.map +1 -0
  7. package/dist/abi/generated.d.ts +12824 -0
  8. package/dist/abi/generated.d.ts.map +1 -0
  9. package/dist/abi/generated.js +1264 -0
  10. package/dist/abi/generated.js.map +1 -0
  11. package/dist/abi/index.d.ts +2 -0
  12. package/dist/abi/index.d.ts.map +1 -0
  13. package/dist/abi/index.js +2 -0
  14. package/dist/abi/index.js.map +1 -0
  15. package/dist/adapter.d.ts +89 -0
  16. package/dist/adapter.d.ts.map +1 -0
  17. package/dist/adapter.js +250 -0
  18. package/dist/adapter.js.map +1 -0
  19. package/dist/deployments.d.ts +154 -0
  20. package/dist/deployments.d.ts.map +1 -0
  21. package/dist/deployments.js +368 -0
  22. package/dist/deployments.js.map +1 -0
  23. package/dist/errors.d.ts +56 -0
  24. package/dist/errors.d.ts.map +1 -0
  25. package/dist/errors.js +42 -0
  26. package/dist/errors.js.map +1 -0
  27. package/dist/events.d.ts +45 -0
  28. package/dist/events.d.ts.map +1 -0
  29. package/dist/events.js +78 -0
  30. package/dist/events.js.map +1 -0
  31. package/dist/fees.d.ts +100 -0
  32. package/dist/fees.d.ts.map +1 -0
  33. package/dist/fees.js +156 -0
  34. package/dist/fees.js.map +1 -0
  35. package/dist/index.d.ts +18 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +18 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/pool.d.ts +63 -0
  40. package/dist/pool.d.ts.map +1 -0
  41. package/dist/pool.js +118 -0
  42. package/dist/pool.js.map +1 -0
  43. package/dist/reads.d.ts +107 -0
  44. package/dist/reads.d.ts.map +1 -0
  45. package/dist/reads.js +201 -0
  46. package/dist/reads.js.map +1 -0
  47. package/dist/router.d.ts +99 -0
  48. package/dist/router.d.ts.map +1 -0
  49. package/dist/router.js +132 -0
  50. package/dist/router.js.map +1 -0
  51. package/dist/sale.d.ts +79 -0
  52. package/dist/sale.d.ts.map +1 -0
  53. package/dist/sale.js +123 -0
  54. package/dist/sale.js.map +1 -0
  55. package/dist/send.d.ts +64 -0
  56. package/dist/send.d.ts.map +1 -0
  57. package/dist/send.js +137 -0
  58. package/dist/send.js.map +1 -0
  59. package/dist/simulate.d.ts +180 -0
  60. package/dist/simulate.d.ts.map +1 -0
  61. package/dist/simulate.js +270 -0
  62. package/dist/simulate.js.map +1 -0
  63. package/dist/trade.d.ts +140 -0
  64. package/dist/trade.d.ts.map +1 -0
  65. package/dist/trade.js +170 -0
  66. package/dist/trade.js.map +1 -0
  67. package/package.json +43 -4
@@ -0,0 +1,368 @@
1
+ /**
2
+ * Where FLOOR's contracts and Uniswap's v4 contracts are, per EVM chain id — plain data, no environment reads.
3
+ *
4
+ * Not included:
5
+ * - chain 31337 (Anvil): its addresses change on every local deploy. A caller with a local chain passes its own row
6
+ * (`createEvmAdapter({ deployments: { 31337: {...} } })`), checked by the same rules as these rows (`checkDeployment`).
7
+ * - RPC endpoints: the caller names its own transport or RPC URL.
8
+ *
9
+ * Two kinds of row share this table: a chain with a FLOOR set (Ethereum, Base, BSC, Robinhood Chain and Arc mainnets, which
10
+ * share one set of addresses, and Sepolia), and chains that carry only Uniswap's v4 contracts (FLOOR is not deployed there). `floorDeploymentFor` REFUSES the second kind by name —
11
+ * it never hands back an `ABSENT` field as if it were an address.
12
+ */
13
+ import { isAddress } from 'viem';
14
+ import { DeploymentConfigError } from './errors.js';
15
+ /** The current FLOOR contracts: costs rounded up, the stateless sell-back, the gap buy skim. */
16
+ export const CURRENT_RULES = { saleCost: 'ceil', sellBack: 'stateless', gapSkim: true };
17
+ /** Older FLOOR contracts: costs rounded down, the pro-rata sell-back, no gap buy skim. For a caller's row of such a set. */
18
+ export const OLDER_RULES = { saleCost: 'floor', sellBack: 'proRata', gapSkim: false };
19
+ /** A row's contract rules: its own `rules` over `CURRENT_RULES`. */
20
+ export function rulesOf(d) {
21
+ return { ...CURRENT_RULES, ...(d.rules ?? {}) };
22
+ }
23
+ /**
24
+ * NOT an address: a REQUIRED FLOOR contract that is not deployed on the chain. `''`, never a plausible hex string — a fake
25
+ * address does not throw, it reads address zero and lists nothing. `floorDeploymentFor` refuses a row still carrying one.
26
+ * Only the `CONTRACT_FIELDS` use it; every optional field uses `undefined`.
27
+ */
28
+ export const ABSENT = '';
29
+ /** The fields `floorDeploymentFor` insists on, in the order they are needed. */
30
+ export const CONTRACT_FIELDS = ['registry', 'factory', 'poolManager', 'vesting'];
31
+ /** Permit2 — one address on every chain that has it (a CREATE2 deploy); each row that names it was checked against the chain. */
32
+ export const PERMIT2 = '0x000000000022D473030F116dDEE9F6B43aC78BA3';
33
+ /** Labels and native symbols for the EVM chain ids FLOOR names. */
34
+ export const EVM_NETWORKS = {
35
+ 4663: { label: 'Robinhood Chain', nativeSymbol: 'ETH', testnet: false },
36
+ 8453: { label: 'Base', nativeSymbol: 'ETH', testnet: false },
37
+ 56: { label: 'BSC', nativeSymbol: 'BNB', testnet: false },
38
+ 999: { label: 'HyperEVM', nativeSymbol: 'HYPE', testnet: false },
39
+ 1: { label: 'Ethereum', nativeSymbol: 'ETH', testnet: false },
40
+ 11155111: { label: 'Sepolia', nativeSymbol: 'ETH', testnet: true },
41
+ 31337: { label: 'Anvil', nativeSymbol: 'ETH', testnet: true },
42
+ 46630: { label: 'Robinhood Testnet', nativeSymbol: 'ETH', testnet: true },
43
+ 5042: { label: 'Arc', nativeSymbol: 'USDC', testnet: false },
44
+ };
45
+ /**
46
+ * The rows, keyed by chain id. Six carry a FLOOR set: the five mainnets (1, 8453, 56, 4663, 5042; one set of addresses on
47
+ * all five, except Base's `zapAerodrome` and Ethereum, which has no `swapRatchet`) and Sepolia (11155111). The others carry
48
+ * Uniswap's v4 contracts only.
49
+ */
50
+ export const EVM_DEPLOYMENTS = {
51
+ 11155111: {
52
+ chainId: 11155111,
53
+ deploymentId: '0x0000000000000000000000000000000000000000000000000000000000000019',
54
+ explorer: 'https://sepolia.etherscan.io',
55
+ poolManager: '0xE03A1074c86CFeDd5C142C4F04F1a1536e203543',
56
+ registry: '0x1e816626508Ca63dbb71cD6D1E4794892dbBC989',
57
+ factory: '0xeFd78A82F486E37967dc89Bd8b57373703551134',
58
+ vesting: '0x112d89ae8649DB6e9e4a13F6A9f87be9c89E512C',
59
+ recipientClaims: '0x9789D099378BC19bF539189792843eCd972DCAbb',
60
+ holderRewards: '0x16D24e5F3d93F5e53ea4e81DdCe0D7FEb39C5021',
61
+ teamTreasury: '0xDe11874af6a3Aa96b2d09d5039a30c43537713E4',
62
+ traderReferrals: '0x5576dcC7CaE2416DAF84d878a3460052BA97Bb0F',
63
+ startBlock: 11895000n,
64
+ swapRatchet: '0xeF3B37709384512b1367C031b2801567D952f038',
65
+ zap: '0x90944bb31AC6e69ae36853e16040F85BF76Aba20',
66
+ presetRegistry: '0x484dFb3cd0468F9c6F1f0dbf6365F5EBBc138A65',
67
+ routers: [
68
+ { address: '0x3A9D48AB9751398BbFa63ad67599Bb04e4BdF98b', kind: 'universal', release: '2.0.0' },
69
+ { address: '0x9B6b46e2c869aa39918Db7f52f5557FE577B6eEe', kind: 'poolswaptest' },
70
+ ],
71
+ permit2: PERMIT2,
72
+ quoter: '0x61B3f2011A92d183C7dbaDBdA940a7555Ccf9227',
73
+ stateView: '0xE1Dd9c3fA50EDB962E442f60DfBc432e24537E4C',
74
+ note: 'Sepolia test set. Swaps go through the UniversalRouter (2.0.0); PoolSwapTest is recorded second and unused. FloorSwapRatchet and FloorZap wrap the same UniversalRouter. Quote allowlist empty (native quote only).',
75
+ },
76
+ 84532: {
77
+ chainId: 84532, deploymentId: '',
78
+ poolManager: '0x05E73354cFDd6745C338b50BcFDfA3Aa6fA03408',
79
+ registry: ABSENT, factory: ABSENT, vesting: ABSENT, startBlock: 0n,
80
+ routers: [{ address: '0x8B5bcC363ddE2614281aD875bad385E0A785D3B9', kind: 'poolswaptest' }],
81
+ quoter: '0x4A6513c898fe1B2d0E78d3b0e0A4a151589B1cBa',
82
+ stateView: '0x571291b572ed32ce6751a2Cb2486EbEe8DEfB9B4',
83
+ note: 'Base Sepolia. Only the older Universal Router generation is deployed here; PoolSwapTest only.',
84
+ },
85
+ 421614: {
86
+ chainId: 421614, deploymentId: '',
87
+ poolManager: '0xFB3e0C6F74eB1a21CC1Da29aeC80D2Dfe6C9a317',
88
+ registry: ABSENT, factory: ABSENT, vesting: ABSENT, startBlock: 0n,
89
+ routers: [{ address: '0xf3A39C86dbd13C45365E57FB90fe413371F65AF8', kind: 'poolswaptest' }],
90
+ quoter: '0x7dE51022d70A725b508085468052E25e22b5c4c9',
91
+ stateView: '0x9D467FA9062b6e9B1a46E26007aD82db116c67cB',
92
+ note: 'Arbitrum Sepolia. PoolSwapTest only.',
93
+ },
94
+ 46630: {
95
+ chainId: 46630, deploymentId: '',
96
+ explorer: 'https://explorer.testnet.chain.robinhood.com',
97
+ poolManager: '0x8366a39CC670B4001A1121B8F6A443A643e40951',
98
+ registry: ABSENT, factory: ABSENT, vesting: ABSENT, startBlock: 0n,
99
+ routers: [],
100
+ note: 'Robinhood Testnet. Uniswap v4 PoolManager only; no swap router; no FLOOR set.',
101
+ },
102
+ 4663: {
103
+ chainId: 4663,
104
+ poolManager: '0x8366a39CC670B4001A1121B8F6A443A643e40951',
105
+ deploymentId: '0x000000000000000000000000000000000000000000000000000000000000001a',
106
+ registry: '0x623c349ac8cBBD796f1E9540f902b9BfA9cD5804',
107
+ factory: '0x594A1A3D81b16c52e57e12975E32aF66D641Ed5F',
108
+ vesting: '0xa826B75Ca94206C51De45c8112c5ce8541e357A3',
109
+ singletonHook: '0xe44886ffe0a894c6C5900d77A51c7d49732C60Cc',
110
+ upgradeTimelock: '0xf1dBe7312CF4E0E33f26074f64dEc1844B3D536E',
111
+ platformTreasury: '0x6134E81DB1C853354E5D6B0cd70C5d04a4A6508c',
112
+ recipientClaims: '0x830E0853d08aBD7Ef2181b6e171Fa673E0B51d40',
113
+ holderRewards: '0xc6257aF57c2A92812D87AD43834eb24e1Cd711dD',
114
+ teamTreasury: '0x062B6c421E37579728877337B47Cf528AE4d49bb',
115
+ traderReferrals: '0x905e9965FC52CDE4b133e4711b6EbdD784b0BeFE',
116
+ presetRegistry: '0x2d5b6582C0EA925be1e356F7ECE585238d911505',
117
+ startBlock: 86973488n,
118
+ swapRatchet: '0xcBEC6E0a19Ef373f3bDA83F125572Aa7A2C0f371',
119
+ zap: '0x0117F2686F195eb7b85C27C96EEFDC8040079d9D',
120
+ routers: [{ address: '0x8876789976dEcBfCbBbe364623C63652db8C0904', kind: 'universal', release: '2.1.1' }],
121
+ permit2: PERMIT2,
122
+ quoter: '0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94',
123
+ stateView: '0xF3334192D15450CdD385c8B70e03f9A6bD9E673b',
124
+ v3: { factory: '0x1f7d7550B1b028f7571E69A784071F0205FD2EfA', quoter: '0x33e885eD0Ec9bF04EcfB19341582aADCb4c8A9E7', weth: '0x0Bd7D308f8E1639FAb988df18A8011f41EAcAD73' },
125
+ note: 'Robinhood Chain mainnet set. Swaps go through the UniversalRouter (2.1.1); FloorSwapRatchet and FloorZap wrap the same router.',
126
+ },
127
+ 5042: {
128
+ chainId: 5042,
129
+ poolManager: '0x8366a39CC670B4001A1121B8F6A443A643e40951',
130
+ deploymentId: '0x000000000000000000000000000000000000000000000000000000000000001a',
131
+ registry: '0x623c349ac8cBBD796f1E9540f902b9BfA9cD5804',
132
+ factory: '0x594A1A3D81b16c52e57e12975E32aF66D641Ed5F',
133
+ vesting: '0xa826B75Ca94206C51De45c8112c5ce8541e357A3',
134
+ singletonHook: '0xe44886ffe0a894c6C5900d77A51c7d49732C60Cc',
135
+ upgradeTimelock: '0xf1dBe7312CF4E0E33f26074f64dEc1844B3D536E',
136
+ platformTreasury: '0x6134E81DB1C853354E5D6B0cd70C5d04a4A6508c',
137
+ recipientClaims: '0x830E0853d08aBD7Ef2181b6e171Fa673E0B51d40',
138
+ holderRewards: '0xc6257aF57c2A92812D87AD43834eb24e1Cd711dD',
139
+ teamTreasury: '0x062B6c421E37579728877337B47Cf528AE4d49bb',
140
+ traderReferrals: '0x905e9965FC52CDE4b133e4711b6EbdD784b0BeFE',
141
+ presetRegistry: '0x2d5b6582C0EA925be1e356F7ECE585238d911505',
142
+ startBlock: 25642396n,
143
+ swapRatchet: '0xcBEC6E0a19Ef373f3bDA83F125572Aa7A2C0f371',
144
+ zap: '0x0117F2686F195eb7b85C27C96EEFDC8040079d9D',
145
+ routers: [{ address: '0x4fcA4a51Ab4F23A7447b3284fBd7D73289A89Fb1', kind: 'universal', release: '2.1.1' }],
146
+ permit2: PERMIT2,
147
+ quoter: '0x8Dc178eFB8111BB0973Dd9d722ebeFF267c98F94',
148
+ stateView: '0xF3334192D15450CdD385c8B70e03f9A6bD9E673b',
149
+ explorer: 'https://explorer.arc.io',
150
+ note: 'Arc mainnet set. Native gas and quote is USDC. Uniswap v4 is deployed at the Robinhood Chain addresses (CREATE2).',
151
+ },
152
+ 8453: {
153
+ chainId: 8453,
154
+ poolManager: '0x498581fF718922c3f8e6A244956aF099B2652b2b',
155
+ deploymentId: '0x000000000000000000000000000000000000000000000000000000000000001a',
156
+ registry: '0x623c349ac8cBBD796f1E9540f902b9BfA9cD5804',
157
+ factory: '0x594A1A3D81b16c52e57e12975E32aF66D641Ed5F',
158
+ vesting: '0xa826B75Ca94206C51De45c8112c5ce8541e357A3',
159
+ singletonHook: '0xe44886ffe0a894c6C5900d77A51c7d49732C60Cc',
160
+ upgradeTimelock: '0xf1dBe7312CF4E0E33f26074f64dEc1844B3D536E',
161
+ platformTreasury: '0x6134E81DB1C853354E5D6B0cd70C5d04a4A6508c',
162
+ recipientClaims: '0x830E0853d08aBD7Ef2181b6e171Fa673E0B51d40',
163
+ holderRewards: '0xc6257aF57c2A92812D87AD43834eb24e1Cd711dD',
164
+ teamTreasury: '0x062B6c421E37579728877337B47Cf528AE4d49bb',
165
+ traderReferrals: '0x905e9965FC52CDE4b133e4711b6EbdD784b0BeFE',
166
+ presetRegistry: '0x2d5b6582C0EA925be1e356F7ECE585238d911505',
167
+ startBlock: 52524628n,
168
+ swapRatchet: '0xcBEC6E0a19Ef373f3bDA83F125572Aa7A2C0f371',
169
+ zap: '0x0117F2686F195eb7b85C27C96EEFDC8040079d9D',
170
+ zapAerodrome: '0x3b5adDBcEF6785ede8bDf71766Ab1275663129ED',
171
+ zapAerodromeRouter: '0xC5b6786D7B64767D775877b0B6A319AD946B11B5',
172
+ explorer: 'https://basescan.org',
173
+ routers: [{ address: '0xFdf682F51FE81Aa4898F0AE2163d8A55c127fbC7', kind: 'universal', release: '2.1.1' }],
174
+ permit2: PERMIT2,
175
+ quoter: '0x0d5e0F971ED27FBfF6c2837bf31316121532048D',
176
+ stateView: '0xA3c0c9b65baD0b08107Aa264b0f3dB444b867A71',
177
+ v3: { factory: '0x33128a8fC17869897dcE68Ed026d694621f6FDfD', quoter: '0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a', weth: '0x4200000000000000000000000000000000000006' },
178
+ note: 'Base mainnet set. FloorZap and FloorSwapRatchet wrap the UniversalRouter; a second FloorZap (zapAerodrome) wraps Aerodrome\'s UniversalRouter (zapAerodromeRouter).',
179
+ },
180
+ 56: {
181
+ chainId: 56,
182
+ poolManager: '0x28e2Ea090877bF75740558f6BFB36A5ffeE9e9dF',
183
+ deploymentId: '0x000000000000000000000000000000000000000000000000000000000000001a',
184
+ registry: '0x623c349ac8cBBD796f1E9540f902b9BfA9cD5804',
185
+ factory: '0x594A1A3D81b16c52e57e12975E32aF66D641Ed5F',
186
+ vesting: '0xa826B75Ca94206C51De45c8112c5ce8541e357A3',
187
+ singletonHook: '0xe44886ffe0a894c6C5900d77A51c7d49732C60Cc',
188
+ upgradeTimelock: '0xf1dBe7312CF4E0E33f26074f64dEc1844B3D536E',
189
+ platformTreasury: '0x6134E81DB1C853354E5D6B0cd70C5d04a4A6508c',
190
+ recipientClaims: '0x830E0853d08aBD7Ef2181b6e171Fa673E0B51d40',
191
+ holderRewards: '0xc6257aF57c2A92812D87AD43834eb24e1Cd711dD',
192
+ teamTreasury: '0x062B6c421E37579728877337B47Cf528AE4d49bb',
193
+ traderReferrals: '0x905e9965FC52CDE4b133e4711b6EbdD784b0BeFE',
194
+ presetRegistry: '0x2d5b6582C0EA925be1e356F7ECE585238d911505',
195
+ startBlock: 127278845n,
196
+ swapRatchet: '0xcBEC6E0a19Ef373f3bDA83F125572Aa7A2C0f371',
197
+ zap: '0x0117F2686F195eb7b85C27C96EEFDC8040079d9D',
198
+ explorer: 'https://bscscan.com',
199
+ routers: [{ address: '0x8B844f885672f333Bc0042cB669255f93a4C1E6b', kind: 'universal', release: '2.1.1' }],
200
+ permit2: PERMIT2,
201
+ quoter: '0x9F75dD27D6664c475B90e105573E550ff69437B0',
202
+ stateView: '0xd13Dd3D6E93f276FAfc9Db9E6BB47C1180aeE0c4',
203
+ v3: { factory: '0xdB1d10011AD0Ff90774D0C6Bb92e5C5c8b4461F7', quoter: '0x78D78E420Da98ad378D7799bE8f4AF69033EB077', weth: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c' },
204
+ note: 'BSC mainnet set. This 2.1.1 UniversalRouter address is shared with Arbitrum, Optimism and Polygon.',
205
+ },
206
+ 1: {
207
+ chainId: 1,
208
+ poolManager: '0x000000000004444c5dc75cB358380D2e3dE08A90',
209
+ deploymentId: '0x000000000000000000000000000000000000000000000000000000000000001a',
210
+ registry: '0x623c349ac8cBBD796f1E9540f902b9BfA9cD5804',
211
+ factory: '0x594A1A3D81b16c52e57e12975E32aF66D641Ed5F',
212
+ vesting: '0xa826B75Ca94206C51De45c8112c5ce8541e357A3',
213
+ singletonHook: '0xe44886ffe0a894c6C5900d77A51c7d49732C60Cc',
214
+ upgradeTimelock: '0xf1dBe7312CF4E0E33f26074f64dEc1844B3D536E',
215
+ platformTreasury: '0x6134E81DB1C853354E5D6B0cd70C5d04a4A6508c',
216
+ recipientClaims: '0x830E0853d08aBD7Ef2181b6e171Fa673E0B51d40',
217
+ holderRewards: '0xc6257aF57c2A92812D87AD43834eb24e1Cd711dD',
218
+ teamTreasury: '0x062B6c421E37579728877337B47Cf528AE4d49bb',
219
+ traderReferrals: '0x905e9965FC52CDE4b133e4711b6EbdD784b0BeFE',
220
+ presetRegistry: '0x2d5b6582C0EA925be1e356F7ECE585238d911505',
221
+ startBlock: 26178890n,
222
+ zap: '0x0117F2686F195eb7b85C27C96EEFDC8040079d9D',
223
+ explorer: 'https://etherscan.io',
224
+ routers: [{ address: '0x4C82D1fBFe28C977cBB58D8C7FF8FCF9F70a2cCA', kind: 'universal', release: '2.1.1' }],
225
+ permit2: PERMIT2,
226
+ quoter: '0x52F0E24D1c21C8A0cB1e5a5dD6198556BD9E1203',
227
+ stateView: '0x7fFE42C4a5DEeA5b0feC41C94C136Cf115597227',
228
+ v3: { factory: '0x1F98431c8aD98523631AE4a59f267346ea31F984', quoter: '0x61fFE014bA17989E743c5F6cB21bF9697530B21e', weth: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' },
229
+ note: "Ethereum mainnet set. No FloorSwapRatchet here: a ratchet costs about 1.4M gas on Ethereum, so pool trades go straight through the UniversalRouter and a keeper ratchets. 0x66a9893c…A8Af is the older UniversalRouter; byte-identical copies sit at that address on other chains, where they point at Ethereum's PoolManager and cannot swap. Never use it.",
230
+ },
231
+ 42161: {
232
+ chainId: 42161, deploymentId: '',
233
+ poolManager: '0x360E68faCcca8cA495c1B759Fd9EEe466db9FB32',
234
+ registry: ABSENT, factory: ABSENT, vesting: ABSENT, startBlock: 0n,
235
+ routers: [{ address: '0x8B844f885672f333Bc0042cB669255f93a4C1E6b', kind: 'universal', release: '2.1.1' }],
236
+ permit2: PERMIT2,
237
+ quoter: '0x3972C00f7ed4885e145823eb7C655375d275A1C5',
238
+ stateView: '0x76Fd297e2D437cd7f76d50F01AfE6160f86e9990',
239
+ },
240
+ 10: {
241
+ chainId: 10, deploymentId: '',
242
+ poolManager: '0x9a13F98Cb987694C9F086b1F5eB990EeA8264Ec3',
243
+ registry: ABSENT, factory: ABSENT, vesting: ABSENT, startBlock: 0n,
244
+ routers: [{ address: '0x8B844f885672f333Bc0042cB669255f93a4C1E6b', kind: 'universal', release: '2.1.1' }],
245
+ permit2: PERMIT2,
246
+ quoter: '0x1f3131A13296FB91C90870043742C3CDBFF1A8d7',
247
+ stateView: '0xc18a3169788F4F75A170290584ECA6395C75Ecdb',
248
+ },
249
+ 130: {
250
+ chainId: 130, deploymentId: '',
251
+ poolManager: '0x1F98400000000000000000000000000000000004',
252
+ registry: ABSENT, factory: ABSENT, vesting: ABSENT, startBlock: 0n,
253
+ routers: [{ address: '0xFdf682F51FE81Aa4898F0AE2163d8A55c127fbC7', kind: 'universal', release: '2.1.1' }],
254
+ permit2: PERMIT2,
255
+ quoter: '0x333E3C607B141b18fF6de9f258db6e77fE7491E0',
256
+ stateView: '0x86e8631A016F9068C3f085fAF484Ee3F5fDee8f2',
257
+ },
258
+ 999: {
259
+ chainId: 999, deploymentId: '',
260
+ poolManager: ABSENT,
261
+ registry: ABSENT, factory: ABSENT, vesting: ABSENT, startBlock: 0n,
262
+ routers: [],
263
+ permit2: PERMIT2,
264
+ note: 'HyperEVM. v4-core exists only as third-party deployments with almost no liquidity; left without a PoolManager on purpose.',
265
+ },
266
+ };
267
+ const ZERO = /^0x0{40}$/i;
268
+ const present = (a) => !!a && isAddress(a, { strict: false }) && !ZERO.test(a);
269
+ const who = (chainId) => {
270
+ const n = EVM_NETWORKS[chainId];
271
+ return n ? `${n.label} (chain ${chainId})` : `chain ${chainId}`;
272
+ };
273
+ /**
274
+ * A row's own consistency: the key and `chainId` agree; every set address is a
275
+ * well-formed, non-zero address; a REQUIRED field is either an address or `ABSENT`; Permit2 is the one Permit2 address.
276
+ * Throws `DeploymentConfigError` naming the field.
277
+ */
278
+ export function checkDeployment(key, d) {
279
+ const w = who(key);
280
+ if (d.chainId !== key)
281
+ throw new DeploymentConfigError(`${w}: the row says chainId ${d.chainId}`);
282
+ for (const f of CONTRACT_FIELDS) {
283
+ const v = d[f];
284
+ if (v !== ABSENT && !present(v))
285
+ throw new DeploymentConfigError(`${w}: ${f} is neither an address nor ABSENT`);
286
+ }
287
+ const optional = ['recipientClaims', 'holderRewards', 'teamTreasury', 'traderReferrals', 'permit2', 'quoter', 'stateView', 'zap', 'zapAerodrome', 'zapAerodromeRouter', 'presetRegistry', 'swapRatchet'];
288
+ for (const f of optional) {
289
+ const v = d[f];
290
+ if (v !== undefined && !present(v))
291
+ throw new DeploymentConfigError(`${w}: ${f} is not a non-zero address`);
292
+ }
293
+ for (const r of d.routers) {
294
+ if (!present(r.address))
295
+ throw new DeploymentConfigError(`${w}: a router is not a non-zero address`);
296
+ if (r.kind === 'universal' && !r.release)
297
+ throw new DeploymentConfigError(`${w}: the UniversalRouter ${r.address} has no recorded release`);
298
+ }
299
+ if (d.permit2 !== undefined && d.permit2.toLowerCase() !== PERMIT2.toLowerCase())
300
+ throw new DeploymentConfigError(`${w}: permit2 is not Permit2`);
301
+ const r = d.rules ?? {};
302
+ if (r.saleCost !== undefined && r.saleCost !== 'floor' && r.saleCost !== 'ceil')
303
+ throw new DeploymentConfigError(`${w}: rules.saleCost is neither 'floor' nor 'ceil'`);
304
+ if (r.sellBack !== undefined && r.sellBack !== 'stateless' && r.sellBack !== 'proRata')
305
+ throw new DeploymentConfigError(`${w}: rules.sellBack is neither 'stateless' nor 'proRata'`);
306
+ if (r.gapSkim !== undefined && typeof r.gapSkim !== 'boolean')
307
+ throw new DeploymentConfigError(`${w}: rules.gapSkim is not a boolean`);
308
+ if (d.v3)
309
+ for (const [f, v] of Object.entries(d.v3))
310
+ if (!present(v))
311
+ throw new DeploymentConfigError(`${w}: v3.${f} is not a non-zero address`);
312
+ return d;
313
+ }
314
+ /** True when a row exists for the chain — of either kind. */
315
+ export function hasDeployment(chainId, table = EVM_DEPLOYMENTS) {
316
+ return Object.prototype.hasOwnProperty.call(table, chainId);
317
+ }
318
+ /**
319
+ * The chain's row, ONLY if it carries a FLOOR set: every `CONTRACT_FIELDS` address real. Otherwise a `DeploymentConfigError`
320
+ * naming the chain and the first missing contract — never a row with an `ABSENT` field handed on.
321
+ */
322
+ export function floorDeploymentFor(chainId, table = EVM_DEPLOYMENTS) {
323
+ const d = hasDeployment(chainId, table) ? table[chainId] : undefined;
324
+ if (!d)
325
+ throw new DeploymentConfigError(`No deployment for ${who(chainId)}. Configured chains: ${Object.keys(table).join(', ')}.`);
326
+ for (const f of CONTRACT_FIELDS) {
327
+ if (!present(d[f]))
328
+ throw new DeploymentConfigError(`${who(chainId)}: ${f} is not deployed yet.`);
329
+ }
330
+ return d;
331
+ }
332
+ /** Whether a trade can settle on the chain at all: a PoolManager and at least one router. Orthogonal to having a FLOOR set. */
333
+ export function isTradable(chainId, table = EVM_DEPLOYMENTS) {
334
+ const d = hasDeployment(chainId, table) ? table[chainId] : undefined;
335
+ return !!d && d.poolManager !== ABSENT && d.routers.length > 0;
336
+ }
337
+ /** The router a single-hop pool swap goes through: the first non-`v4router` entry. A `universal` one carries its release. */
338
+ export function swapRouterOf(d) {
339
+ const r = d.routers.find((x) => x.kind !== 'v4router');
340
+ if (!r)
341
+ return null;
342
+ if (r.kind === 'universal') {
343
+ if (!r.release)
344
+ throw new DeploymentConfigError(`the UniversalRouter ${r.address} has no recorded release`);
345
+ return { address: r.address, kind: 'universal', release: r.release };
346
+ }
347
+ return { address: r.address, kind: 'poolswaptest' };
348
+ }
349
+ /** Permit2, only for a router that pulls through it (`universal`). */
350
+ export function permit2For(d, router) {
351
+ return router?.kind === 'universal' ? d.permit2 ?? null : null;
352
+ }
353
+ /** `FloorSwapRatchet`, only beside a `universal` swap router (it wraps one UniversalRouter). */
354
+ export function swapRatchetOf(d) {
355
+ const a = d.swapRatchet;
356
+ if (!present(a))
357
+ return null;
358
+ return swapRouterOf(d)?.kind === 'universal' ? a : null;
359
+ }
360
+ /** The FLOOR Platform fee ABI is on this set exactly when its row names a team vault. */
361
+ export function setHasTeamFee(d) {
362
+ return present(d.teamTreasury);
363
+ }
364
+ /** A row's optional address, or `null` where it is absent or zero. */
365
+ export function optionalAddress(a) {
366
+ return present(a) ? a : null;
367
+ }
368
+ //# sourceMappingURL=deployments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployments.js","sourceRoot":"","sources":["../src/deployments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * The errors this package throws. Each is its own class so a caller can tell a misconfiguration from an RPC failure, and
3
+ * every message names what stopped it.
4
+ */
5
+ /** A chain with no row, or a row without a FLOOR set, or a row that breaks its own rules. */
6
+ export declare class DeploymentConfigError extends Error {
7
+ constructor(message: string);
8
+ }
9
+ /** A rate a chain answered above the cap its contract enforces. Refused, never clamped and never quoted. */
10
+ export declare class RateAboveCap extends RangeError {
11
+ constructor(what: string, value: number, cap: number);
12
+ }
13
+ /** A sale whose getters answered something the walk cannot run on. */
14
+ export declare class MalformedSale extends Error {
15
+ constructor(message: string);
16
+ }
17
+ export type FloorEvmErrorCode =
18
+ /** The token is not a launch on this chain's registry. */
19
+ 'not_a_launch'
20
+ /** The registry scan ended without the token's entry. */
21
+ | 'not_found'
22
+ /** The chain answered something this package refuses to read (a wrong width, a mismatched pool). */
23
+ | 'contract_mismatch'
24
+ /** The request cannot be built: an amount, a side, a phase, a router. */
25
+ | 'bad_params'
26
+ /** The quote does not reach the caller's minimum. */
27
+ | 'min_out_unmet'
28
+ /** The pool cannot be priced (no quoter, or a quote of nothing). */
29
+ | 'no_quote'
30
+ /** The wallet is on another chain than the calls are for. Nothing was sent. */
31
+ | 'wrong_chain'
32
+ /**
33
+ * Something WAS submitted (`id` and / or `hashes` say what), but its outcome is not known yet: the wait timed out or the
34
+ * status read failed. Keep waiting on `id` / `hashes`; do not send the action again.
35
+ */
36
+ | 'pending'
37
+ /** An EIP-5792 batch the wallet reports as failed (`id` names it). */
38
+ | 'batch_failed'
39
+ /** A transaction on the per-call path reverted (`hashes` lists every one sent); the calls after it were not sent. */
40
+ | 'reverted';
41
+ export interface FloorEvmErrorOptions {
42
+ cause?: unknown;
43
+ /** The EIP-5792 batch id, where a batch was submitted. */
44
+ id?: string;
45
+ /** Every transaction hash known to have been submitted, in order. */
46
+ hashes?: readonly `0x${string}`[];
47
+ }
48
+ export declare class FloorEvmError extends Error {
49
+ readonly code: FloorEvmErrorCode;
50
+ /** The EIP-5792 batch id, where a batch was submitted. */
51
+ readonly id?: string;
52
+ /** Every transaction hash known to have been submitted, in order. */
53
+ readonly hashes?: readonly `0x${string}`[];
54
+ constructor(code: FloorEvmErrorCode, message: string, options?: FloorEvmErrorOptions);
55
+ }
56
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,6FAA6F;AAC7F,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,4GAA4G;AAC5G,qBAAa,YAAa,SAAQ,UAAU;gBAC9B,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;CAIrD;AAED,sEAAsE;AACtE,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,MAAM,iBAAiB;AAC3B,0DAA0D;AACxD,cAAc;AAChB,yDAAyD;GACvD,WAAW;AACb,oGAAoG;GAClG,mBAAmB;AACrB,yEAAyE;GACvE,YAAY;AACd,qDAAqD;GACnD,eAAe;AACjB,oEAAoE;GAClE,UAAU;AACZ,+EAA+E;GAC7E,aAAa;AACf;;;GAGG;GACD,SAAS;AACX,sEAAsE;GACpE,cAAc;AAChB,qHAAqH;GACnH,UAAU,CAAC;AAEf,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,0DAA0D;IAC1D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,MAAM,CAAC,EAAE,SAAS,KAAK,MAAM,EAAE,EAAE,CAAC;CACnC;AAED,qBAAa,aAAc,SAAQ,KAAK;IAK1B,QAAQ,CAAC,IAAI,EAAE,iBAAiB;IAJ5C,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,MAAM,EAAE,EAAE,CAAC;gBACtB,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB;CAMlG"}
package/dist/errors.js ADDED
@@ -0,0 +1,42 @@
1
+ /**
2
+ * The errors this package throws. Each is its own class so a caller can tell a misconfiguration from an RPC failure, and
3
+ * every message names what stopped it.
4
+ */
5
+ /** A chain with no row, or a row without a FLOOR set, or a row that breaks its own rules. */
6
+ export class DeploymentConfigError extends Error {
7
+ constructor(message) {
8
+ super(message);
9
+ this.name = 'DeploymentConfigError';
10
+ }
11
+ }
12
+ /** A rate a chain answered above the cap its contract enforces. Refused, never clamped and never quoted. */
13
+ export class RateAboveCap extends RangeError {
14
+ constructor(what, value, cap) {
15
+ super(`${what}: ${value} is above its cap ${cap} — refused, never quoted`);
16
+ this.name = 'RateAboveCap';
17
+ }
18
+ }
19
+ /** A sale whose getters answered something the walk cannot run on. */
20
+ export class MalformedSale extends Error {
21
+ constructor(message) {
22
+ super(message);
23
+ this.name = 'MalformedSale';
24
+ }
25
+ }
26
+ export class FloorEvmError extends Error {
27
+ code;
28
+ /** The EIP-5792 batch id, where a batch was submitted. */
29
+ id;
30
+ /** Every transaction hash known to have been submitted, in order. */
31
+ hashes;
32
+ constructor(code, message, options = {}) {
33
+ super(message, options.cause !== undefined ? { cause: options.cause } : undefined);
34
+ this.code = code;
35
+ this.name = 'FloorEvmError';
36
+ if (options.id !== undefined)
37
+ this.id = options.id;
38
+ if (options.hashes !== undefined)
39
+ this.hashes = options.hashes;
40
+ }
41
+ }
42
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,6FAA6F;AAC7F,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,4GAA4G;AAC5G,MAAM,OAAO,YAAa,SAAQ,UAAU;IAC1C,YAAY,IAAY,EAAE,KAAa,EAAE,GAAW;QAClD,KAAK,CAAC,GAAG,IAAI,KAAK,KAAK,qBAAqB,GAAG,0BAA0B,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,sEAAsE;AACtE,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAmCD,MAAM,OAAO,aAAc,SAAQ,KAAK;IAKjB;IAJrB,0DAA0D;IACjD,EAAE,CAAU;IACrB,qEAAqE;IAC5D,MAAM,CAA4B;IAC3C,YAAqB,IAAuB,EAAE,OAAe,EAAE,UAAgC,EAAE;QAC/F,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QADhE,SAAI,GAAJ,IAAI,CAAmB;QAE1C,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS;YAAE,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACjE,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Event decoders for every FLOOR contract on EVM chains: the twin of `@floorlaunchpad/sdk-solana`'s `events.ts`.
3
+ *
4
+ * A log is identified by its first topic, the event's selector. Across all of this package's ABIs each selector names
5
+ * exactly one event layout (the tests hold that), so one table decodes any FLOOR log without knowing which contract
6
+ * emitted it. `abis` names the ABIs that declare the event; an event several contracts emit lists them all.
7
+ */
8
+ import { type AbiEvent, type Address, type Hex } from 'viem';
9
+ export interface FloorEventInfo {
10
+ readonly event: AbiEvent;
11
+ /** The exported ABI constants that declare this event (`LAUNCH_ABI`, `POOL_ABI`, …). */
12
+ readonly abis: readonly string[];
13
+ }
14
+ /** The minimal log shape: what an `eth_getLogs` entry or a receipt log carries. */
15
+ export interface FloorLogInput {
16
+ readonly topics: readonly Hex[];
17
+ readonly data: Hex;
18
+ readonly address?: Address;
19
+ readonly blockNumber?: bigint | null;
20
+ readonly transactionHash?: Hex | null;
21
+ readonly logIndex?: number | null;
22
+ }
23
+ export interface DecodedFloorEvent {
24
+ readonly name: string;
25
+ readonly args: Readonly<Record<string, unknown>>;
26
+ readonly topic: Hex;
27
+ readonly abis: readonly string[];
28
+ readonly address?: Address;
29
+ readonly blockNumber?: bigint | null;
30
+ readonly transactionHash?: Hex | null;
31
+ readonly logIndex?: number | null;
32
+ }
33
+ /** Every FLOOR event, keyed by its selector (the log's first topic). */
34
+ export declare const FLOOR_EVENTS: ReadonlyMap<Hex, FloorEventInfo>;
35
+ /** The selectors of every FLOOR event with this name (`Claimed` has two). Empty for a name no ABI declares. */
36
+ export declare function floorEventTopics(name: string): Hex[];
37
+ /**
38
+ * Decode one log. `null` when its first topic is not a FLOOR event, or when the topics and data do not fit the event's
39
+ * layout (a log with the same selector from some other contract, or a truncated one): a wrong log is never decoded into
40
+ * plausible values.
41
+ */
42
+ export declare function decodeFloorLog(log: FloorLogInput): DecodedFloorEvent | null;
43
+ /** Decode every FLOOR log in a list (a receipt's logs, an `eth_getLogs` page), in order, skipping the rest. */
44
+ export declare function decodeFloorLogs(logs: readonly FloorLogInput[]): DecodedFloorEvent[];
45
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAmC,KAAK,QAAQ,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,CAAC;AAG9F,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,wFAAwF;IACxF,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AAED,mFAAmF;AACnF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,EAAE,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;IACnB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAqBD,wEAAwE;AACxE,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,GAAG,EAAE,cAAc,CAAgB,CAAC;AAE3E,+GAA+G;AAC/G,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,EAAE,CAEpD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,iBAAiB,GAAG,IAAI,CAqB3E;AAED,+GAA+G;AAC/G,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,GAAG,iBAAiB,EAAE,CAOnF"}
package/dist/events.js ADDED
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Event decoders for every FLOOR contract on EVM chains: the twin of `@floorlaunchpad/sdk-solana`'s `events.ts`.
3
+ *
4
+ * A log is identified by its first topic, the event's selector. Across all of this package's ABIs each selector names
5
+ * exactly one event layout (the tests hold that), so one table decodes any FLOOR log without knowing which contract
6
+ * emitted it. `abis` names the ABIs that declare the event; an event several contracts emit lists them all.
7
+ */
8
+ import { decodeEventLog, toEventSelector } from 'viem';
9
+ import * as ABIS from './abi/index.js';
10
+ function buildTable() {
11
+ const table = new Map();
12
+ for (const [name, abi] of Object.entries(ABIS)) {
13
+ if (!Array.isArray(abi))
14
+ continue;
15
+ for (const item of abi) {
16
+ if (item.type !== 'event')
17
+ continue;
18
+ const event = item;
19
+ const topic = toEventSelector(event);
20
+ const entry = table.get(topic);
21
+ if (entry) {
22
+ if (!entry.abis.includes(name))
23
+ entry.abis.push(name);
24
+ }
25
+ else {
26
+ table.set(topic, { event, abis: [name] });
27
+ }
28
+ }
29
+ }
30
+ return table;
31
+ }
32
+ /** Every FLOOR event, keyed by its selector (the log's first topic). */
33
+ export const FLOOR_EVENTS = buildTable();
34
+ /** The selectors of every FLOOR event with this name (`Claimed` has two). Empty for a name no ABI declares. */
35
+ export function floorEventTopics(name) {
36
+ return [...FLOOR_EVENTS].filter(([, info]) => info.event.name === name).map(([topic]) => topic);
37
+ }
38
+ /**
39
+ * Decode one log. `null` when its first topic is not a FLOOR event, or when the topics and data do not fit the event's
40
+ * layout (a log with the same selector from some other contract, or a truncated one): a wrong log is never decoded into
41
+ * plausible values.
42
+ */
43
+ export function decodeFloorLog(log) {
44
+ const topic = log.topics[0];
45
+ if (!topic)
46
+ return null;
47
+ const info = FLOOR_EVENTS.get(topic.toLowerCase());
48
+ if (!info)
49
+ return null;
50
+ let decoded;
51
+ try {
52
+ decoded = decodeEventLog({ abi: [info.event], topics: log.topics, data: log.data, strict: true });
53
+ }
54
+ catch {
55
+ return null;
56
+ }
57
+ return {
58
+ name: decoded.eventName,
59
+ args: (decoded.args ?? {}),
60
+ topic,
61
+ abis: info.abis,
62
+ address: log.address,
63
+ blockNumber: log.blockNumber,
64
+ transactionHash: log.transactionHash,
65
+ logIndex: log.logIndex,
66
+ };
67
+ }
68
+ /** Decode every FLOOR log in a list (a receipt's logs, an `eth_getLogs` page), in order, skipping the rest. */
69
+ export function decodeFloorLogs(logs) {
70
+ const out = [];
71
+ for (const log of logs) {
72
+ const decoded = decodeFloorLog(log);
73
+ if (decoded)
74
+ out.push(decoded);
75
+ }
76
+ return out;
77
+ }
78
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}