@curvefi/api 2.52.5 → 2.53.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.
package/README.md CHANGED
@@ -1235,6 +1235,7 @@ import curve from "@curvefi/api";
1235
1235
  // 0.000018613852077810 veCRV %
1236
1236
  })()
1237
1237
  ```
1238
+
1238
1239
  ### Claim fees
1239
1240
  ```ts
1240
1241
  import curve from "@curvefi/api";
@@ -1320,7 +1321,7 @@ import curve from "@curvefi/api";
1320
1321
  // [ '0.3324', '0.8309' ]
1321
1322
  await pool.userCrvApy();
1322
1323
  // 0.3324
1323
- await pool.boost();
1324
+ await pool.userBoost();
1324
1325
  // 1.0
1325
1326
 
1326
1327
  await curve.boosting.createLock(10000, 365 * 4);
@@ -1961,4 +1962,425 @@ import curve from "@curvefi/api";
1961
1962
  const underlyingBalances = await pool.stats.underlyingBalances();
1962
1963
  // [ '30', '0.017647058823529412', '0.00111111' ]
1963
1964
  })()
1964
- ```
1965
+ ```
1966
+
1967
+ ## DAO
1968
+
1969
+ ### CRV lock & boosting
1970
+ ```ts
1971
+ import curve from "@curvefi/api";
1972
+
1973
+ (async () => {
1974
+ await curve.init('JsonRpc', {}, { gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0 });
1975
+
1976
+ await curve.dao.crvSupplyStats();
1977
+ // {
1978
+ // circulating: '937026089.656962436599201901',
1979
+ // locked: '777800358.954796137125672741',
1980
+ // total: '1714826448.611758573724874642',
1981
+ // veCrv: '651092771.450194341958195502',
1982
+ // averageLockTime: '3.3484'
1983
+ // }
1984
+
1985
+ await curve.dao.userCrv();
1986
+ // 1000000.0
1987
+ const lockAmount = 10000;
1988
+ await curve.dao.crvLockApprove(lockAmount);
1989
+ // [
1990
+ // '0x01a95eba620ce129262b3f11fc9e39d8473242c24579f4030a7d86aeeb5fbec6'
1991
+ // ]
1992
+ await curve.dao.crvLockIsApproved(lockAmount);
1993
+ // true
1994
+ curve.dao.calcCrvUnlockTime(365);
1995
+ // 1733961600000
1996
+ await curve.dao.createCrvLock(lockAmount, 365);
1997
+ // 0xcce6abef337aaef4ce95d44f50270c537197b5754a8fb8f148ccb83af5d4fab2
1998
+ await curve.dao.userVeCrv();
1999
+ // {
2000
+ // veCrv: '2495.771816336870150904',
2001
+ // veCrvPct: '0.000383319071017321',
2002
+ // lockedCrv: '10000.0',
2003
+ // unlockTime: 1733961600000
2004
+ // }
2005
+
2006
+ const pool = curve.getPool("3pool");
2007
+ await pool.depositAndStake([1000, 1000, 1000]);
2008
+ // 0x19dc2d8483d09bb1f7fac5a8c4f4a8b425c5ed43b75f6f86bb500dc5532713b6
2009
+ await pool.userBoost();
2010
+ // 1.0355
2011
+ await pool.userCrvApy();
2012
+ // 1.3849750259023168
2013
+ await pool.userFutureBoost();
2014
+ // 1.0355
2015
+ await pool.userFutureCrvApy();
2016
+ // 1.3847834623550341
2017
+
2018
+ await curve.dao.crvLockApprove(lockAmount);
2019
+ // [
2020
+ // '0xfa9130cc15b228f58e833527a5f51a2de16916ce091cca45cd21efb20b41836b'
2021
+ // ]
2022
+ await curve.dao.increaseCrvLockedAmount(lockAmount);
2023
+ // 0x5113d94edab7551acc1bc31721135fb3a897b836f241fff1618aa9e2dd074a62
2024
+ //
2025
+ // {
2026
+ // veCrv: '4991.53824200910306186',
2027
+ // veCrvPct: '0.000766634619176443',
2028
+ // lockedCrv: '20000.0',
2029
+ // unlockTime: 1733961600000
2030
+ // }
2031
+ //
2032
+ // Boost: 1.0355
2033
+ // APY: 1.3849750259023168
2034
+ // Future boost: 1.0709
2035
+ // Future APY: 1.4322087422285665
2036
+
2037
+
2038
+ const { unlockTime } = await curve.dao.userVeCrv();
2039
+ curve.dao.calcCrvUnlockTime(365, unlockTime);
2040
+ // 1765411200000
2041
+ await curve.dao.increaseCrvUnlockTime(365);
2042
+ // 0xfd51b54c871a87bcef4299d0cf64a0e23ed941f103d9ca2c9f7dccdd109c5eb3
2043
+ //
2044
+ // {
2045
+ // veCrv: '9977.839453323127514238',
2046
+ // veCrvPct: '0.001532453177660863',
2047
+ // lockedCrv: '20000.0',
2048
+ // unlockTime: 1765411200000
2049
+ // }
2050
+ //
2051
+ // Boost: 1.0355 <------- PAY ATTENTION
2052
+ // APY: 1.3849750259023168 <------- PAY ATTENTION
2053
+ // Future boost: 1.1418 <------- PAY ATTENTION
2054
+ // Future APY: 1.526957520361982 <------- PAY ATTENTION
2055
+
2056
+ // Checkpoint to adjust boost
2057
+ await pool.claimCrv();
2058
+ // 0x2dc4960bfdc9310dc773baf8a5a74942e1829591c65cc3b595b6e6fdf5e2b9bd
2059
+ //
2060
+ // Boost: 1.1418
2061
+ // APY: 1.527150636963076
2062
+ // Future boost: 1.1418
2063
+ // Future APY: 1.526957517882314
2064
+
2065
+ // --- 2 years time travel ---
2066
+
2067
+ await curve.dao.claimableFees();
2068
+ // 119.110532749090134743
2069
+ await curve.dao.claimFees();
2070
+ // 0x90354b4f8c144c194439b18b8c4a87b00b0b62847757d09faa4f475c1c8a12bf
2071
+ await curve.getBalances(['3crv']);
2072
+ // ['119.110532749090134743']
2073
+
2074
+ // CRV in wallet: 980000.0
2075
+ //
2076
+ // {
2077
+ // veCrv: '0.0',
2078
+ // veCrvPct: '0',
2079
+ // lockedCrv: '20000.0',
2080
+ // unlockTime: unlockTime: 1765411200000
2081
+ // }
2082
+ await curve.dao.withdrawLockedCrv();
2083
+ // CRV in wallet: 1000000.0
2084
+ // { veCrv: '0.0', veCrvPct: '0', lockedCrv: '0.0', unlockTime: 0 }
2085
+ })()
2086
+ ```
2087
+
2088
+ ### Gauge voting
2089
+ ```ts
2090
+ import curve from "@curvefi/api";
2091
+
2092
+ (async () => {
2093
+ await curve.init('JsonRpc', {}, {gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0});
2094
+
2095
+ const pool1 = curve.getPool("3pool");
2096
+ const pool2 = curve.getPool("gusd");
2097
+ await curve.dao.crvLockApprove(10000);
2098
+ await curve.dao.createCrvLock(10000, 365 * 2);
2099
+
2100
+ await curve.dao.getVotingGaugeList();
2101
+ // [
2102
+ // {
2103
+ // poolUrl: 'https://curve.fi/#/ethereum/pools/compound/swap',
2104
+ // network: 'ethereum',
2105
+ // gaugeAddress: '0x7ca5b0a2910b33e9759dc7ddb0413949071d7575',
2106
+ // poolAddress: '0xa2b47e3d5c44877cca798226b7b8118f9bfb7a56',
2107
+ // lpTokenAddress: '0x845838df265dcd2c412a1dc9e959c7d08537f8a2',
2108
+ // poolName: 'cDAI+cUSDC (0xA2B4…)',
2109
+ // totalVeCrv: '330001.909569364585795212',
2110
+ // relativeWeight: '0.0518882916913238',
2111
+ // isKilled: false
2112
+ // },
2113
+ // {
2114
+ // poolUrl: 'https://curve.fi/#/ethereum/pools/usdt/swap',
2115
+ // network: 'ethereum',
2116
+ // gaugeAddress: '0xbc89cd85491d81c6ad2954e6d0362ee29fca8f53',
2117
+ // poolAddress: '0x52ea46506b9cc5ef470c5bf89f17dc28bb35d85c',
2118
+ // lpTokenAddress: '0x9fc689ccada600b6df723d9e47d84d76664a1f23',
2119
+ // poolName: 'cDAI+cUSDC+USDT (0x52EA…)',
2120
+ // totalVeCrv: '6223.0651613181174816',
2121
+ // relativeWeight: '0.0',
2122
+ // isKilled: false
2123
+ // },
2124
+ //
2125
+ // ...
2126
+ //
2127
+ // ]
2128
+ await curve.dao.voteForGaugeNextTime(pool1.gauge);
2129
+ // 864000000
2130
+ await curve.dao.voteForGaugeNextTime(pool2.gauge);
2131
+ // 864000000
2132
+ await curve.dao.voteForGauge(pool1.gauge, 50); // 50%
2133
+ // 0x2397cc3d620595169567a2a45d4edd48b40862a3565613e7ac90d84a2179c068
2134
+ await curve.dao.voteForGauge(pool2.gauge, 50); // 50%
2135
+ // 0x4413cca88ea2e3d9d209fd1217117d3f167dc216113691b33f59c8cf880c99a3
2136
+ await curve.dao.voteForGaugeNextTime(pool1.gauge);
2137
+ // 1703346606000
2138
+ await curve.dao.voteForGaugeNextTime(pool2.gauge);
2139
+ // 1703346607000
2140
+ await curve.dao.userGaugeVotes();
2141
+ // {
2142
+ // gauges: [
2143
+ // {
2144
+ // userPower: '50.0',
2145
+ // userVeCrv: '2494.292356354596179115',
2146
+ // userFutureVeCrv: '2494.315742326215669361',
2147
+ // expired: false,
2148
+ // gaugeData: [Object]
2149
+ // },
2150
+ // {
2151
+ // userPower: '50.0',
2152
+ // userVeCrv: '2494.292356354596179115',
2153
+ // userFutureVeCrv: '2494.315742326215669361',
2154
+ // expired: false,
2155
+ // gaugeData: [Object]
2156
+ // }
2157
+ // ],
2158
+ // powerUsed: '100.0',
2159
+ // veCrvUsed: '4988.58471270919235823'
2160
+ // }
2161
+
2162
+ await curve.dao.increaseCrvUnlockTime(365 * 2);
2163
+ await curve.dao.userGaugeVotes();
2164
+ // {
2165
+ // gauges: [
2166
+ // {
2167
+ // userPower: '50.0',
2168
+ // userVeCrv: '2494.286252219639304545', <------- PAY ATTENTION
2169
+ // userFutureVeCrv: '4936.072662988301764545', <------- PAY ATTENTION
2170
+ // expired: false,
2171
+ // gaugeData: [Object]
2172
+ // },
2173
+ // {
2174
+ // userPower: '50.0',
2175
+ // userVeCrv: '2494.286252219639304545', <------- PAY ATTENTION
2176
+ // userFutureVeCrv: '4936.072662988301764545', <------- PAY ATTENTION
2177
+ // expired: false,
2178
+ // gaugeData: [Object]
2179
+ // }
2180
+ // ],
2181
+ // powerUsed: '100.0',
2182
+ // veCrvUsed: '4988.57250443927860909'
2183
+ // }
2184
+ // Adjust voting power
2185
+ await curve.dao.voteForGauge(pool1.gauge, 50); // 50%
2186
+ // 0x3390467cf45572ce591bc6291a18d909be2826b8e37e07e5a9bcc327a538e6cb
2187
+ await curve.dao.voteForGauge(pool2.gauge, 50); // 50%
2188
+ // 0x900f7c1fcf4fd04d0ebd7e9813452e0c5d5ee96b51aaa4ff11aac555accc474c
2189
+ await curve.dao.userGaugeVotes();
2190
+ // {
2191
+ // gauges: [
2192
+ // {
2193
+ // userPower: '50.0',
2194
+ // userVeCrv: '4987.4342021815414409', <------- PAY ATTENTION
2195
+ // userFutureVeCrv: '4936.071156773182535736', <------- PAY ATTENTION
2196
+ // expired: false,
2197
+ // gaugeData: [Object]
2198
+ // },
2199
+ // {
2200
+ // userPower: '50.0',
2201
+ // userVeCrv: '4987.4342021815414409', <------- PAY ATTENTION
2202
+ // userFutureVeCrv: '4936.071156773182535736', <------- PAY ATTENTION
2203
+ // expired: false,
2204
+ // gaugeData: [Object]
2205
+ // }
2206
+ // ],
2207
+ // powerUsed: '100.0',
2208
+ // veCrvUsed: '9974.8684043630828818'
2209
+ // }
2210
+ })()
2211
+ ```
2212
+
2213
+ ### Proposal voting
2214
+ ```ts
2215
+ import curve from "@curvefi/api";
2216
+
2217
+ (async () => {
2218
+ await curve.init('JsonRpc', {}, {gasPrice: 0, maxFeePerGas: 0, maxPriorityFeePerGas: 0});
2219
+
2220
+ await curve.dao.crvLockApprove(10000);
2221
+ await curve.dao.createCrvLock(10000, 365 * 2);
2222
+
2223
+ await curve.dao.getProposalList();
2224
+ // [
2225
+ // {
2226
+ // voteId: 0,
2227
+ // voteType: 'PARAMETER',
2228
+ // creator: '0xbe286d574b1ea46f54955bd856821f84dfd20b2e',
2229
+ // startDate: 1597793388,
2230
+ // snapshotBlock: 10687053,
2231
+ // ipfsMetadata: 'First Parameter App Test Vote',
2232
+ // metadata: '',
2233
+ // votesFor: '9979599901699586154315',
2234
+ // votesAgainst: '33980416204516651932',
2235
+ // voteCount: 2,
2236
+ // supportRequired: '600000000000000000',
2237
+ // minAcceptQuorum: '150000000000000000',
2238
+ // totalSupply: '41117044156628562074952',
2239
+ // executed: true
2240
+ // },
2241
+ // {
2242
+ // voteId: 1,
2243
+ // voteType: 'PARAMETER',
2244
+ // creator: '0x431e81e5dfb5a24541b5ff8762bdef3f32f96354',
2245
+ // startDate: 1599399124,
2246
+ // snapshotBlock: 10808256,
2247
+ // ipfsMetadata: 'ipfs:QmdWcs2TZAPsHsnty3tzK4s3HqQDWxY1tdb6SHT3ErZzPY',
2248
+ // metadata: 'Update y pool A from 2000 to 1000, this will allow for a greater % of DAI in the pool',
2249
+ // votesFor: '687697469212361901850006',
2250
+ // votesAgainst: '0',
2251
+ // voteCount: 7,
2252
+ // supportRequired: '600000000000000000',
2253
+ // minAcceptQuorum: '150000000000000000',
2254
+ // totalSupply: '3688475140972975065815236',
2255
+ // executed: true
2256
+ // },
2257
+ //
2258
+ // ...
2259
+ //
2260
+ // ]
2261
+ await curve.dao.getProposal("PARAMETER", 21);
2262
+ // {
2263
+ // voteId: 21,
2264
+ // voteType: 'PARAMETER',
2265
+ // creator: '0xdedf3000d83bd3550d7d2080cc48a488c93a9442',
2266
+ // startDate: 1631370726,
2267
+ // snapshotBlock: 13205005,
2268
+ // ipfsMetadata: 'ipfs:QmUnYRTB1dUyz9QdX5GueQ6wfKG9J1b1m1RP7EXEYK2Yei',
2269
+ // metadata: '"Ramp A for the OUSD factory pool to 100. Ramping occurs over 1 week.',
2270
+ // votesFor: '138752972260900277168325110',
2271
+ // votesAgainst: '0',
2272
+ // voteCount: 8,
2273
+ // supportRequired: '600000000000000000',
2274
+ // minAcceptQuorum: '150000000000000000',
2275
+ // totalSupply: '273553555220479055026810944',
2276
+ // executed: true,
2277
+ // tx: '0x1daef794f61a1508956b35e037d57a40e60cd290b76b23f7ad251f8bf7fe1f68',
2278
+ // creatorVotingPower: 5.4902571991268546e+23,
2279
+ // script: 'Call via agent (0x4EEb3bA4f221cA16ed4A0cC7254E2E32DF948c5f):\n' +
2280
+ // ' ├─ To: 0x8CF8Af108B3B46DDC6AD596aebb917E053F0D72b\n' +
2281
+ // ' ├─ Function: ramp_A\n' +
2282
+ // " └─ Inputs: [('address', '_pool', '0x87650D7bbfC3A9F10587d7778206671719d9910D'), ('uint256', '_future_A', 100), ('uint256', '_future_time', 1632580319)]\n",
2283
+ // votes: [
2284
+ // {
2285
+ // tx: '0x84443bcf0893c9bbd95581df194be2ce746469c20e4235ec13b9cce157d6d387',
2286
+ // voteId: 21,
2287
+ // voter: '0x989aeb4d175e16225e39e87d0d97a3360524ad80',
2288
+ // supports: true,
2289
+ // stake: 9.280328082090111e+25
2290
+ // },
2291
+ // {
2292
+ // tx: '0x8d1d83db418a5ef9dd6953276e53b518fa1352ec0c9c342317794c6045841014',
2293
+ // voteId: 21,
2294
+ // voter: '0xf89501b77b2fa6329f94f5a05fe84cebb5c8b1a0',
2295
+ // supports: true,
2296
+ // stake: 8.664535170896875e+24
2297
+ // },
2298
+ //
2299
+ // ...
2300
+ ///
2301
+ // ]
2302
+ // }
2303
+ await curve.dao.getProposal("OWNERSHIP", 244);
2304
+ // {
2305
+ // voteId: 244,
2306
+ // voteType: 'OWNERSHIP',
2307
+ // creator: '0x336c82e4f54e1a6a3adb1fb115c9a6ef3a2b2b11',
2308
+ // startDate: 1671455975,
2309
+ // snapshotBlock: 16218995,
2310
+ // ipfsMetadata: 'ipfs:QmXqpz9bruFwZJ6yAWGF7EUCinc4JWdR6JeghksW2LAJ3X',
2311
+ // metadata: 'Add gauge for GEAR/ETH pool',
2312
+ // votesFor: '359521266860508503522139751',
2313
+ // votesAgainst: '0',
2314
+ // voteCount: 71,
2315
+ // supportRequired: '510000000000000000',
2316
+ // minAcceptQuorum: '300000000000000000',
2317
+ // totalSupply: '563263606319370823403134500',
2318
+ // executed: true,
2319
+ // tx: '0x9550d32f016bfd724f76bdb794925a7ce93c71dd74c7363ff6094f4809c04103',
2320
+ // creatorVotingPower: 2.522832425326041e+21,
2321
+ // script: 'Call via agent (0x40907540d8a6C65c637785e8f8B742ae6b0b9968):\n' +
2322
+ // ' ├─ To: 0x2F50D538606Fa9EDD2B11E2446BEb18C9D5846bB\n' +
2323
+ // ' ├─ Function: add_gauge\n' +
2324
+ // " └─ Inputs: [('address', 'addr', '0x37Efc3f05D659B30A83cf0B07522C9d08513Ca9d'), ('int128', 'gauge_type', 0), ('uint256', 'weight', 0)]\n",
2325
+ // votes: [
2326
+ // {
2327
+ // tx: '0x0204eb0242be7f44a34dead65ef348b41fc703b825f2904d6cb720236fe2eaa2',
2328
+ // voteId: 244,
2329
+ // voter: '0x7a16ff8270133f063aab6c9977183d9e72835428',
2330
+ // supports: true,
2331
+ // stake: 2.651051910871892e+25
2332
+ // },
2333
+ // {
2334
+ // tx: '0x057871f3c1b679e532b3823517a1204a8ea3f69e021da8c79e397061ff23c789',
2335
+ // voteId: 244,
2336
+ // voter: '0x9b44473e223f8a3c047ad86f387b80402536b029',
2337
+ // supports: true,
2338
+ // stake: 2.6993403110632674e+25
2339
+ // },
2340
+ //
2341
+ // ...
2342
+ //
2343
+ // ]
2344
+ // }
2345
+ await curve.dao.voteForProposal("PARAMETER", 21, false);
2346
+ await curve.dao.voteForProposal("OWNERSHIP", 244, true);
2347
+
2348
+ await curve.dao.userProposalVotes();
2349
+ // [
2350
+ // {
2351
+ // voteId: 21,
2352
+ // voteType: 'PARAMETER',
2353
+ // creator: '0xdedf3000d83bd3550d7d2080cc48a488c93a9442',
2354
+ // startDate: 1631370726,
2355
+ // snapshotBlock: 13205005,
2356
+ // ipfsMetadata: 'ipfs:QmUnYRTB1dUyz9QdX5GueQ6wfKG9J1b1m1RP7EXEYK2Yei',
2357
+ // metadata: '"Ramp A for the OUSD factory pool to 100. Ramping occurs over 1 week.',
2358
+ // votesFor: '138752972260900277168325110',
2359
+ // votesAgainst: '0',
2360
+ // voteCount: 8,
2361
+ // supportRequired: '600000000000000000',
2362
+ // minAcceptQuorum: '150000000000000000',
2363
+ // totalSupply: '273553555220479055026810944',
2364
+ // executed: true,
2365
+ // userVote: 'no' <------- PAY ATTENTION
2366
+ // },
2367
+ // {
2368
+ // voteId: 244,
2369
+ // voteType: 'OWNERSHIP',
2370
+ // creator: '0x336c82e4f54e1a6a3adb1fb115c9a6ef3a2b2b11',
2371
+ // startDate: 1671455975,
2372
+ // snapshotBlock: 16218995,
2373
+ // ipfsMetadata: 'ipfs:QmXqpz9bruFwZJ6yAWGF7EUCinc4JWdR6JeghksW2LAJ3X',
2374
+ // metadata: 'Add gauge for GEAR/ETH pool',
2375
+ // votesFor: '359521266860508503522139751',
2376
+ // votesAgainst: '0',
2377
+ // voteCount: 71,
2378
+ // supportRequired: '510000000000000000',
2379
+ // minAcceptQuorum: '300000000000000000',
2380
+ // totalSupply: '563263606319370823403134500',
2381
+ // executed: true,
2382
+ // userVote: 'yes' <------- PAY ATTENTION
2383
+ // },
2384
+ // ]
2385
+ })()
2386
+ ```
@@ -0,0 +1,114 @@
1
+ [
2
+ {
3
+ "stateMutability": "nonpayable",
4
+ "type": "constructor",
5
+ "inputs": [],
6
+ "outputs": []
7
+ },
8
+ {
9
+ "stateMutability": "nonpayable",
10
+ "type": "function",
11
+ "name": "add_contract",
12
+ "inputs": [
13
+ {
14
+ "name": "_contract",
15
+ "type": "address"
16
+ }
17
+ ],
18
+ "outputs": []
19
+ },
20
+ {
21
+ "stateMutability": "view",
22
+ "type": "function",
23
+ "name": "circulating_supply",
24
+ "inputs": [],
25
+ "outputs": [
26
+ {
27
+ "name": "",
28
+ "type": "uint256"
29
+ }
30
+ ]
31
+ },
32
+ {
33
+ "stateMutability": "nonpayable",
34
+ "type": "function",
35
+ "name": "set_admin",
36
+ "inputs": [
37
+ {
38
+ "name": "_new_admin",
39
+ "type": "address"
40
+ }
41
+ ],
42
+ "outputs": []
43
+ },
44
+ {
45
+ "stateMutability": "view",
46
+ "type": "function",
47
+ "name": "admin",
48
+ "inputs": [],
49
+ "outputs": [
50
+ {
51
+ "name": "",
52
+ "type": "address"
53
+ }
54
+ ]
55
+ },
56
+ {
57
+ "stateMutability": "view",
58
+ "type": "function",
59
+ "name": "CRV",
60
+ "inputs": [],
61
+ "outputs": [
62
+ {
63
+ "name": "",
64
+ "type": "address"
65
+ }
66
+ ]
67
+ },
68
+ {
69
+ "stateMutability": "view",
70
+ "type": "function",
71
+ "name": "contracts",
72
+ "inputs": [
73
+ {
74
+ "name": "arg0",
75
+ "type": "uint256"
76
+ }
77
+ ],
78
+ "outputs": [
79
+ {
80
+ "name": "",
81
+ "type": "address"
82
+ }
83
+ ]
84
+ },
85
+ {
86
+ "stateMutability": "view",
87
+ "type": "function",
88
+ "name": "num_contracts",
89
+ "inputs": [],
90
+ "outputs": [
91
+ {
92
+ "name": "",
93
+ "type": "uint256"
94
+ }
95
+ ]
96
+ },
97
+ {
98
+ "stateMutability": "view",
99
+ "type": "function",
100
+ "name": "cached_contracts",
101
+ "inputs": [
102
+ {
103
+ "name": "arg0",
104
+ "type": "uint256"
105
+ }
106
+ ],
107
+ "outputs": [
108
+ {
109
+ "name": "",
110
+ "type": "address"
111
+ }
112
+ ]
113
+ }
114
+ ]