@reserve-protocol/dtf-sdk 0.1.0 → 0.1.2

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 (158) hide show
  1. package/dist/abi/distributor.d.ts +21 -0
  2. package/dist/abi/distributor.d.ts.map +1 -0
  3. package/dist/abi/facade-read.d.ts +140 -0
  4. package/dist/abi/facade-read.d.ts.map +1 -0
  5. package/dist/abi/main.d.ts +102 -0
  6. package/dist/abi/main.d.ts.map +1 -0
  7. package/dist/abi/st-rsr.d.ts +104 -0
  8. package/dist/abi/st-rsr.d.ts.map +1 -0
  9. package/dist/ccip-9vnc6854.js +14 -0
  10. package/dist/ccip-tn8s4j8m.js +14 -0
  11. package/dist/constants.d.ts +2 -0
  12. package/dist/constants.d.ts.map +1 -1
  13. package/dist/index-aarnj29d.js +2889 -0
  14. package/dist/index-azrx1hqn.js +6105 -0
  15. package/dist/index-qp8fkhx7.js +2109 -0
  16. package/dist/index-sdksp5px.js +30 -0
  17. package/dist/index-tdmavmz7.js +6097 -0
  18. package/dist/index-wjqsw4fc.js +357 -0
  19. package/dist/index.d.ts +14 -2
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +18227 -73
  22. package/dist/secp256k1-53bx94th.js +16 -0
  23. package/dist/types.d.ts +51 -0
  24. package/dist/types.d.ts.map +1 -1
  25. package/dist/utils/query-subgraph.d.ts +2 -1
  26. package/dist/utils/query-subgraph.d.ts.map +1 -1
  27. package/dist/yield-dtf/detect-dtf-type.d.ts +13 -0
  28. package/dist/yield-dtf/detect-dtf-type.d.ts.map +1 -0
  29. package/dist/yield-dtf/issue.d.ts +22 -0
  30. package/dist/yield-dtf/issue.d.ts.map +1 -0
  31. package/dist/yield-dtf/read-backing.d.ts +15 -0
  32. package/dist/yield-dtf/read-backing.d.ts.map +1 -0
  33. package/dist/yield-dtf/read-basket.d.ts +10 -0
  34. package/dist/yield-dtf/read-basket.d.ts.map +1 -0
  35. package/dist/yield-dtf/read-components.d.ts +8 -0
  36. package/dist/yield-dtf/read-components.d.ts.map +1 -0
  37. package/dist/yield-dtf/read-config.d.ts +8 -0
  38. package/dist/yield-dtf/read-config.d.ts.map +1 -0
  39. package/dist/yield-dtf/read-distribution.d.ts +8 -0
  40. package/dist/yield-dtf/read-distribution.d.ts.map +1 -0
  41. package/dist/yield-dtf/read-st-rsr.d.ts +7 -0
  42. package/dist/yield-dtf/read-st-rsr.d.ts.map +1 -0
  43. package/package.json +5 -3
  44. package/dist/abi/deployer.js +0 -178
  45. package/dist/abi/deployer.js.map +0 -1
  46. package/dist/abi/erc20.js +0 -58
  47. package/dist/abi/erc20.js.map +0 -1
  48. package/dist/abi/folio.js +0 -1430
  49. package/dist/abi/folio.js.map +0 -1
  50. package/dist/abi/governance-deployer.js +0 -77
  51. package/dist/abi/governance-deployer.js.map +0 -1
  52. package/dist/abi/governor.js +0 -1661
  53. package/dist/abi/governor.js.map +0 -1
  54. package/dist/abi/proxy-admin.js +0 -42
  55. package/dist/abi/proxy-admin.js.map +0 -1
  56. package/dist/abi/spells.js +0 -61
  57. package/dist/abi/spells.js.map +0 -1
  58. package/dist/abi/timelock.js +0 -469
  59. package/dist/abi/timelock.js.map +0 -1
  60. package/dist/abi/vote-lock.js +0 -116
  61. package/dist/abi/vote-lock.js.map +0 -1
  62. package/dist/clients/chains.js +0 -23
  63. package/dist/clients/chains.js.map +0 -1
  64. package/dist/clients/create-clients.js +0 -32
  65. package/dist/clients/create-clients.js.map +0 -1
  66. package/dist/clients/create-price-client.js +0 -15
  67. package/dist/clients/create-price-client.js.map +0 -1
  68. package/dist/constants.js +0 -100
  69. package/dist/constants.js.map +0 -1
  70. package/dist/deploy/build-deploy.js +0 -84
  71. package/dist/deploy/build-deploy.js.map +0 -1
  72. package/dist/deploy/extract-deployed-address.js +0 -36
  73. package/dist/deploy/extract-deployed-address.js.map +0 -1
  74. package/dist/deploy/permissionless-defaults.js +0 -76
  75. package/dist/deploy/permissionless-defaults.js.map +0 -1
  76. package/dist/deploy/token-registry.js +0 -68
  77. package/dist/deploy/token-registry.js.map +0 -1
  78. package/dist/deploy/zap-deploy.js +0 -50
  79. package/dist/deploy/zap-deploy.js.map +0 -1
  80. package/dist/dtf/fees.js +0 -103
  81. package/dist/dtf/fees.js.map +0 -1
  82. package/dist/dtf/fetch-analytics.js +0 -63
  83. package/dist/dtf/fetch-analytics.js.map +0 -1
  84. package/dist/dtf/fetch-basket.js +0 -32
  85. package/dist/dtf/fetch-basket.js.map +0 -1
  86. package/dist/dtf/fetch-discover.js +0 -17
  87. package/dist/dtf/fetch-discover.js.map +0 -1
  88. package/dist/dtf/fetch-dtf.js +0 -39
  89. package/dist/dtf/fetch-dtf.js.map +0 -1
  90. package/dist/dtf/mint.js +0 -82
  91. package/dist/dtf/mint.js.map +0 -1
  92. package/dist/dtf/read-basket.js +0 -20
  93. package/dist/dtf/read-basket.js.map +0 -1
  94. package/dist/dtf/read-config.js +0 -80
  95. package/dist/dtf/read-config.js.map +0 -1
  96. package/dist/dtf/read-dtf.js +0 -32
  97. package/dist/dtf/read-dtf.js.map +0 -1
  98. package/dist/dtf/read-rebalance-control.js +0 -14
  99. package/dist/dtf/read-rebalance-control.js.map +0 -1
  100. package/dist/dtf/read-roles.js +0 -29
  101. package/dist/dtf/read-roles.js.map +0 -1
  102. package/dist/dtf/read-version.js +0 -9
  103. package/dist/dtf/read-version.js.map +0 -1
  104. package/dist/dtf/redeem.js +0 -27
  105. package/dist/dtf/redeem.js.map +0 -1
  106. package/dist/governance/build-proposal.js +0 -78
  107. package/dist/governance/build-proposal.js.map +0 -1
  108. package/dist/governance/build-settings-calldata.js +0 -145
  109. package/dist/governance/build-settings-calldata.js.map +0 -1
  110. package/dist/governance/compute-proposal-state.js +0 -87
  111. package/dist/governance/compute-proposal-state.js.map +0 -1
  112. package/dist/governance/decode-proposal.js +0 -164
  113. package/dist/governance/decode-proposal.js.map +0 -1
  114. package/dist/governance/fetch-proposals.js +0 -173
  115. package/dist/governance/fetch-proposals.js.map +0 -1
  116. package/dist/governance/read-governance.js +0 -97
  117. package/dist/governance/read-governance.js.map +0 -1
  118. package/dist/governance/read-proposals.js +0 -104
  119. package/dist/governance/read-proposals.js.map +0 -1
  120. package/dist/governance/read-voting-power.js +0 -25
  121. package/dist/governance/read-voting-power.js.map +0 -1
  122. package/dist/index.js.map +0 -1
  123. package/dist/prices/chainlink.js +0 -116
  124. package/dist/prices/chainlink.js.map +0 -1
  125. package/dist/prices/reserve-api.js +0 -47
  126. package/dist/prices/reserve-api.js.map +0 -1
  127. package/dist/rebalance/build-auction.js +0 -73
  128. package/dist/rebalance/build-auction.js.map +0 -1
  129. package/dist/rebalance/build-rebalance.js +0 -30
  130. package/dist/rebalance/build-rebalance.js.map +0 -1
  131. package/dist/rebalance/read-auction.js +0 -31
  132. package/dist/rebalance/read-auction.js.map +0 -1
  133. package/dist/rebalance/read-rebalance.js +0 -50
  134. package/dist/rebalance/read-rebalance.js.map +0 -1
  135. package/dist/rebalance/transform.js +0 -47
  136. package/dist/rebalance/transform.js.map +0 -1
  137. package/dist/revenue/compute-revenue.js +0 -216
  138. package/dist/revenue/compute-revenue.js.map +0 -1
  139. package/dist/revenue/fetch-revenue.js +0 -182
  140. package/dist/revenue/fetch-revenue.js.map +0 -1
  141. package/dist/revenue/fetch-rsr-burns.js +0 -106
  142. package/dist/revenue/fetch-rsr-burns.js.map +0 -1
  143. package/dist/types.js +0 -2
  144. package/dist/types.js.map +0 -1
  145. package/dist/utils/assert.js +0 -5
  146. package/dist/utils/assert.js.map +0 -1
  147. package/dist/utils/fetch-token-metadata.js +0 -29
  148. package/dist/utils/fetch-token-metadata.js.map +0 -1
  149. package/dist/utils/fetch-with-retry.js +0 -38
  150. package/dist/utils/fetch-with-retry.js.map +0 -1
  151. package/dist/utils/query-subgraph.js +0 -25
  152. package/dist/utils/query-subgraph.js.map +0 -1
  153. package/dist/utils/validate-price-control.js +0 -6
  154. package/dist/utils/validate-price-control.js.map +0 -1
  155. package/dist/vote-lock/build-vote-lock.js +0 -73
  156. package/dist/vote-lock/build-vote-lock.js.map +0 -1
  157. package/dist/vote-lock/read-vote-lock.js +0 -64
  158. package/dist/vote-lock/read-vote-lock.js.map +0 -1
@@ -1,173 +0,0 @@
1
- import { SUBGRAPH_URLS } from '../constants';
2
- import { fetchWithRetry } from '../utils/fetch-with-retry';
3
- const PROPOSALS_QUERY = `
4
- query getProposals($governance: String!, $first: Int!) {
5
- proposals(
6
- where: { governance: $governance }
7
- orderBy: creationTime
8
- orderDirection: desc
9
- first: $first
10
- ) {
11
- id
12
- proposer { address }
13
- state
14
- description
15
- forWeightedVotes
16
- againstWeightedVotes
17
- abstainWeightedVotes
18
- quorumVotes
19
- voteStart
20
- voteEnd
21
- creationTime
22
- executionTime
23
- cancellationTime
24
- }
25
- }
26
- `;
27
- const ALL_PROPOSALS_QUERY = `
28
- query getAllProposals($first: Int!) {
29
- proposals(
30
- orderBy: creationTime
31
- orderDirection: desc
32
- first: $first
33
- ) {
34
- id
35
- proposer { address }
36
- state
37
- description
38
- forWeightedVotes
39
- againstWeightedVotes
40
- abstainWeightedVotes
41
- quorumVotes
42
- voteStart
43
- voteEnd
44
- creationTime
45
- executionTime
46
- cancellationTime
47
- governance { id }
48
- }
49
- }
50
- `;
51
- const ALL_PROPOSALS_WITH_STATES_QUERY = `
52
- query getAllProposals($first: Int!, $states: [String!]) {
53
- proposals(
54
- where: { state_in: $states }
55
- orderBy: creationTime
56
- orderDirection: desc
57
- first: $first
58
- ) {
59
- id
60
- proposer { address }
61
- state
62
- description
63
- forWeightedVotes
64
- againstWeightedVotes
65
- abstainWeightedVotes
66
- quorumVotes
67
- voteStart
68
- voteEnd
69
- creationTime
70
- executionTime
71
- cancellationTime
72
- governance { id }
73
- }
74
- }
75
- `;
76
- /**
77
- * Fetch proposals for a governor address from the subgraph.
78
- * Returns most recent proposals first.
79
- *
80
- * NOTE: Subgraph only tracks on-chain events. States like DEFEATED, EXPIRED,
81
- * and SUCCEEDED are computed by the governor contract and require RPC calls.
82
- * The state field here reflects the last on-chain event state.
83
- */
84
- export async function fetchProposals(chainId, governorAddress, first = 20) {
85
- const url = SUBGRAPH_URLS[chainId];
86
- if (!url)
87
- throw new Error(`No subgraph URL for chainId ${chainId}`);
88
- const response = await fetchWithRetry(url, {
89
- method: 'POST',
90
- headers: { 'Content-Type': 'application/json' },
91
- body: JSON.stringify({
92
- query: PROPOSALS_QUERY,
93
- variables: {
94
- governance: governorAddress.toLowerCase(),
95
- first,
96
- },
97
- }),
98
- });
99
- if (!response.ok) {
100
- throw new Error(`Subgraph query failed for proposals: ${response.status} ${response.statusText}`);
101
- }
102
- const json = (await response.json());
103
- if (json.errors?.length) {
104
- throw new Error(`Subgraph error: ${JSON.stringify(json.errors)}`);
105
- }
106
- const proposals = json.data?.proposals ?? [];
107
- return proposals.map((p) => ({
108
- proposalId: p.id,
109
- proposer: p.proposer.address,
110
- state: p.state,
111
- description: p.description,
112
- forWeightedVotes: p.forWeightedVotes,
113
- againstWeightedVotes: p.againstWeightedVotes,
114
- abstainWeightedVotes: p.abstainWeightedVotes,
115
- quorumVotes: p.quorumVotes,
116
- voteStart: p.voteStart,
117
- voteEnd: p.voteEnd,
118
- creationTime: Number(p.creationTime),
119
- executionTime: p.executionTime ? Number(p.executionTime) : null,
120
- cancellationTime: p.cancellationTime ? Number(p.cancellationTime) : null,
121
- }));
122
- }
123
- /**
124
- * Fetch proposals across ALL DTFs from the subgraph (no governor filter).
125
- * Optionally filter by state. Returns most recent proposals first.
126
- *
127
- * NOTE: Same subgraph state caveat as fetchProposals — states like DEFEATED,
128
- * EXPIRED, and SUCCEEDED are computed by the governor contract, not the subgraph.
129
- */
130
- export async function fetchAllProposals(chainId, opts) {
131
- const url = SUBGRAPH_URLS[chainId];
132
- if (!url)
133
- throw new Error(`No subgraph URL for chainId ${chainId}`);
134
- const first = opts?.first ?? 20;
135
- const hasStates = opts?.states && opts.states.length > 0;
136
- const query = hasStates
137
- ? ALL_PROPOSALS_WITH_STATES_QUERY
138
- : ALL_PROPOSALS_QUERY;
139
- const variables = { first };
140
- if (hasStates) {
141
- variables.states = opts.states;
142
- }
143
- const response = await fetchWithRetry(url, {
144
- method: 'POST',
145
- headers: { 'Content-Type': 'application/json' },
146
- body: JSON.stringify({ query, variables }),
147
- });
148
- if (!response.ok) {
149
- throw new Error(`Subgraph query failed for all proposals: ${response.status} ${response.statusText}`);
150
- }
151
- const json = (await response.json());
152
- if (json.errors?.length) {
153
- throw new Error(`Subgraph error: ${JSON.stringify(json.errors)}`);
154
- }
155
- const proposals = json.data?.proposals ?? [];
156
- return proposals.map((p) => ({
157
- proposalId: p.id,
158
- proposer: p.proposer.address,
159
- state: p.state,
160
- description: p.description,
161
- forWeightedVotes: p.forWeightedVotes,
162
- againstWeightedVotes: p.againstWeightedVotes,
163
- abstainWeightedVotes: p.abstainWeightedVotes,
164
- quorumVotes: p.quorumVotes,
165
- voteStart: p.voteStart,
166
- voteEnd: p.voteEnd,
167
- creationTime: Number(p.creationTime),
168
- executionTime: p.executionTime ? Number(p.executionTime) : null,
169
- cancellationTime: p.cancellationTime ? Number(p.cancellationTime) : null,
170
- governorAddress: p.governance.id,
171
- }));
172
- }
173
- //# sourceMappingURL=fetch-proposals.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetch-proposals.js","sourceRoot":"","sources":["../../src/governance/fetch-proposals.ts"],"names":[],"mappings":"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"}
@@ -1,97 +0,0 @@
1
- import governorAbi from '../abi/governor';
2
- import timelockAbi from '../abi/timelock';
3
- export async function readProposalVotes(publicClient, governorAddress, proposalId) {
4
- const result = (await publicClient.readContract({
5
- address: governorAddress,
6
- abi: governorAbi,
7
- functionName: 'proposalVotes',
8
- args: [proposalId],
9
- }));
10
- return {
11
- againstVotes: result[0],
12
- forVotes: result[1],
13
- abstainVotes: result[2],
14
- };
15
- }
16
- export async function readHasVoted(publicClient, governorAddress, proposalId, account) {
17
- return (await publicClient.readContract({
18
- address: governorAddress,
19
- abi: governorAbi,
20
- functionName: 'hasVoted',
21
- args: [proposalId, account],
22
- }));
23
- }
24
- export async function readQuorum(publicClient, governorAddress, timepoint) {
25
- // WHY: quorum() requires a past timepoint. clock() returns current block (uint48 → number),
26
- // so we subtract 12 (~2.4 minutes) to ensure the timepoint is finalized and quorum snapshot exists.
27
- const tp = timepoint ??
28
- BigInt((await publicClient.readContract({
29
- address: governorAddress,
30
- abi: governorAbi,
31
- functionName: 'clock',
32
- }))) -
33
- 12n;
34
- return (await publicClient.readContract({
35
- address: governorAddress,
36
- abi: governorAbi,
37
- functionName: 'quorum',
38
- args: [tp],
39
- }));
40
- }
41
- export async function readGovernanceSettings(publicClient, governorAddress, timelockAddress) {
42
- const results = await publicClient.multicall({
43
- contracts: [
44
- {
45
- address: governorAddress,
46
- abi: governorAbi,
47
- functionName: 'votingDelay',
48
- },
49
- {
50
- address: governorAddress,
51
- abi: governorAbi,
52
- functionName: 'votingPeriod',
53
- },
54
- {
55
- address: governorAddress,
56
- abi: governorAbi,
57
- functionName: 'proposalThreshold',
58
- },
59
- {
60
- address: governorAddress,
61
- abi: governorAbi,
62
- functionName: 'quorumNumerator',
63
- },
64
- {
65
- address: governorAddress,
66
- abi: governorAbi,
67
- functionName: 'quorumDenominator',
68
- },
69
- {
70
- address: timelockAddress,
71
- abi: timelockAbi,
72
- functionName: 'getMinDelay',
73
- },
74
- ],
75
- });
76
- // WHY: Governance settings are critical for voting safety. If any RPC call fails,
77
- // a silent 0n could mislead UIs into thinking there's no voting delay or zero quorum.
78
- // Throw on failure rather than silently defaulting.
79
- const fields = [
80
- 'votingDelay', 'votingPeriod', 'proposalThreshold',
81
- 'quorumNumerator', 'quorumDenominator', 'timelockMinDelay',
82
- ];
83
- for (let i = 0; i < results.length; i++) {
84
- if (results[i].status !== 'success') {
85
- throw new Error(`Failed to read ${fields[i]} from governor ${governorAddress}`);
86
- }
87
- }
88
- return {
89
- votingDelay: results[0].result,
90
- votingPeriod: results[1].result,
91
- proposalThreshold: results[2].result,
92
- quorumNumerator: results[3].result,
93
- quorumDenominator: results[4].result,
94
- timelockMinDelay: results[5].result,
95
- };
96
- }
97
- //# sourceMappingURL=read-governance.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read-governance.js","sourceRoot":"","sources":["../../src/governance/read-governance.ts"],"names":[],"mappings":"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"}
@@ -1,104 +0,0 @@
1
- import governorAbi from '../abi/governor';
2
- import { PROPOSAL_STATE_MAP } from '../constants';
3
- export async function readProposalState(publicClient, governorAddress, proposalId) {
4
- const stateNum = (await publicClient.readContract({
5
- address: governorAddress,
6
- abi: governorAbi,
7
- functionName: 'state',
8
- args: [proposalId],
9
- }));
10
- const state = PROPOSAL_STATE_MAP[stateNum];
11
- if (!state) {
12
- throw new Error(`Unknown proposal state ${stateNum} for proposal ${proposalId} on governor ${governorAddress}`);
13
- }
14
- return state;
15
- }
16
- export async function readProposalDetails(publicClient, governorAddress, proposalId) {
17
- const [stateNum, eta, deadline, snapshot] = await Promise.all([
18
- publicClient.readContract({
19
- address: governorAddress,
20
- abi: governorAbi,
21
- functionName: 'state',
22
- args: [proposalId],
23
- }),
24
- publicClient.readContract({
25
- address: governorAddress,
26
- abi: governorAbi,
27
- functionName: 'proposalEta',
28
- args: [proposalId],
29
- }),
30
- publicClient.readContract({
31
- address: governorAddress,
32
- abi: governorAbi,
33
- functionName: 'proposalDeadline',
34
- args: [proposalId],
35
- }),
36
- publicClient.readContract({
37
- address: governorAddress,
38
- abi: governorAbi,
39
- functionName: 'proposalSnapshot',
40
- args: [proposalId],
41
- }),
42
- ]);
43
- const state = PROPOSAL_STATE_MAP[stateNum];
44
- if (!state) {
45
- throw new Error(`Unknown proposal state ${stateNum} for proposal ${proposalId} on governor ${governorAddress}`);
46
- }
47
- return {
48
- proposalId,
49
- state,
50
- eta,
51
- deadline,
52
- snapshot,
53
- };
54
- }
55
- /**
56
- * Read proposal actions (targets, calldatas, values) from ProposalCreated event logs.
57
- * WHY: Proposal actions aren't stored on-chain as a getter — they're emitted in ProposalCreated events.
58
- * We scan logs from the snapshot block (when proposal was created) to find the event.
59
- */
60
- export async function readProposalActions(publicClient, governorAddress, proposalId, fromBlock) {
61
- // If no fromBlock provided, try to get it from proposal snapshot
62
- const searchFrom = fromBlock ??
63
- (await publicClient.readContract({
64
- address: governorAddress,
65
- abi: governorAbi,
66
- functionName: 'proposalSnapshot',
67
- args: [proposalId],
68
- }));
69
- // WHY: Search a generous range around the snapshot block.
70
- // The ProposalCreated event fires in the same tx that creates the proposal,
71
- // which is at or slightly before the snapshot block.
72
- const startBlock = searchFrom > 1000n ? searchFrom - 1000n : 0n;
73
- const logs = await publicClient.getLogs({
74
- address: governorAddress,
75
- event: {
76
- type: 'event',
77
- name: 'ProposalCreated',
78
- inputs: [
79
- { name: 'proposalId', type: 'uint256', indexed: false },
80
- { name: 'proposer', type: 'address', indexed: false },
81
- { name: 'targets', type: 'address[]', indexed: false },
82
- { name: 'values', type: 'uint256[]', indexed: false },
83
- { name: 'signatures', type: 'string[]', indexed: false },
84
- { name: 'calldatas', type: 'bytes[]', indexed: false },
85
- { name: 'voteStart', type: 'uint256', indexed: false },
86
- { name: 'voteEnd', type: 'uint256', indexed: false },
87
- { name: 'description', type: 'string', indexed: false },
88
- ],
89
- },
90
- fromBlock: startBlock,
91
- toBlock: searchFrom + 10n,
92
- });
93
- const match = logs.find((log) => log.args.proposalId === proposalId);
94
- if (!match || !match.args.targets || !match.args.values || !match.args.calldatas) {
95
- return null;
96
- }
97
- return {
98
- targets: match.args.targets,
99
- values: match.args.values,
100
- calldatas: match.args.calldatas,
101
- description: match.args.description ?? '',
102
- };
103
- }
104
- //# sourceMappingURL=read-proposals.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read-proposals.js","sourceRoot":"","sources":["../../src/governance/read-proposals.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- import governorAbi from '../abi/governor';
2
- export async function readVotingPower(publicClient, governorAddress, account, timepoint) {
3
- // WHY: Governor uses timestamp-based clock (CLOCK_MODE = "mode=timestamp").
4
- // Use current time - 12s like the dapp does, avoids extra clock() RPC call.
5
- const tp = timepoint ?? BigInt(Math.floor(Date.now() / 1000) - 12);
6
- const [votes, threshold] = await Promise.all([
7
- publicClient.readContract({
8
- address: governorAddress,
9
- abi: governorAbi,
10
- functionName: 'getVotes',
11
- args: [account, tp],
12
- }),
13
- publicClient.readContract({
14
- address: governorAddress,
15
- abi: governorAbi,
16
- functionName: 'proposalThreshold',
17
- }),
18
- ]);
19
- return {
20
- votes,
21
- threshold,
22
- sufficient: votes >= threshold,
23
- };
24
- }
25
- //# sourceMappingURL=read-voting-power.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read-voting-power.js","sourceRoot":"","sources":["../../src/governance/read-voting-power.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,iBAAiB,CAAA;AAQzC,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,YAA0B,EAC1B,eAAwB,EACxB,OAAgB,EAChB,SAAkB;IAElB,4EAA4E;IAC5E,4EAA4E;IAC5E,MAAM,EAAE,GACN,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAEzD,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3C,YAAY,CAAC,YAAY,CAAC;YACxB,OAAO,EAAE,eAAe;YACxB,GAAG,EAAE,WAAW;YAChB,YAAY,EAAE,UAAU;YACxB,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,CAAoB;QACrB,YAAY,CAAC,YAAY,CAAC;YACxB,OAAO,EAAE,eAAe;YACxB,GAAG,EAAE,WAAW;YAChB,YAAY,EAAE,mBAAmB;SAClC,CAAoB;KACtB,CAAC,CAAA;IAEF,OAAO;QACL,KAAK;QACL,SAAS;QACT,UAAU,EAAE,KAAK,IAAI,SAAS;KAC/B,CAAA;AACH,CAAC"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,116 +0,0 @@
1
- import { CHAINLINK_BTC_USD, CHAINLINK_DECIMALS, STALE_PRICE_THRESHOLD_S, } from '../constants';
2
- const AGGREGATOR_V3_ABI = [
3
- {
4
- name: 'latestRoundData',
5
- type: 'function',
6
- stateMutability: 'view',
7
- inputs: [],
8
- outputs: [
9
- { name: 'roundId', type: 'uint80' },
10
- { name: 'answer', type: 'int256' },
11
- { name: 'startedAt', type: 'uint256' },
12
- { name: 'updatedAt', type: 'uint256' },
13
- { name: 'answeredInRound', type: 'uint80' },
14
- ],
15
- },
16
- {
17
- name: 'getRoundData',
18
- type: 'function',
19
- stateMutability: 'view',
20
- inputs: [{ name: '_roundId', type: 'uint80' }],
21
- outputs: [
22
- { name: 'roundId', type: 'uint80' },
23
- { name: 'answer', type: 'int256' },
24
- { name: 'startedAt', type: 'uint256' },
25
- { name: 'updatedAt', type: 'uint256' },
26
- { name: 'answeredInRound', type: 'uint80' },
27
- ],
28
- },
29
- ];
30
- function parseRoundData(result) {
31
- const [roundId, answer, , updatedAt] = result;
32
- if (updatedAt === 0n || answer <= 0n)
33
- return null;
34
- return {
35
- roundId: roundId.toString(),
36
- priceUsd: Number(answer) / 10 ** CHAINLINK_DECIMALS,
37
- timestamp: Number(updatedAt),
38
- };
39
- }
40
- export async function readChainlinkPrice(priceClient, feedAddress = CHAINLINK_BTC_USD) {
41
- if (!feedAddress.startsWith('0x') || feedAddress.length !== 42) {
42
- throw new Error(`Invalid Chainlink feed address: ${feedAddress}`);
43
- }
44
- const result = (await priceClient.readContract({
45
- address: feedAddress,
46
- abi: AGGREGATOR_V3_ABI,
47
- functionName: 'latestRoundData',
48
- }));
49
- const record = parseRoundData(result);
50
- if (!record)
51
- return null;
52
- const now = Math.floor(Date.now() / 1000);
53
- const isStale = now - record.timestamp > STALE_PRICE_THRESHOLD_S;
54
- return { record, isStale };
55
- }
56
- export async function backfillChainlinkPrices(priceClient, days, batchSize = 50, feedAddress = CHAINLINK_BTC_USD) {
57
- if (days <= 0)
58
- throw new Error(`backfillChainlinkPrices: days must be > 0, got ${days}`);
59
- if (batchSize <= 0)
60
- throw new Error(`backfillChainlinkPrices: batchSize must be > 0, got ${batchSize}`);
61
- if (!feedAddress.startsWith('0x') || feedAddress.length !== 42) {
62
- throw new Error(`Invalid Chainlink feed address: ${feedAddress}`);
63
- }
64
- const latest = (await priceClient.readContract({
65
- address: feedAddress,
66
- abi: AGGREGATOR_V3_ABI,
67
- functionName: 'latestRoundData',
68
- }));
69
- const latestRoundId = latest[0];
70
- const phaseId = latestRoundId >> 64n;
71
- const mask = (1n << 64n) - 1n;
72
- let aggRoundId = latestRoundId & mask;
73
- const targetTimestamp = Math.floor(Date.now() / 1000) - days * 86400;
74
- const records = [];
75
- let consecutiveErrors = 0;
76
- const latestRecord = parseRoundData(latest);
77
- if (latestRecord)
78
- records.push(latestRecord);
79
- while (aggRoundId > 1n && consecutiveErrors < 5) {
80
- const currentBatchSize = Math.min(batchSize, Number(aggRoundId));
81
- const roundIds = [];
82
- for (let i = 1; i <= currentBatchSize; i++) {
83
- const rid = (phaseId << 64n) | (aggRoundId - BigInt(i));
84
- roundIds.push(rid);
85
- }
86
- const results = await priceClient.multicall({
87
- contracts: roundIds.map((rid) => ({
88
- address: feedAddress,
89
- abi: AGGREGATOR_V3_ABI,
90
- functionName: 'getRoundData',
91
- args: [rid],
92
- })),
93
- });
94
- let reachedTarget = false;
95
- for (const res of results) {
96
- if (res.status === 'failure') {
97
- consecutiveErrors++;
98
- continue;
99
- }
100
- consecutiveErrors = 0;
101
- const record = parseRoundData(res.result);
102
- if (!record)
103
- continue;
104
- if (record.timestamp < targetTimestamp) {
105
- reachedTarget = true;
106
- break;
107
- }
108
- records.push(record);
109
- }
110
- if (reachedTarget)
111
- break;
112
- aggRoundId -= BigInt(currentBatchSize);
113
- }
114
- return records;
115
- }
116
- //# sourceMappingURL=chainlink.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chainlink.js","sourceRoot":"","sources":["../../src/prices/chainlink.ts"],"names":[],"mappings":"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"}
@@ -1,47 +0,0 @@
1
- import { RESERVE_API_BASE_URL, VOLATILITY_TO_PRICE_ERROR, PROPOSAL_VOLATILITY_TO_PRICE_ERROR, } from '../constants';
2
- import { fetchWithRetry } from '../utils/fetch-with-retry';
3
- const VALID_VOLATILITIES = new Set(['low', 'medium', 'high', 'degen']);
4
- // -- Volatility mapping --
5
- export function volatilityToPriceError(volatility) {
6
- return (VOLATILITY_TO_PRICE_ERROR[volatility] ?? 0.10);
7
- }
8
- export function proposalVolatilityToPriceError(volatility) {
9
- return (PROPOSAL_VOLATILITY_TO_PRICE_ERROR[volatility] ?? 0.75);
10
- }
11
- // -- API functions --
12
- export async function fetchTokenPrices(chainId, tokenAddresses, baseUrl = RESERVE_API_BASE_URL) {
13
- const tokens = tokenAddresses.map((a) => a.toLowerCase()).join(',');
14
- const url = `${baseUrl}/current/prices?chainId=${chainId}&tokens=${tokens}`;
15
- const response = await fetchWithRetry(url);
16
- if (!response.ok) {
17
- throw new Error(`Reserve API prices failed: ${response.status} ${response.statusText}`);
18
- }
19
- const data = (await response.json());
20
- const prices = {};
21
- for (const item of data) {
22
- if (item.price > 0) {
23
- prices[item.address.toLowerCase()] = item.price;
24
- }
25
- }
26
- return prices;
27
- }
28
- export async function fetchTokenVolatility(chainId, baseUrl = RESERVE_API_BASE_URL) {
29
- const url = `${baseUrl}/zapper/tokens?chainId=${chainId}`;
30
- const response = await fetchWithRetry(url);
31
- if (!response.ok) {
32
- throw new Error(`Reserve API tokens failed: ${response.status} ${response.statusText}`);
33
- }
34
- const data = (await response.json());
35
- const volatility = {};
36
- const tokens = Array.isArray(data) ? data : data.tokens;
37
- for (const token of tokens) {
38
- // WHY: Default unknown volatility values to 'high' for safety.
39
- // If the API adds new volatility tiers, we use conservative bounds.
40
- const vol = VALID_VOLATILITIES.has(token.volatility)
41
- ? token.volatility
42
- : 'high';
43
- volatility[token.address.toLowerCase()] = vol;
44
- }
45
- return volatility;
46
- }
47
- //# sourceMappingURL=reserve-api.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reserve-api.js","sourceRoot":"","sources":["../../src/prices/reserve-api.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,kCAAkC,GACnC,MAAM,cAAc,CAAA;AACrB,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAG1D,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAyB9E,2BAA2B;AAE3B,MAAM,UAAU,sBAAsB,CAAC,UAA+B;IACpE,OAAO,CACL,yBAAyB,CAAC,UAAwB,CAAC,IAAI,IAAI,CAC5D,CAAA;AACH,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,UAA+B;IAE/B,OAAO,CACL,kCAAkC,CAAC,UAAwB,CAAC,IAAI,IAAI,CACrE,CAAA;AACH,CAAC;AAED,sBAAsB;AAEtB,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAAe,EACf,cAAoC,EACpC,UAAkB,oBAAoB;IAEtC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACnE,MAAM,GAAG,GAAG,GAAG,OAAO,2BAA2B,OAAO,WAAW,MAAM,EAAE,CAAA;IAE3E,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,8BAA8B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACvE,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAkB,CAAA;IACrD,MAAM,MAAM,GAA2B,EAAE,CAAA;IAEzC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAA;QACjD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAe,EACf,UAAkB,oBAAoB;IAEtC,MAAM,GAAG,GAAG,GAAG,OAAO,0BAA0B,OAAO,EAAE,CAAA;IAEzD,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,8BAA8B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACvE,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAA;IACtD,MAAM,UAAU,GAA+B,EAAE,CAAA;IAEjD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;IACvD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,+DAA+D;QAC/D,oEAAoE;QACpE,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;YAClD,CAAC,CAAE,KAAK,CAAC,UAAyB;YAClC,CAAC,CAAC,MAAM,CAAA;QACV,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,GAAG,CAAA;IAC/C,CAAC;IAED,OAAO,UAAU,CAAA;AACnB,CAAC"}