@reserve-protocol/dtf-sdk 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.
- package/README.md +134 -0
- package/dist/abi/deployer.d.ts +281 -0
- package/dist/abi/deployer.d.ts.map +1 -0
- package/dist/abi/deployer.js +178 -0
- package/dist/abi/deployer.js.map +1 -0
- package/dist/abi/erc20.d.ts +73 -0
- package/dist/abi/erc20.d.ts.map +1 -0
- package/dist/abi/erc20.js +58 -0
- package/dist/abi/erc20.js.map +1 -0
- package/dist/abi/folio.d.ts +1950 -0
- package/dist/abi/folio.d.ts.map +1 -0
- package/dist/abi/folio.js +1430 -0
- package/dist/abi/folio.js.map +1 -0
- package/dist/abi/governance-deployer.d.ts +130 -0
- package/dist/abi/governance-deployer.d.ts.map +1 -0
- package/dist/abi/governance-deployer.js +77 -0
- package/dist/abi/governance-deployer.js.map +1 -0
- package/dist/abi/governor.d.ts +1276 -0
- package/dist/abi/governor.d.ts.map +1 -0
- package/dist/abi/governor.js +1661 -0
- package/dist/abi/governor.js.map +1 -0
- package/dist/abi/proxy-admin.d.ts +49 -0
- package/dist/abi/proxy-admin.d.ts.map +1 -0
- package/dist/abi/proxy-admin.js +42 -0
- package/dist/abi/proxy-admin.js.map +1 -0
- package/dist/abi/spells.d.ts +67 -0
- package/dist/abi/spells.d.ts.map +1 -0
- package/dist/abi/spells.js +61 -0
- package/dist/abi/spells.js.map +1 -0
- package/dist/abi/timelock.d.ts +673 -0
- package/dist/abi/timelock.d.ts.map +1 -0
- package/dist/abi/timelock.js +469 -0
- package/dist/abi/timelock.js.map +1 -0
- package/dist/abi/vote-lock.d.ts +164 -0
- package/dist/abi/vote-lock.d.ts.map +1 -0
- package/dist/abi/vote-lock.js +116 -0
- package/dist/abi/vote-lock.js.map +1 -0
- package/dist/clients/chains.d.ts +5 -0
- package/dist/clients/chains.d.ts.map +1 -0
- package/dist/clients/chains.js +23 -0
- package/dist/clients/chains.js.map +1 -0
- package/dist/clients/create-clients.d.ts +14 -0
- package/dist/clients/create-clients.d.ts.map +1 -0
- package/dist/clients/create-clients.js +32 -0
- package/dist/clients/create-clients.js.map +1 -0
- package/dist/clients/create-price-client.d.ts +7 -0
- package/dist/clients/create-price-client.d.ts.map +1 -0
- package/dist/clients/create-price-client.js +15 -0
- package/dist/clients/create-price-client.js.map +1 -0
- package/dist/constants.d.ts +35 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +100 -0
- package/dist/constants.js.map +1 -0
- package/dist/deploy/build-deploy.d.ts +7 -0
- package/dist/deploy/build-deploy.d.ts.map +1 -0
- package/dist/deploy/build-deploy.js +84 -0
- package/dist/deploy/build-deploy.js.map +1 -0
- package/dist/deploy/extract-deployed-address.d.ts +8 -0
- package/dist/deploy/extract-deployed-address.d.ts.map +1 -0
- package/dist/deploy/extract-deployed-address.js +36 -0
- package/dist/deploy/extract-deployed-address.js.map +1 -0
- package/dist/deploy/permissionless-defaults.d.ts +35 -0
- package/dist/deploy/permissionless-defaults.d.ts.map +1 -0
- package/dist/deploy/permissionless-defaults.js +76 -0
- package/dist/deploy/permissionless-defaults.js.map +1 -0
- package/dist/deploy/token-registry.d.ts +9 -0
- package/dist/deploy/token-registry.d.ts.map +1 -0
- package/dist/deploy/token-registry.js +68 -0
- package/dist/deploy/token-registry.js.map +1 -0
- package/dist/deploy/zap-deploy.d.ts +4 -0
- package/dist/deploy/zap-deploy.d.ts.map +1 -0
- package/dist/deploy/zap-deploy.js +50 -0
- package/dist/deploy/zap-deploy.js.map +1 -0
- package/dist/dtf/fees.d.ts +10 -0
- package/dist/dtf/fees.d.ts.map +1 -0
- package/dist/dtf/fees.js +103 -0
- package/dist/dtf/fees.js.map +1 -0
- package/dist/dtf/fetch-analytics.d.ts +27 -0
- package/dist/dtf/fetch-analytics.d.ts.map +1 -0
- package/dist/dtf/fetch-analytics.js +63 -0
- package/dist/dtf/fetch-analytics.js.map +1 -0
- package/dist/dtf/fetch-basket.d.ts +16 -0
- package/dist/dtf/fetch-basket.d.ts.map +1 -0
- package/dist/dtf/fetch-basket.js +32 -0
- package/dist/dtf/fetch-basket.js.map +1 -0
- package/dist/dtf/fetch-discover.d.ts +10 -0
- package/dist/dtf/fetch-discover.d.ts.map +1 -0
- package/dist/dtf/fetch-discover.js +17 -0
- package/dist/dtf/fetch-discover.js.map +1 -0
- package/dist/dtf/fetch-dtf.d.ts +25 -0
- package/dist/dtf/fetch-dtf.d.ts.map +1 -0
- package/dist/dtf/fetch-dtf.js +39 -0
- package/dist/dtf/fetch-dtf.js.map +1 -0
- package/dist/dtf/mint.d.ts +9 -0
- package/dist/dtf/mint.d.ts.map +1 -0
- package/dist/dtf/mint.js +82 -0
- package/dist/dtf/mint.js.map +1 -0
- package/dist/dtf/read-basket.d.ts +4 -0
- package/dist/dtf/read-basket.d.ts.map +1 -0
- package/dist/dtf/read-basket.js +20 -0
- package/dist/dtf/read-basket.js.map +1 -0
- package/dist/dtf/read-config.d.ts +4 -0
- package/dist/dtf/read-config.d.ts.map +1 -0
- package/dist/dtf/read-config.js +80 -0
- package/dist/dtf/read-config.js.map +1 -0
- package/dist/dtf/read-dtf.d.ts +6 -0
- package/dist/dtf/read-dtf.d.ts.map +1 -0
- package/dist/dtf/read-dtf.js +32 -0
- package/dist/dtf/read-dtf.js.map +1 -0
- package/dist/dtf/read-rebalance-control.d.ts +4 -0
- package/dist/dtf/read-rebalance-control.d.ts.map +1 -0
- package/dist/dtf/read-rebalance-control.js +14 -0
- package/dist/dtf/read-rebalance-control.js.map +1 -0
- package/dist/dtf/read-roles.d.ts +4 -0
- package/dist/dtf/read-roles.d.ts.map +1 -0
- package/dist/dtf/read-roles.js +29 -0
- package/dist/dtf/read-roles.js.map +1 -0
- package/dist/dtf/read-version.d.ts +3 -0
- package/dist/dtf/read-version.d.ts.map +1 -0
- package/dist/dtf/read-version.js +9 -0
- package/dist/dtf/read-version.js.map +1 -0
- package/dist/dtf/redeem.d.ts +5 -0
- package/dist/dtf/redeem.d.ts.map +1 -0
- package/dist/dtf/redeem.js +27 -0
- package/dist/dtf/redeem.js.map +1 -0
- package/dist/governance/build-proposal.d.ts +11 -0
- package/dist/governance/build-proposal.d.ts.map +1 -0
- package/dist/governance/build-proposal.js +78 -0
- package/dist/governance/build-proposal.js.map +1 -0
- package/dist/governance/build-settings-calldata.d.ts +39 -0
- package/dist/governance/build-settings-calldata.d.ts.map +1 -0
- package/dist/governance/build-settings-calldata.js +145 -0
- package/dist/governance/build-settings-calldata.js.map +1 -0
- package/dist/governance/compute-proposal-state.d.ts +18 -0
- package/dist/governance/compute-proposal-state.d.ts.map +1 -0
- package/dist/governance/compute-proposal-state.js +87 -0
- package/dist/governance/compute-proposal-state.js.map +1 -0
- package/dist/governance/decode-proposal.d.ts +22 -0
- package/dist/governance/decode-proposal.d.ts.map +1 -0
- package/dist/governance/decode-proposal.js +164 -0
- package/dist/governance/decode-proposal.js.map +1 -0
- package/dist/governance/fetch-proposals.d.ts +41 -0
- package/dist/governance/fetch-proposals.d.ts.map +1 -0
- package/dist/governance/fetch-proposals.js +173 -0
- package/dist/governance/fetch-proposals.js.map +1 -0
- package/dist/governance/read-governance.d.ts +7 -0
- package/dist/governance/read-governance.d.ts.map +1 -0
- package/dist/governance/read-governance.js +97 -0
- package/dist/governance/read-governance.js.map +1 -0
- package/dist/governance/read-proposals.d.ts +11 -0
- package/dist/governance/read-proposals.d.ts.map +1 -0
- package/dist/governance/read-proposals.js +104 -0
- package/dist/governance/read-proposals.js.map +1 -0
- package/dist/governance/read-voting-power.d.ts +8 -0
- package/dist/governance/read-voting-power.d.ts.map +1 -0
- package/dist/governance/read-voting-power.js +25 -0
- package/dist/governance/read-voting-power.js.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +73 -0
- package/dist/index.js.map +1 -0
- package/dist/prices/chainlink.d.ts +8 -0
- package/dist/prices/chainlink.d.ts.map +1 -0
- package/dist/prices/chainlink.js +116 -0
- package/dist/prices/chainlink.js.map +1 -0
- package/dist/prices/reserve-api.d.ts +7 -0
- package/dist/prices/reserve-api.d.ts.map +1 -0
- package/dist/prices/reserve-api.js +47 -0
- package/dist/prices/reserve-api.js.map +1 -0
- package/dist/rebalance/build-auction.d.ts +25 -0
- package/dist/rebalance/build-auction.d.ts.map +1 -0
- package/dist/rebalance/build-auction.js +73 -0
- package/dist/rebalance/build-auction.js.map +1 -0
- package/dist/rebalance/build-rebalance.d.ts +22 -0
- package/dist/rebalance/build-rebalance.d.ts.map +1 -0
- package/dist/rebalance/build-rebalance.js +30 -0
- package/dist/rebalance/build-rebalance.js.map +1 -0
- package/dist/rebalance/read-auction.d.ts +4 -0
- package/dist/rebalance/read-auction.d.ts.map +1 -0
- package/dist/rebalance/read-auction.js +31 -0
- package/dist/rebalance/read-auction.js.map +1 -0
- package/dist/rebalance/read-rebalance.d.ts +4 -0
- package/dist/rebalance/read-rebalance.d.ts.map +1 -0
- package/dist/rebalance/read-rebalance.js +50 -0
- package/dist/rebalance/read-rebalance.js.map +1 -0
- package/dist/rebalance/transform.d.ts +22 -0
- package/dist/rebalance/transform.d.ts.map +1 -0
- package/dist/rebalance/transform.js +47 -0
- package/dist/rebalance/transform.js.map +1 -0
- package/dist/revenue/compute-revenue.d.ts +45 -0
- package/dist/revenue/compute-revenue.d.ts.map +1 -0
- package/dist/revenue/compute-revenue.js +216 -0
- package/dist/revenue/compute-revenue.js.map +1 -0
- package/dist/revenue/fetch-revenue.d.ts +8 -0
- package/dist/revenue/fetch-revenue.d.ts.map +1 -0
- package/dist/revenue/fetch-revenue.js +182 -0
- package/dist/revenue/fetch-revenue.js.map +1 -0
- package/dist/revenue/fetch-rsr-burns.d.ts +9 -0
- package/dist/revenue/fetch-rsr-burns.d.ts.map +1 -0
- package/dist/revenue/fetch-rsr-burns.js +106 -0
- package/dist/revenue/fetch-rsr-burns.js.map +1 -0
- package/dist/types.d.ts +546 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/assert.d.ts +2 -0
- package/dist/utils/assert.d.ts.map +1 -0
- package/dist/utils/assert.js +5 -0
- package/dist/utils/assert.js.map +1 -0
- package/dist/utils/fetch-token-metadata.d.ts +7 -0
- package/dist/utils/fetch-token-metadata.d.ts.map +1 -0
- package/dist/utils/fetch-token-metadata.js +29 -0
- package/dist/utils/fetch-token-metadata.js.map +1 -0
- package/dist/utils/fetch-with-retry.d.ts +7 -0
- package/dist/utils/fetch-with-retry.d.ts.map +1 -0
- package/dist/utils/fetch-with-retry.js +38 -0
- package/dist/utils/fetch-with-retry.js.map +1 -0
- package/dist/utils/query-subgraph.d.ts +7 -0
- package/dist/utils/query-subgraph.d.ts.map +1 -0
- package/dist/utils/query-subgraph.js +25 -0
- package/dist/utils/query-subgraph.js.map +1 -0
- package/dist/utils/validate-price-control.d.ts +3 -0
- package/dist/utils/validate-price-control.d.ts.map +1 -0
- package/dist/utils/validate-price-control.js +6 -0
- package/dist/utils/validate-price-control.js.map +1 -0
- package/dist/vote-lock/build-vote-lock.d.ts +10 -0
- package/dist/vote-lock/build-vote-lock.d.ts.map +1 -0
- package/dist/vote-lock/build-vote-lock.js +73 -0
- package/dist/vote-lock/build-vote-lock.js.map +1 -0
- package/dist/vote-lock/read-vote-lock.d.ts +7 -0
- package/dist/vote-lock/read-vote-lock.d.ts.map +1 -0
- package/dist/vote-lock/read-vote-lock.js +64 -0
- package/dist/vote-lock/read-vote-lock.js.map +1 -0
- package/package.json +28 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { D18 } from '../constants';
|
|
2
|
+
// -- Vote-lock DAO address per chain --
|
|
3
|
+
export const VOTE_LOCK_ADDRESS = {
|
|
4
|
+
// WHY: Only Base has a permissionless vote-lock DAO deployed.
|
|
5
|
+
// Ethereum and BSC use zeroAddress as sentinel for "not available".
|
|
6
|
+
8453: '0xeDAB3789D7D2283214d8F65A6E412B00b1cBfB7a',
|
|
7
|
+
1: '0x0000000000000000000000000000000000000000',
|
|
8
|
+
56: '0x0000000000000000000000000000000000000000',
|
|
9
|
+
};
|
|
10
|
+
// -- Default fees (0.15% = D18 * 15 / 10000) --
|
|
11
|
+
export const DEFAULT_TVL_FEE = (D18 * 15n) / 10000n;
|
|
12
|
+
export const DEFAULT_MINT_FEE = (D18 * 15n) / 10000n;
|
|
13
|
+
// -- Auction length (30 min) --
|
|
14
|
+
export const DEFAULT_AUCTION_LENGTH = 1800n;
|
|
15
|
+
// -- Default flags --
|
|
16
|
+
export const DEFAULT_FLAGS = {
|
|
17
|
+
trustedFillerEnabled: true,
|
|
18
|
+
rebalanceControl: { weightControl: true, priceControl: 1 },
|
|
19
|
+
bidsEnabled: true,
|
|
20
|
+
};
|
|
21
|
+
// -- Governance params --
|
|
22
|
+
// WHY: Both owner and trading governance use identical params for permissionless deploys.
|
|
23
|
+
// This matches Register's frontend. They CAN differ for custom deploys, but the default
|
|
24
|
+
// is symmetric. See: register/src/views/deploy/utils/governance.ts
|
|
25
|
+
export const DEFAULT_TRADING_GOV_PARAMS = {
|
|
26
|
+
votingDelay: '0',
|
|
27
|
+
votingPeriod: '86400', // 24h
|
|
28
|
+
proposalThreshold: (D18 / 100n).toString(), // 1%
|
|
29
|
+
quorumThreshold: ((D18 * 3n) / 100n).toString(), // 3%
|
|
30
|
+
timelockDelay: '86400', // 24h
|
|
31
|
+
};
|
|
32
|
+
export const DEFAULT_OWNER_GOV_PARAMS = {
|
|
33
|
+
votingDelay: '0',
|
|
34
|
+
votingPeriod: '86400', // 24h
|
|
35
|
+
proposalThreshold: (D18 / 100n).toString(), // 1%
|
|
36
|
+
quorumThreshold: ((D18 * 3n) / 100n).toString(), // 3%
|
|
37
|
+
timelockDelay: '86400', // 24h
|
|
38
|
+
};
|
|
39
|
+
// -- Guardians (multi-sig addresses that can cancel proposals) --
|
|
40
|
+
export const DEFAULT_GUARDIANS = {
|
|
41
|
+
8453: ['0x7f7b3795E017389bCF44BeE9Ba1A63Fe9e019094'],
|
|
42
|
+
1: [],
|
|
43
|
+
56: [],
|
|
44
|
+
};
|
|
45
|
+
// -- Trusted auction launchers --
|
|
46
|
+
export const DEFAULT_AUCTION_LAUNCHERS = {
|
|
47
|
+
8453: [
|
|
48
|
+
'0x7f7b3795E017389bCF44BeE9Ba1A63Fe9e019094',
|
|
49
|
+
'0xe2a7B44c3Ca35F1F04e4e14a64F40E42f4e20D04',
|
|
50
|
+
'0xaDa7D4Ef3CaDF49A87d4D3a8FF80bD4cE7F0f2E0',
|
|
51
|
+
'0xE6B0F91Be5e46d2fD42c4eC88220F5d4dF4F3B64',
|
|
52
|
+
'0x32e77125db4a78A0697f3DEe6D7CC8F2d66a5D3D',
|
|
53
|
+
],
|
|
54
|
+
1: [],
|
|
55
|
+
56: [],
|
|
56
|
+
};
|
|
57
|
+
// -- Fee recipients --
|
|
58
|
+
// WHY: Platform fee portion depends on chain. Reserve takes 50% on Eth/Base, 33% on BSC.
|
|
59
|
+
const PLATFORM_FEE_RECIPIENT = '0xaE8a796Bd9437fCd009B3B3fB41bF2d17D1E08A0';
|
|
60
|
+
const PLATFORM_PORTIONS = {
|
|
61
|
+
1: (D18 * 50n) / 100n,
|
|
62
|
+
8453: (D18 * 50n) / 100n,
|
|
63
|
+
56: (D18 * 33n) / 100n,
|
|
64
|
+
};
|
|
65
|
+
// WHY: Returns string portions (not bigint) because the Zapper API accepts string-encoded values.
|
|
66
|
+
// The on-chain DeployAdditionalDetails uses bigint portions — use the SDK's `buildDeployDtfCalldata`
|
|
67
|
+
// with `FeeRecipient` type for direct contract interaction instead.
|
|
68
|
+
export function buildDefaultFeeRecipients(chainId, stTokenAddress) {
|
|
69
|
+
const platformPortion = PLATFORM_PORTIONS[chainId] ?? (D18 * 50n) / 100n;
|
|
70
|
+
const governancePortion = D18 - platformPortion;
|
|
71
|
+
return [
|
|
72
|
+
{ recipient: stTokenAddress, portion: governancePortion.toString() },
|
|
73
|
+
{ recipient: PLATFORM_FEE_RECIPIENT, portion: platformPortion.toString() },
|
|
74
|
+
];
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=permissionless-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissionless-defaults.js","sourceRoot":"","sources":["../../src/deploy/permissionless-defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Address } from 'viem';
|
|
2
|
+
import type { SupportedChainId } from '../types';
|
|
3
|
+
export type TokenEntry = {
|
|
4
|
+
address: Address;
|
|
5
|
+
decimals: number;
|
|
6
|
+
};
|
|
7
|
+
export declare function resolveToken(chainId: SupportedChainId, symbolOrAddress: string): TokenEntry | null;
|
|
8
|
+
export declare function getTokenRegistry(chainId: SupportedChainId): Record<string, TokenEntry>;
|
|
9
|
+
//# sourceMappingURL=token-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-registry.d.ts","sourceRoot":"","sources":["../../src/deploy/token-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,MAAM,MAAM,UAAU,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAA;AAgE/D,wBAAgB,YAAY,CAC1B,OAAO,EAAE,gBAAgB,EACzB,eAAe,EAAE,MAAM,GACtB,UAAU,GAAG,IAAI,CAQnB;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,GACxB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAE5B"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
const BASE_TOKENS = {
|
|
2
|
+
WETH: { address: '0x4200000000000000000000000000000000000006', decimals: 18 },
|
|
3
|
+
USDC: { address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', decimals: 6 },
|
|
4
|
+
USDbC: { address: '0xd9aAEc86B65D86f6A7B5B1b0c42FFA531710b6CA', decimals: 6 },
|
|
5
|
+
cbBTC: { address: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf', decimals: 8 },
|
|
6
|
+
cbETH: { address: '0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22', decimals: 18 },
|
|
7
|
+
DAI: { address: '0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb', decimals: 18 },
|
|
8
|
+
AERO: { address: '0x940181a94A35A4569E4529A3CDfB74e38FD98631', decimals: 18 },
|
|
9
|
+
RSR: { address: '0xaB36452DbAC151bE02b16Ca17d8919826072f64a', decimals: 18 },
|
|
10
|
+
VIRTUAL: { address: '0x0b3e328455c4059EEb9e3f84b5543F74E24e7E1b', decimals: 18 },
|
|
11
|
+
DEGEN: { address: '0x4ed4E862860beD51a9570b96d89aF5E1B0Efefed', decimals: 18 },
|
|
12
|
+
BRETT: { address: '0x532f27101965dd16442E59d40670FaF5eBB142E4', decimals: 18 },
|
|
13
|
+
TOSHI: { address: '0xAC1Bd2486aAf3B5C0fc3Fd868558b082a531B2B4', decimals: 18 },
|
|
14
|
+
EURC: { address: '0x60a3E35Cc302bFA44Cb288Bc5a4F316Fdb1adb42', decimals: 6 },
|
|
15
|
+
WELL: { address: '0xA88594D404727625A9437C3f886C7643872296AE', decimals: 18 },
|
|
16
|
+
MORPHO: { address: '0xBAa5CC21fd487B8Fcc2F632f3F4E8D37262a0842', decimals: 18 },
|
|
17
|
+
};
|
|
18
|
+
const ETH_TOKENS = {
|
|
19
|
+
WETH: { address: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', decimals: 18 },
|
|
20
|
+
USDC: { address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', decimals: 6 },
|
|
21
|
+
USDT: { address: '0xdAC17F958D2ee523a2206206994597C13D831ec7', decimals: 6 },
|
|
22
|
+
WBTC: { address: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', decimals: 8 },
|
|
23
|
+
DAI: { address: '0x6B175474E89094C44Da98b954EedeAC495271d0F', decimals: 18 },
|
|
24
|
+
RSR: { address: '0x320623b8E4fF03373931769A31Fc52A4E78B5D70', decimals: 18 },
|
|
25
|
+
stETH: { address: '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', decimals: 18 },
|
|
26
|
+
rETH: { address: '0xae78736Cd615f374D3085123A210448E74Fc6393', decimals: 18 },
|
|
27
|
+
LINK: { address: '0x514910771AF9Ca656af840dff83E8264EcF986CA', decimals: 18 },
|
|
28
|
+
UNI: { address: '0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984', decimals: 18 },
|
|
29
|
+
};
|
|
30
|
+
// WHY: BSC USDC and USDT are Binance-Peg tokens with 18 decimals, NOT 6 like Ethereum.
|
|
31
|
+
// BTCB is also 18 decimals. Do not "fix" these to match Ethereum — they are correct.
|
|
32
|
+
const BSC_TOKENS = {
|
|
33
|
+
WBNB: { address: '0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', decimals: 18 },
|
|
34
|
+
USDC: { address: '0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d', decimals: 18 },
|
|
35
|
+
USDT: { address: '0x55d398326f99059fF775485246999027B3197955', decimals: 18 },
|
|
36
|
+
BTCB: { address: '0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c', decimals: 18 },
|
|
37
|
+
ETH: { address: '0x2170Ed0880ac9A755fd29B2688956BD959F933F8', decimals: 18 },
|
|
38
|
+
RSR: { address: '0x23f72a3Db61D6CB8aBE5d9AF1Ac4B6c99327bFee', decimals: 18 },
|
|
39
|
+
CAKE: { address: '0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82', decimals: 18 },
|
|
40
|
+
XRP: { address: '0x1D2F0da169ceB9fC7B3144628dB156f3F6c60dBE', decimals: 18 },
|
|
41
|
+
};
|
|
42
|
+
const REGISTRIES = {
|
|
43
|
+
1: ETH_TOKENS,
|
|
44
|
+
56: BSC_TOKENS,
|
|
45
|
+
8453: BASE_TOKENS,
|
|
46
|
+
};
|
|
47
|
+
// WHY: Pre-build case-insensitive lookup maps to avoid O(n) scan on every call.
|
|
48
|
+
const LOOKUP_MAPS = new Map();
|
|
49
|
+
for (const [chainId, registry] of Object.entries(REGISTRIES)) {
|
|
50
|
+
const map = new Map();
|
|
51
|
+
for (const [sym, entry] of Object.entries(registry)) {
|
|
52
|
+
map.set(sym.toUpperCase(), entry);
|
|
53
|
+
}
|
|
54
|
+
LOOKUP_MAPS.set(Number(chainId), map);
|
|
55
|
+
}
|
|
56
|
+
export function resolveToken(chainId, symbolOrAddress) {
|
|
57
|
+
// Raw address — caller fetches decimals separately
|
|
58
|
+
if (symbolOrAddress.startsWith('0x'))
|
|
59
|
+
return null;
|
|
60
|
+
const map = LOOKUP_MAPS.get(chainId);
|
|
61
|
+
if (!map)
|
|
62
|
+
return null;
|
|
63
|
+
return map.get(symbolOrAddress.toUpperCase()) ?? null;
|
|
64
|
+
}
|
|
65
|
+
export function getTokenRegistry(chainId) {
|
|
66
|
+
return REGISTRIES[chainId] ?? {};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=token-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-registry.js","sourceRoot":"","sources":["../../src/deploy/token-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ZapDeployParams, ZapDeployResult } from '../types';
|
|
2
|
+
export declare function submitZapDeploy(params: ZapDeployParams, baseUrl?: string): Promise<ZapDeployResult>;
|
|
3
|
+
export declare const DEFAULT_DEPLOY_SLIPPAGE = 0.001;
|
|
4
|
+
//# sourceMappingURL=zap-deploy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zap-deploy.d.ts","sourceRoot":"","sources":["../../src/deploy/zap-deploy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAEhE,wBAAsB,eAAe,CACnC,MAAM,EAAE,eAAe,EACvB,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,eAAe,CAAC,CAwD1B;AAED,eAAO,MAAM,uBAAuB,QAAQ,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { RESERVE_API_BASE_URL } from '../constants';
|
|
2
|
+
import { fetchWithRetry } from '../utils/fetch-with-retry';
|
|
3
|
+
export async function submitZapDeploy(params, baseUrl = RESERVE_API_BASE_URL) {
|
|
4
|
+
// WHY: Governed vs ungoverned endpoint is determined by stToken presence.
|
|
5
|
+
// If stToken is set, we're deploying a governed DTF with DAO governance.
|
|
6
|
+
const endpoint = params.stToken
|
|
7
|
+
? `${baseUrl}/zapper/${params.chainId}/deploy`
|
|
8
|
+
: `${baseUrl}/zapper/${params.chainId}/deploy-ungoverned`;
|
|
9
|
+
const body = {
|
|
10
|
+
tokenIn: params.tokenIn,
|
|
11
|
+
amountIn: params.amountIn,
|
|
12
|
+
signer: params.signer,
|
|
13
|
+
slippage: params.slippage ?? DEFAULT_DEPLOY_SLIPPAGE,
|
|
14
|
+
basicDetails: params.basicDetails,
|
|
15
|
+
additionalDetails: params.additionalDetails,
|
|
16
|
+
folioFlags: params.folioFlags,
|
|
17
|
+
};
|
|
18
|
+
if (params.stToken) {
|
|
19
|
+
body.stToken = params.stToken;
|
|
20
|
+
}
|
|
21
|
+
if (params.ownerGovParams) {
|
|
22
|
+
body.ownerGovParams = params.ownerGovParams;
|
|
23
|
+
}
|
|
24
|
+
if (params.tradingGovParams) {
|
|
25
|
+
body.tradingGovParams = params.tradingGovParams;
|
|
26
|
+
}
|
|
27
|
+
if (params.basketManagers) {
|
|
28
|
+
body.basketManagers = params.basketManagers;
|
|
29
|
+
}
|
|
30
|
+
if (params.auctionLaunchers) {
|
|
31
|
+
body.auctionLaunchers = params.auctionLaunchers;
|
|
32
|
+
}
|
|
33
|
+
if (params.brandManagers) {
|
|
34
|
+
body.brandManagers = params.brandManagers;
|
|
35
|
+
}
|
|
36
|
+
// WHY: POST is not idempotent — retrying could produce stale quotes or confusing errors.
|
|
37
|
+
// Use retries: 0 for deploy, unlike read-only endpoints.
|
|
38
|
+
const response = await fetchWithRetry(endpoint, {
|
|
39
|
+
method: 'POST',
|
|
40
|
+
headers: { 'Content-Type': 'application/json' },
|
|
41
|
+
body: JSON.stringify(body),
|
|
42
|
+
}, { retries: 0 });
|
|
43
|
+
if (!response.ok) {
|
|
44
|
+
const text = await response.text().catch(() => 'unknown error');
|
|
45
|
+
throw new Error(`Zapper deploy API failed (chain ${params.chainId}): ${response.status} — ${text}`);
|
|
46
|
+
}
|
|
47
|
+
return (await response.json());
|
|
48
|
+
}
|
|
49
|
+
export const DEFAULT_DEPLOY_SLIPPAGE = 0.001;
|
|
50
|
+
//# sourceMappingURL=zap-deploy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zap-deploy.js","sourceRoot":"","sources":["../../src/deploy/zap-deploy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAG1D,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAuB,EACvB,UAAkB,oBAAoB;IAEtC,0EAA0E;IAC1E,yEAAyE;IACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO;QAC7B,CAAC,CAAC,GAAG,OAAO,WAAW,MAAM,CAAC,OAAO,SAAS;QAC9C,CAAC,CAAC,GAAG,OAAO,WAAW,MAAM,CAAC,OAAO,oBAAoB,CAAA;IAE3D,MAAM,IAAI,GAA4B;QACpC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,uBAAuB;QACpD,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;QAC3C,UAAU,EAAE,MAAM,CAAC,UAAU;KAC9B,CAAA;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;IAC/B,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAA;IAC7C,CAAC;IACD,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAA;IACjD,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAA;IAC7C,CAAC;IACD,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAA;IACjD,CAAC;IACD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAA;IAC3C,CAAC;IAED,yFAAyF;IACzF,yDAAyD;IACzD,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,QAAQ,EACR;QACE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,EACD,EAAE,OAAO,EAAE,CAAC,EAAE,CACf,CAAA;IAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAA;QAC/D,MAAM,IAAI,KAAK,CACb,mCAAmC,MAAM,CAAC,OAAO,MAAM,QAAQ,CAAC,MAAM,MAAM,IAAI,EAAE,CACnF,CAAA;IACH,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAoB,CAAA;AACnD,CAAC;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Address, type PublicClient } from 'viem';
|
|
2
|
+
import type { FeeRecipient, PendingFees, TransactionRequest } from '../types';
|
|
3
|
+
export declare function readPendingFees(publicClient: PublicClient, folioAddress: Address): Promise<PendingFees>;
|
|
4
|
+
export declare function readFeeRecipients(publicClient: PublicClient, folioAddress: Address): Promise<FeeRecipient[]>;
|
|
5
|
+
export declare function parseFeeRecipients(str: string): FeeRecipient[];
|
|
6
|
+
export declare function buildDistributeFeesCalldata(folioAddress: Address): TransactionRequest;
|
|
7
|
+
export declare function buildSetMintFeeCalldata(folioAddress: Address, fee: bigint): TransactionRequest;
|
|
8
|
+
export declare function buildSetTvlFeeCalldata(folioAddress: Address, fee: bigint): TransactionRequest;
|
|
9
|
+
export declare function buildSetFeeRecipientsCalldata(folioAddress: Address, recipients: FeeRecipient[]): TransactionRequest;
|
|
10
|
+
//# sourceMappingURL=fees.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fees.d.ts","sourceRoot":"","sources":["../../src/dtf/fees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,MAAM,CAAA;AAE1E,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAE7E,wBAAsB,eAAe,CACnC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,WAAW,CAAC,CA+BtB;AAED,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,YAAY,EAAE,CAAC,CAqBzB;AAID,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,EAAE,CAS9D;AAED,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,OAAO,GACpB,kBAAkB,CAQpB;AAED,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,OAAO,EACrB,GAAG,EAAE,MAAM,GACV,kBAAkB,CASpB;AAED,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,OAAO,EACrB,GAAG,EAAE,MAAM,GACV,kBAAkB,CASpB;AAED,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,OAAO,EACrB,UAAU,EAAE,YAAY,EAAE,GACzB,kBAAkB,CASpB"}
|
package/dist/dtf/fees.js
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { encodeFunctionData } from 'viem';
|
|
2
|
+
import folioAbi from '../abi/folio';
|
|
3
|
+
export async function readPendingFees(publicClient, folioAddress) {
|
|
4
|
+
const results = await publicClient.multicall({
|
|
5
|
+
contracts: [
|
|
6
|
+
{
|
|
7
|
+
address: folioAddress,
|
|
8
|
+
abi: folioAbi,
|
|
9
|
+
functionName: 'getPendingFeeShares',
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
address: folioAddress,
|
|
13
|
+
abi: folioAbi,
|
|
14
|
+
functionName: 'feeRecipientsPendingFeeShares',
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
address: folioAddress,
|
|
18
|
+
abi: folioAbi,
|
|
19
|
+
functionName: 'daoPendingFeeShares',
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
});
|
|
23
|
+
// WHY: Pending fees are display-only (advisory). Defaulting to 0n on failure is safe —
|
|
24
|
+
// it means "show no pending fees" rather than silently corrupting a transaction.
|
|
25
|
+
const total = results[0].status === 'success' ? results[0].result : 0n;
|
|
26
|
+
const folio = results[1].status === 'success' ? results[1].result : 0n;
|
|
27
|
+
const dao = results[2].status === 'success' ? results[2].result : 0n;
|
|
28
|
+
return { total, folio, dao };
|
|
29
|
+
}
|
|
30
|
+
export async function readFeeRecipients(publicClient, folioAddress) {
|
|
31
|
+
// WHY: feeRecipients(uint256) is indexed — no length getter. We try 0..9 and stop at the first
|
|
32
|
+
// revert. 10 is generous; real DTFs rarely have more than 3.
|
|
33
|
+
const indices = Array.from({ length: 10 }, (_, i) => i);
|
|
34
|
+
const results = await publicClient.multicall({
|
|
35
|
+
contracts: indices.map((i) => ({
|
|
36
|
+
address: folioAddress,
|
|
37
|
+
abi: folioAbi,
|
|
38
|
+
functionName: 'feeRecipients',
|
|
39
|
+
args: [BigInt(i)],
|
|
40
|
+
})),
|
|
41
|
+
});
|
|
42
|
+
const recipients = [];
|
|
43
|
+
for (const r of results) {
|
|
44
|
+
if (r.status !== 'success')
|
|
45
|
+
break;
|
|
46
|
+
const [recipient, portion] = r.result;
|
|
47
|
+
recipients.push({ recipient, portion });
|
|
48
|
+
}
|
|
49
|
+
return recipients;
|
|
50
|
+
}
|
|
51
|
+
// WHY: Subgraph stores fee recipients as "addr:portion,addr:portion" strings.
|
|
52
|
+
// This parser bridges subgraph responses → typed FeeRecipient[].
|
|
53
|
+
export function parseFeeRecipients(str) {
|
|
54
|
+
if (!str || str.trim() === '')
|
|
55
|
+
return [];
|
|
56
|
+
return str.split(',').map((entry) => {
|
|
57
|
+
const [recipient, portionStr] = entry.trim().split(':');
|
|
58
|
+
return {
|
|
59
|
+
recipient: recipient,
|
|
60
|
+
portion: BigInt(portionStr ?? '0'),
|
|
61
|
+
};
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
export function buildDistributeFeesCalldata(folioAddress) {
|
|
65
|
+
return {
|
|
66
|
+
to: folioAddress,
|
|
67
|
+
data: encodeFunctionData({
|
|
68
|
+
abi: folioAbi,
|
|
69
|
+
functionName: 'distributeFees',
|
|
70
|
+
}),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export function buildSetMintFeeCalldata(folioAddress, fee) {
|
|
74
|
+
return {
|
|
75
|
+
to: folioAddress,
|
|
76
|
+
data: encodeFunctionData({
|
|
77
|
+
abi: folioAbi,
|
|
78
|
+
functionName: 'setMintFee',
|
|
79
|
+
args: [fee],
|
|
80
|
+
}),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export function buildSetTvlFeeCalldata(folioAddress, fee) {
|
|
84
|
+
return {
|
|
85
|
+
to: folioAddress,
|
|
86
|
+
data: encodeFunctionData({
|
|
87
|
+
abi: folioAbi,
|
|
88
|
+
functionName: 'setTVLFee',
|
|
89
|
+
args: [fee],
|
|
90
|
+
}),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
export function buildSetFeeRecipientsCalldata(folioAddress, recipients) {
|
|
94
|
+
return {
|
|
95
|
+
to: folioAddress,
|
|
96
|
+
data: encodeFunctionData({
|
|
97
|
+
abi: folioAbi,
|
|
98
|
+
functionName: 'setFeeRecipients',
|
|
99
|
+
args: [recipients],
|
|
100
|
+
}),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=fees.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fees.js","sourceRoot":"","sources":["../../src/dtf/fees.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { RebalanceHistoryItem, RebalanceDetail, HistoricalDtfPoint, HistoricalPricePoint } from '../types';
|
|
2
|
+
export declare function fetchRebalanceHistory(chainId: number, folioAddress: string, opts?: {
|
|
3
|
+
skip?: number;
|
|
4
|
+
limit?: number;
|
|
5
|
+
}, baseUrl?: string): Promise<RebalanceHistoryItem[]>;
|
|
6
|
+
export declare function fetchRebalanceDetail(chainId: number, folioAddress: string, nonce: number, baseUrl?: string): Promise<RebalanceDetail>;
|
|
7
|
+
/**
|
|
8
|
+
* Fetch historical DTF data (price, totalSupply, basket over time).
|
|
9
|
+
* WHY: API requires `from` + `to` unix timestamps + `interval`, not `days`.
|
|
10
|
+
* Register uses this pattern in use-dtf-price-history.ts.
|
|
11
|
+
*/
|
|
12
|
+
export declare function fetchHistoricalDtf(chainId: number, folioAddress: string, opts?: {
|
|
13
|
+
from?: number;
|
|
14
|
+
to?: number;
|
|
15
|
+
interval?: '1h' | '1d';
|
|
16
|
+
}, baseUrl?: string): Promise<HistoricalDtfPoint[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Fetch historical token prices over time.
|
|
19
|
+
* WHY: API requires `from` + `to` unix timestamps + `interval`, not `days`.
|
|
20
|
+
* Register uses this in use-dtf-price-history.ts.
|
|
21
|
+
*/
|
|
22
|
+
export declare function fetchHistoricalPrices(chainId: number, tokenAddress: string, opts?: {
|
|
23
|
+
from?: number;
|
|
24
|
+
to?: number;
|
|
25
|
+
interval?: '1h' | '1d';
|
|
26
|
+
}, baseUrl?: string): Promise<HistoricalPricePoint[]>;
|
|
27
|
+
//# sourceMappingURL=fetch-analytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-analytics.d.ts","sourceRoot":"","sources":["../../src/dtf/fetch-analytics.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,UAAU,CAAA;AAEjB,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACxC,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAajC;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,eAAe,CAAC,CAW1B;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CAAE,EAC7D,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAsB/B;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;CAAE,EAC7D,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAoBjC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { RESERVE_API_BASE_URL } from '../constants';
|
|
2
|
+
import { fetchWithRetry } from '../utils/fetch-with-retry';
|
|
3
|
+
export async function fetchRebalanceHistory(chainId, folioAddress, opts, baseUrl = RESERVE_API_BASE_URL) {
|
|
4
|
+
const skip = opts?.skip ?? 0;
|
|
5
|
+
const limit = opts?.limit ?? 50;
|
|
6
|
+
const url = `${baseUrl}/dtf/rebalance?address=${folioAddress.toLowerCase()}&chainId=${chainId}&skip=${skip}&limit=${limit}`;
|
|
7
|
+
const response = await fetchWithRetry(url);
|
|
8
|
+
if (!response.ok) {
|
|
9
|
+
throw new Error(`Reserve API /dtf/rebalance failed: ${response.status} ${response.statusText}`);
|
|
10
|
+
}
|
|
11
|
+
return (await response.json());
|
|
12
|
+
}
|
|
13
|
+
export async function fetchRebalanceDetail(chainId, folioAddress, nonce, baseUrl = RESERVE_API_BASE_URL) {
|
|
14
|
+
const url = `${baseUrl}/dtf/rebalance?address=${folioAddress.toLowerCase()}&chainId=${chainId}&nonce=${nonce}`;
|
|
15
|
+
const response = await fetchWithRetry(url);
|
|
16
|
+
if (!response.ok) {
|
|
17
|
+
throw new Error(`Reserve API /dtf/rebalance detail failed: ${response.status} ${response.statusText}`);
|
|
18
|
+
}
|
|
19
|
+
return (await response.json());
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Fetch historical DTF data (price, totalSupply, basket over time).
|
|
23
|
+
* WHY: API requires `from` + `to` unix timestamps + `interval`, not `days`.
|
|
24
|
+
* Register uses this pattern in use-dtf-price-history.ts.
|
|
25
|
+
*/
|
|
26
|
+
export async function fetchHistoricalDtf(chainId, folioAddress, opts, baseUrl = RESERVE_API_BASE_URL) {
|
|
27
|
+
const now = Math.floor(Date.now() / 1000);
|
|
28
|
+
const to = opts?.to ?? now;
|
|
29
|
+
const from = opts?.from ?? to - 30 * 86400; // default: 30 days back
|
|
30
|
+
const interval = opts?.interval ?? '1h';
|
|
31
|
+
const url = `${baseUrl}/historical/dtf?address=${folioAddress.toLowerCase()}&chainId=${chainId}&from=${from}&to=${to}&interval=${interval}`;
|
|
32
|
+
const response = await fetchWithRetry(url);
|
|
33
|
+
if (!response.ok) {
|
|
34
|
+
throw new Error(`Reserve API /historical/dtf failed: ${response.status} ${response.statusText}`);
|
|
35
|
+
}
|
|
36
|
+
// WHY: API wraps timeseries in { address, timeseries: [...] }
|
|
37
|
+
const data = await response.json();
|
|
38
|
+
// Handle both wrapped and unwrapped response shapes
|
|
39
|
+
if (Array.isArray(data))
|
|
40
|
+
return data;
|
|
41
|
+
return data.timeseries ?? [];
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Fetch historical token prices over time.
|
|
45
|
+
* WHY: API requires `from` + `to` unix timestamps + `interval`, not `days`.
|
|
46
|
+
* Register uses this in use-dtf-price-history.ts.
|
|
47
|
+
*/
|
|
48
|
+
export async function fetchHistoricalPrices(chainId, tokenAddress, opts, baseUrl = RESERVE_API_BASE_URL) {
|
|
49
|
+
const now = Math.floor(Date.now() / 1000);
|
|
50
|
+
const to = opts?.to ?? now;
|
|
51
|
+
const from = opts?.from ?? to - 30 * 86400;
|
|
52
|
+
const interval = opts?.interval ?? '1h';
|
|
53
|
+
const url = `${baseUrl}/historical/prices?address=${tokenAddress.toLowerCase()}&chainId=${chainId}&from=${from}&to=${to}&interval=${interval}`;
|
|
54
|
+
const response = await fetchWithRetry(url);
|
|
55
|
+
if (!response.ok) {
|
|
56
|
+
throw new Error(`Reserve API /historical/prices failed: ${response.status} ${response.statusText}`);
|
|
57
|
+
}
|
|
58
|
+
const data = await response.json();
|
|
59
|
+
if (Array.isArray(data))
|
|
60
|
+
return data;
|
|
61
|
+
return data.timeseries ?? [];
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=fetch-analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-analytics.js","sourceRoot":"","sources":["../../src/dtf/fetch-analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { DtfBasketResponse } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Fetch DTF basket composition with consensus prices, weights, and DTF price.
|
|
4
|
+
* Uses the Reserve API `/current/dtf` endpoint — one call instead of RPC + price API.
|
|
5
|
+
*
|
|
6
|
+
* For raw bigint balances (needed by dtf-rebalance-lib), use `readBasket()` instead.
|
|
7
|
+
*/
|
|
8
|
+
export declare function fetchDtfBasket(chainId: number, folioAddress: string, baseUrl?: string): Promise<DtfBasketResponse>;
|
|
9
|
+
/**
|
|
10
|
+
* Batch fetch multiple DTF baskets in one call.
|
|
11
|
+
* Uses the Reserve API `/current/dtfs` endpoint.
|
|
12
|
+
*/
|
|
13
|
+
export declare function fetchDtfBaskets(chainId: number, folioAddresses: string[], baseUrl?: string): Promise<(DtfBasketResponse & {
|
|
14
|
+
address: string;
|
|
15
|
+
})[]>;
|
|
16
|
+
//# sourceMappingURL=fetch-basket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-basket.d.ts","sourceRoot":"","sources":["../../src/dtf/fetch-basket.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAEjD;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,iBAAiB,CAAC,CAW5B;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EAAE,EACxB,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,CAAC,iBAAiB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAAC,CActD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { RESERVE_API_BASE_URL } from '../constants';
|
|
2
|
+
import { fetchWithRetry } from '../utils/fetch-with-retry';
|
|
3
|
+
/**
|
|
4
|
+
* Fetch DTF basket composition with consensus prices, weights, and DTF price.
|
|
5
|
+
* Uses the Reserve API `/current/dtf` endpoint — one call instead of RPC + price API.
|
|
6
|
+
*
|
|
7
|
+
* For raw bigint balances (needed by dtf-rebalance-lib), use `readBasket()` instead.
|
|
8
|
+
*/
|
|
9
|
+
export async function fetchDtfBasket(chainId, folioAddress, baseUrl = RESERVE_API_BASE_URL) {
|
|
10
|
+
const url = `${baseUrl}/current/dtf?address=${folioAddress.toLowerCase()}&chainId=${chainId}`;
|
|
11
|
+
const response = await fetchWithRetry(url);
|
|
12
|
+
if (!response.ok) {
|
|
13
|
+
throw new Error(`Reserve API /current/dtf failed: ${response.status} ${response.statusText}`);
|
|
14
|
+
}
|
|
15
|
+
return (await response.json());
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Batch fetch multiple DTF baskets in one call.
|
|
19
|
+
* Uses the Reserve API `/current/dtfs` endpoint.
|
|
20
|
+
*/
|
|
21
|
+
export async function fetchDtfBaskets(chainId, folioAddresses, baseUrl = RESERVE_API_BASE_URL) {
|
|
22
|
+
const addresses = folioAddresses
|
|
23
|
+
.map((a) => a.toLowerCase())
|
|
24
|
+
.join(',');
|
|
25
|
+
const url = `${baseUrl}/current/dtfs?addresses=${addresses}&chainId=${chainId}`;
|
|
26
|
+
const response = await fetchWithRetry(url);
|
|
27
|
+
if (!response.ok) {
|
|
28
|
+
throw new Error(`Reserve API /current/dtfs failed: ${response.status} ${response.statusText}`);
|
|
29
|
+
}
|
|
30
|
+
return (await response.json());
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=fetch-basket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-basket.js","sourceRoot":"","sources":["../../src/dtf/fetch-basket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAG1D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAe,EACf,YAAoB,EACpB,UAAkB,oBAAoB;IAEtC,MAAM,GAAG,GAAG,GAAG,OAAO,wBAAwB,YAAY,CAAC,WAAW,EAAE,YAAY,OAAO,EAAE,CAAA;IAE7F,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,oCAAoC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC7E,CAAA;IACH,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAsB,CAAA;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAe,EACf,cAAwB,EACxB,UAAkB,oBAAoB;IAEtC,MAAM,SAAS,GAAG,cAAc;SAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC3B,IAAI,CAAC,GAAG,CAAC,CAAA;IACZ,MAAM,GAAG,GAAG,GAAG,OAAO,2BAA2B,SAAS,YAAY,OAAO,EAAE,CAAA;IAE/E,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,qCAAqC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC9E,CAAA;IACH,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAgD,CAAA;AAC/E,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DtfDiscoverItem } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Discover DTFs on a given chain.
|
|
4
|
+
* Returns paginated list sorted by market cap, with performance history and brand data.
|
|
5
|
+
*/
|
|
6
|
+
export declare function fetchDtfDiscover(chainId: number, opts?: {
|
|
7
|
+
skip?: number;
|
|
8
|
+
limit?: number;
|
|
9
|
+
}, baseUrl?: string): Promise<DtfDiscoverItem[]>;
|
|
10
|
+
//# sourceMappingURL=fetch-discover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-discover.d.ts","sourceRoot":"","sources":["../../src/dtf/fetch-discover.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE/C;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACxC,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,eAAe,EAAE,CAAC,CAa5B"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { RESERVE_API_BASE_URL } from '../constants';
|
|
2
|
+
import { fetchWithRetry } from '../utils/fetch-with-retry';
|
|
3
|
+
/**
|
|
4
|
+
* Discover DTFs on a given chain.
|
|
5
|
+
* Returns paginated list sorted by market cap, with performance history and brand data.
|
|
6
|
+
*/
|
|
7
|
+
export async function fetchDtfDiscover(chainId, opts, baseUrl = RESERVE_API_BASE_URL) {
|
|
8
|
+
const skip = opts?.skip ?? 0;
|
|
9
|
+
const limit = opts?.limit ?? 25;
|
|
10
|
+
const url = `${baseUrl}/discover/dtf?chainId=${chainId}&skip=${skip}&limit=${limit}`;
|
|
11
|
+
const response = await fetchWithRetry(url);
|
|
12
|
+
if (!response.ok) {
|
|
13
|
+
throw new Error(`Reserve API /discover/dtf failed: ${response.status} ${response.statusText}`);
|
|
14
|
+
}
|
|
15
|
+
return (await response.json());
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=fetch-discover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-discover.js","sourceRoot":"","sources":["../../src/dtf/fetch-discover.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAG1D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAe,EACf,IAAwC,EACxC,UAAkB,oBAAoB;IAEtC,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,CAAC,CAAA;IAC5B,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAA;IAC/B,MAAM,GAAG,GAAG,GAAG,OAAO,yBAAyB,OAAO,SAAS,IAAI,UAAU,KAAK,EAAE,CAAA;IAEpF,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,qCAAqC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC9E,CAAA;IACH,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAsB,CAAA;AACrD,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Address, Hex } from 'viem';
|
|
2
|
+
import type { VoteLockPosition } from '../types';
|
|
3
|
+
export type ZapQuoteParams = {
|
|
4
|
+
tokenIn: Address;
|
|
5
|
+
tokenOut: Address;
|
|
6
|
+
amountIn: bigint;
|
|
7
|
+
slippage: number;
|
|
8
|
+
sender: Address;
|
|
9
|
+
recipient: Address;
|
|
10
|
+
};
|
|
11
|
+
export type ZapQuote = {
|
|
12
|
+
amountOut: bigint;
|
|
13
|
+
to: Address;
|
|
14
|
+
data: Hex;
|
|
15
|
+
value: bigint;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Fetch the current price of a DTF from the Reserve API.
|
|
19
|
+
* WHY: Uses /current/dtf endpoint (not the dead /dtf/price).
|
|
20
|
+
* Register uses this same endpoint in use-dtf-price.ts.
|
|
21
|
+
*/
|
|
22
|
+
export declare function fetchDtfPrice(chainId: number, folioAddress: string, baseUrl?: string): Promise<number>;
|
|
23
|
+
export declare function fetchZapQuote(chainId: number, params: ZapQuoteParams, baseUrl?: string): Promise<ZapQuote>;
|
|
24
|
+
export declare function fetchVoteLockPositions(baseUrl?: string): Promise<VoteLockPosition[]>;
|
|
25
|
+
//# sourceMappingURL=fetch-dtf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-dtf.d.ts","sourceRoot":"","sources":["../../src/dtf/fetch-dtf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAExC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAGhD,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,OAAO,CAAA;IACX,IAAI,EAAE,GAAG,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,QAAQ,CAAC,CAuBnB;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,GAAE,MAA6B,GACrC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAS7B"}
|