@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,9 +0,0 @@
1
- import folioAbi from '../abi/folio';
2
- export async function readDtfVersion(publicClient, folioAddress) {
3
- return (await publicClient.readContract({
4
- address: folioAddress,
5
- abi: folioAbi,
6
- functionName: 'version',
7
- }));
8
- }
9
- //# sourceMappingURL=read-version.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read-version.js","sourceRoot":"","sources":["../../src/dtf/read-version.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,cAAc,CAAA;AAEnC,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,YAA0B,EAC1B,YAAqB;IAErB,OAAO,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QACtC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,QAAQ;QACb,YAAY,EAAE,SAAS;KACxB,CAAC,CAAW,CAAA;AACf,CAAC"}
@@ -1,27 +0,0 @@
1
- import { encodeFunctionData } from 'viem';
2
- import folioAbi from '../abi/folio';
3
- import { assert } from '../utils/assert';
4
- export async function readRedeemQuote(publicClient, folioAddress, shares) {
5
- const result = (await publicClient.readContract({
6
- address: folioAddress,
7
- abi: folioAbi,
8
- functionName: 'toAssets',
9
- // WHY: Floor rounding (0) — user receives the rounded-down amount to prevent overdrawing
10
- args: [shares, 0],
11
- }));
12
- const [assets, amounts] = result;
13
- return { shares, assets, amounts };
14
- }
15
- export function buildRedeemCalldata(folioAddress, shares, receiver, assets, minAmountsOut) {
16
- assert(shares > 0n, 'shares must be greater than 0');
17
- assert(assets.length === minAmountsOut.length, 'assets and minAmountsOut must have the same length');
18
- return {
19
- to: folioAddress,
20
- data: encodeFunctionData({
21
- abi: folioAbi,
22
- functionName: 'redeem',
23
- args: [shares, receiver, assets, minAmountsOut],
24
- }),
25
- };
26
- }
27
- //# sourceMappingURL=redeem.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redeem.js","sourceRoot":"","sources":["../../src/dtf/redeem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAmC,MAAM,MAAM,CAAA;AAC1E,OAAO,QAAQ,MAAM,cAAc,CAAA;AAEnC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAExC,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,YAA0B,EAC1B,YAAqB,EACrB,MAAc;IAEd,MAAM,MAAM,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QAC9C,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,QAAQ;QACb,YAAY,EAAE,UAAU;QACxB,yFAAyF;QACzF,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;KAClB,CAAC,CAA0B,CAAA;IAE5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAA;IAChC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,YAAqB,EACrB,MAAc,EACd,QAAiB,EACjB,MAAiB,EACjB,aAAuB;IAEvB,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,+BAA+B,CAAC,CAAA;IACpD,MAAM,CACJ,MAAM,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,EACtC,oDAAoD,CACrD,CAAA;IACD,OAAO;QACL,EAAE,EAAE,YAAY;QAChB,IAAI,EAAE,kBAAkB,CAAC;YACvB,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,QAAQ;YACtB,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC;SAChD,CAAC;KACH,CAAA;AACH,CAAC"}
@@ -1,78 +0,0 @@
1
- import { encodeFunctionData, keccak256, toBytes, } from 'viem';
2
- import governorAbi from '../abi/governor';
3
- import { assert } from '../utils/assert';
4
- function assertProposalArrays(targets, values, calldatas) {
5
- assert(targets.length === values.length && targets.length === calldatas.length, 'targets, values, and calldatas must have the same length');
6
- }
7
- export function hashDescription(description) {
8
- return keccak256(toBytes(description));
9
- }
10
- export function buildProposeCalldata(governor, targets, values, calldatas, description) {
11
- assert(targets.length > 0, 'targets must not be empty');
12
- assertProposalArrays(targets, values, calldatas);
13
- return {
14
- to: governor,
15
- data: encodeFunctionData({
16
- abi: governorAbi,
17
- functionName: 'propose',
18
- args: [targets, values, calldatas, description],
19
- }),
20
- };
21
- }
22
- export function buildCastVoteCalldata(governor, proposalId, support) {
23
- return {
24
- to: governor,
25
- data: encodeFunctionData({
26
- abi: governorAbi,
27
- functionName: 'castVote',
28
- args: [proposalId, support],
29
- }),
30
- };
31
- }
32
- export function buildCastVoteWithReasonCalldata(governor, proposalId, support, reason) {
33
- return {
34
- to: governor,
35
- data: encodeFunctionData({
36
- abi: governorAbi,
37
- functionName: 'castVoteWithReason',
38
- args: [proposalId, support, reason],
39
- }),
40
- };
41
- }
42
- export function buildQueueCalldata(governor, targets, values, calldatas, descriptionHash) {
43
- assertProposalArrays(targets, values, calldatas);
44
- return {
45
- to: governor,
46
- data: encodeFunctionData({
47
- abi: governorAbi,
48
- functionName: 'queue',
49
- args: [targets, values, calldatas, descriptionHash],
50
- }),
51
- };
52
- }
53
- export function buildExecuteCalldata(governor, targets, values, calldatas, descriptionHash) {
54
- assertProposalArrays(targets, values, calldatas);
55
- return {
56
- to: governor,
57
- data: encodeFunctionData({
58
- abi: governorAbi,
59
- functionName: 'execute',
60
- args: [targets, values, calldatas, descriptionHash],
61
- }),
62
- };
63
- }
64
- export function buildCancelCalldata(governor, targets, values, calldatas, descriptionHash) {
65
- assertProposalArrays(targets, values, calldatas);
66
- return {
67
- to: governor,
68
- data: encodeFunctionData({
69
- abi: governorAbi,
70
- functionName: 'cancel',
71
- args: [targets, values, calldatas, descriptionHash],
72
- }),
73
- };
74
- }
75
- export function wrapInProposal(governor, target, innerCalldata, description) {
76
- return buildProposeCalldata(governor, [target], [0n], [innerCalldata], description);
77
- }
78
- //# sourceMappingURL=build-proposal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build-proposal.js","sourceRoot":"","sources":["../../src/governance/build-proposal.ts"],"names":[],"mappings":"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"}
@@ -1,145 +0,0 @@
1
- import { encodeFunctionData } from 'viem';
2
- import folioAbi from '../abi/folio';
3
- import governorAbi from '../abi/governor';
4
- import timelockAbi from '../abi/timelock';
5
- // -- DTF settings (target: folio, via ownerGovernance) --
6
- export function encodeMintFee(fee) {
7
- return encodeFunctionData({
8
- abi: folioAbi,
9
- functionName: 'setMintFee',
10
- args: [fee],
11
- });
12
- }
13
- export function encodeTvlFee(fee) {
14
- return encodeFunctionData({
15
- abi: folioAbi,
16
- functionName: 'setTVLFee',
17
- args: [fee],
18
- });
19
- }
20
- export function encodeFeeRecipients(recipients) {
21
- return encodeFunctionData({
22
- abi: folioAbi,
23
- functionName: 'setFeeRecipients',
24
- args: [recipients],
25
- });
26
- }
27
- export function encodeMandate(mandate) {
28
- return encodeFunctionData({
29
- abi: folioAbi,
30
- functionName: 'setMandate',
31
- args: [mandate],
32
- });
33
- }
34
- export function encodeAuctionLength(seconds) {
35
- return encodeFunctionData({
36
- abi: folioAbi,
37
- functionName: 'setAuctionLength',
38
- args: [seconds],
39
- });
40
- }
41
- export function encodeRebalanceControl(weightControl, priceControl) {
42
- return encodeFunctionData({
43
- abi: folioAbi,
44
- functionName: 'setRebalanceControl',
45
- args: [{ weightControl, priceControl }],
46
- });
47
- }
48
- export function encodeTrustedFillerRegistry(registry, enabled) {
49
- return encodeFunctionData({
50
- abi: folioAbi,
51
- functionName: 'setTrustedFillerRegistry',
52
- args: [registry, enabled],
53
- });
54
- }
55
- // -- Role management (target: folio, via ownerGovernance) --
56
- export function encodeGrantRole(role, account) {
57
- return encodeFunctionData({
58
- abi: folioAbi,
59
- functionName: 'grantRole',
60
- args: [role, account],
61
- });
62
- }
63
- export function encodeRevokeRole(role, account) {
64
- return encodeFunctionData({
65
- abi: folioAbi,
66
- functionName: 'revokeRole',
67
- args: [role, account],
68
- });
69
- }
70
- // -- Basket changes (target: folio, via tradingGovernance) --
71
- export function encodeStartRebalance(tokens, limits, launcherWindow, ttl) {
72
- return encodeFunctionData({
73
- abi: folioAbi,
74
- functionName: 'startRebalance',
75
- args: [tokens, limits, launcherWindow, ttl],
76
- });
77
- }
78
- export function encodeAddToBasket(token) {
79
- return encodeFunctionData({
80
- abi: folioAbi,
81
- functionName: 'addToBasket',
82
- args: [token],
83
- });
84
- }
85
- export function encodeRemoveFromBasket(token) {
86
- return encodeFunctionData({
87
- abi: folioAbi,
88
- functionName: 'removeFromBasket',
89
- args: [token],
90
- });
91
- }
92
- // -- Governor settings (target: governor, via its own governance) --
93
- // WHY: ABI uses uint48 for votingDelay → viem maps to number. Accept bigint for SDK ergonomics.
94
- export function encodeVotingDelay(delay) {
95
- return encodeFunctionData({
96
- abi: governorAbi,
97
- functionName: 'setVotingDelay',
98
- args: [Number(delay)],
99
- });
100
- }
101
- // WHY: ABI uses uint32 for votingPeriod → viem maps to number. Accept bigint for SDK ergonomics.
102
- export function encodeVotingPeriod(period) {
103
- return encodeFunctionData({
104
- abi: governorAbi,
105
- functionName: 'setVotingPeriod',
106
- args: [Number(period)],
107
- });
108
- }
109
- export function encodeProposalThreshold(threshold) {
110
- return encodeFunctionData({
111
- abi: governorAbi,
112
- functionName: 'setProposalThreshold',
113
- args: [threshold],
114
- });
115
- }
116
- export function encodeQuorumNumerator(numerator) {
117
- return encodeFunctionData({
118
- abi: governorAbi,
119
- functionName: 'updateQuorumNumerator',
120
- args: [numerator],
121
- });
122
- }
123
- // -- Timelock settings (target: timelock, via its own governance) --
124
- export function encodeTimelockDelay(delay) {
125
- return encodeFunctionData({
126
- abi: timelockAbi,
127
- functionName: 'updateDelay',
128
- args: [delay],
129
- });
130
- }
131
- export function encodeTimelockGrantRole(role, account) {
132
- return encodeFunctionData({
133
- abi: timelockAbi,
134
- functionName: 'grantRole',
135
- args: [role, account],
136
- });
137
- }
138
- export function encodeTimelockRevokeRole(role, account) {
139
- return encodeFunctionData({
140
- abi: timelockAbi,
141
- functionName: 'revokeRole',
142
- args: [role, account],
143
- });
144
- }
145
- //# sourceMappingURL=build-settings-calldata.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"build-settings-calldata.js","sourceRoot":"","sources":["../../src/governance/build-settings-calldata.ts"],"names":[],"mappings":"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"}
@@ -1,87 +0,0 @@
1
- export const PROPOSAL_STATES = {
2
- PENDING: 'PENDING',
3
- ACTIVE: 'ACTIVE',
4
- CANCELED: 'CANCELED',
5
- DEFEATED: 'DEFEATED',
6
- QUORUM_NOT_REACHED: 'QUORUM_NOT_REACHED',
7
- SUCCEEDED: 'SUCCEEDED',
8
- QUEUED: 'QUEUED',
9
- EXPIRED: 'EXPIRED',
10
- EXECUTED: 'EXECUTED',
11
- };
12
- /**
13
- * Compute the real proposal state from subgraph data + current time.
14
- *
15
- * WHY: The subgraph only tracks on-chain events. States like DEFEATED, EXPIRED,
16
- * and SUCCEEDED are computed by the governor contract but never written on-chain
17
- * unless someone calls execute/cancel. This function replicates the governor's
18
- * state machine using timestamps, matching Register's `getProposalState`.
19
- *
20
- * @param proposal - Proposal data from subgraph (via fetchProposals or fetchAllProposals)
21
- * @param nowSeconds - Current unix timestamp in seconds. Defaults to Date.now()/1000.
22
- * NOTE: Uses client clock, not block timestamp. Clock skew = wrong state.
23
- * Pass a block timestamp for canonical results.
24
- */
25
- export function computeProposalState(proposal, nowSeconds) {
26
- const now = nowSeconds ?? Math.floor(Date.now() / 1000);
27
- const voteStart = Number(proposal.voteStart);
28
- const voteEnd = Number(proposal.voteEnd);
29
- const forVotes = Number(proposal.forWeightedVotes);
30
- const againstVotes = Number(proposal.againstWeightedVotes);
31
- const abstainVotes = Number(proposal.abstainWeightedVotes);
32
- const quorum = Number(proposal.quorumVotes);
33
- const totalVotes = forVotes + againstVotes + abstainVotes;
34
- const quorumReached = forVotes > 0 && forVotes + abstainVotes >= quorum;
35
- const forPercent = totalVotes > 0 ? (forVotes / totalVotes) * 100 : 0;
36
- const againstPercent = totalVotes > 0 ? (againstVotes / totalVotes) * 100 : 0;
37
- const abstainPercent = totalVotes > 0 ? (abstainVotes / totalVotes) * 100 : 0;
38
- const base = {
39
- quorumReached,
40
- forPercent,
41
- againstPercent,
42
- abstainPercent,
43
- };
44
- // Terminal states — subgraph is authoritative
45
- if (proposal.state === PROPOSAL_STATES.EXECUTED ||
46
- proposal.state === PROPOSAL_STATES.CANCELED) {
47
- return { ...base, state: proposal.state, deadline: null };
48
- }
49
- // QUEUED — waiting for execution
50
- if (proposal.state === PROPOSAL_STATES.QUEUED) {
51
- return { ...base, state: 'QUEUED', deadline: null };
52
- }
53
- // PENDING — voting hasn't started yet, or it has (subgraph didn't update)
54
- if (proposal.state === PROPOSAL_STATES.PENDING) {
55
- if (now > voteEnd) {
56
- // WHY: Voting window passed entirely while still marked PENDING
57
- return { ...base, state: 'EXPIRED', deadline: null };
58
- }
59
- if (now >= voteStart && now <= voteEnd) {
60
- // WHY: Voting started but subgraph still says PENDING
61
- return { ...base, state: 'ACTIVE', deadline: voteEnd - now };
62
- }
63
- // Genuinely pending — voting hasn't started
64
- return { ...base, state: 'PENDING', deadline: voteStart - now };
65
- }
66
- // ACTIVE — voting in progress, or ended (subgraph didn't update)
67
- if (proposal.state === PROPOSAL_STATES.ACTIVE) {
68
- if (now <= voteEnd) {
69
- // Still in voting window
70
- return { ...base, state: 'ACTIVE', deadline: voteEnd - now };
71
- }
72
- // Voting ended — compute result
73
- // WHY: Defeat if against >= for, OR if nobody voted for
74
- if (againstVotes >= forVotes || forVotes === 0) {
75
- return { ...base, state: 'DEFEATED', deadline: null };
76
- }
77
- // WHY: Quorum check — for + abstain must meet threshold
78
- if (forVotes + abstainVotes < quorum) {
79
- return { ...base, state: 'QUORUM_NOT_REACHED', deadline: null };
80
- }
81
- // Passed all checks
82
- return { ...base, state: 'SUCCEEDED', deadline: null };
83
- }
84
- // Fallback — unknown state from subgraph, pass through
85
- return { ...base, state: proposal.state, deadline: null };
86
- }
87
- //# sourceMappingURL=compute-proposal-state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compute-proposal-state.js","sourceRoot":"","sources":["../../src/governance/compute-proposal-state.ts"],"names":[],"mappings":"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"}
@@ -1,164 +0,0 @@
1
- import { decodeFunctionData, getAbiItem, } from 'viem';
2
- import folioAbi from '../abi/folio';
3
- import governorAbi from '../abi/governor';
4
- import timelockAbi from '../abi/timelock';
5
- import proxyAdminAbi from '../abi/proxy-admin';
6
- import { v5SpellAbi, v4SpellAbi, governanceSpellAbi } from '../abi/spells';
7
- import { V5_SPELL_ADDRESS, V4_SPELL_ADDRESS, GOVERNANCE_SPELL_ADDRESS, ROLE_NAMES, } from '../constants';
8
- /**
9
- * Build ABI mapping from contract addresses to their ABIs.
10
- * WHY: Different contracts have different ABIs. The folio uses the full V5 ABI,
11
- * governors and timelocks use their respective ABIs, spells use minimal ABIs.
12
- */
13
- export function buildAbiMap(addresses, chainId) {
14
- const map = {};
15
- // Folio gets the full V5 ABI (covers most function selectors)
16
- map[addresses.folio.toLowerCase()] = folioAbi;
17
- if (addresses.proxyAdmin) {
18
- map[addresses.proxyAdmin.toLowerCase()] = proxyAdminAbi;
19
- }
20
- // All governors share the same ABI
21
- for (const addr of [
22
- addresses.ownerGovernor,
23
- addresses.tradingGovernor,
24
- addresses.stTokenGovernor,
25
- ]) {
26
- if (addr)
27
- map[addr.toLowerCase()] = governorAbi;
28
- }
29
- // All timelocks share the same ABI
30
- for (const addr of [
31
- addresses.ownerTimelock,
32
- addresses.tradingTimelock,
33
- addresses.stTokenTimelock,
34
- ]) {
35
- if (addr)
36
- map[addr.toLowerCase()] = timelockAbi;
37
- }
38
- // Spell contracts
39
- const v5Spell = V5_SPELL_ADDRESS[chainId];
40
- if (v5Spell)
41
- map[v5Spell.toLowerCase()] = v5SpellAbi;
42
- const v4Spell = V4_SPELL_ADDRESS[chainId];
43
- if (v4Spell)
44
- map[v4Spell.toLowerCase()] = v4SpellAbi;
45
- const govSpell = GOVERNANCE_SPELL_ADDRESS[chainId];
46
- if (govSpell)
47
- map[govSpell.toLowerCase()] = governanceSpellAbi;
48
- return map;
49
- }
50
- /**
51
- * Map an address to a human-readable label.
52
- */
53
- export function labelAddress(address, addresses, chainId) {
54
- const lower = address.toLowerCase();
55
- if (lower === addresses.folio.toLowerCase())
56
- return 'Folio';
57
- if (addresses.proxyAdmin && lower === addresses.proxyAdmin.toLowerCase())
58
- return 'ProxyAdmin';
59
- if (addresses.ownerGovernor &&
60
- lower === addresses.ownerGovernor.toLowerCase())
61
- return 'Owner Governance';
62
- if (addresses.ownerTimelock && lower === addresses.ownerTimelock.toLowerCase())
63
- return 'Owner Timelock';
64
- if (addresses.tradingGovernor &&
65
- lower === addresses.tradingGovernor.toLowerCase())
66
- return 'Trading Governance';
67
- if (addresses.tradingTimelock &&
68
- lower === addresses.tradingTimelock.toLowerCase())
69
- return 'Trading Timelock';
70
- if (addresses.stTokenGovernor &&
71
- lower === addresses.stTokenGovernor.toLowerCase())
72
- return 'Lock Governance';
73
- if (addresses.stTokenTimelock &&
74
- lower === addresses.stTokenTimelock.toLowerCase())
75
- return 'Lock Timelock';
76
- if (addresses.stToken && lower === addresses.stToken.toLowerCase())
77
- return 'StToken';
78
- const v5Spell = V5_SPELL_ADDRESS[chainId];
79
- if (v5Spell && lower === v5Spell.toLowerCase())
80
- return 'V5 Upgrade Spell';
81
- const v4Spell = V4_SPELL_ADDRESS[chainId];
82
- if (v4Spell && lower === v4Spell.toLowerCase())
83
- return 'V4 Upgrade Spell';
84
- const govSpell = GOVERNANCE_SPELL_ADDRESS[chainId];
85
- if (govSpell && lower === govSpell.toLowerCase())
86
- return 'Governance Spell';
87
- return 'Unknown';
88
- }
89
- /**
90
- * Map a role hash to a human-readable name.
91
- */
92
- export function formatRoleName(roleHash) {
93
- const name = ROLE_NAMES[roleHash.toLowerCase()];
94
- if (name)
95
- return name;
96
- // Fallback: truncated hash
97
- return `${roleHash.slice(0, 10)}...`;
98
- }
99
- /**
100
- * Decode raw proposal targets/calldatas/values into structured actions.
101
- * Pure function — no RPC, no React.
102
- */
103
- export function decodeProposalActions(targets, calldatas, values, addresses, chainId) {
104
- const abiMap = buildAbiMap(addresses, chainId);
105
- const actions = [];
106
- const unknownTargets = [];
107
- for (let i = 0; i < targets.length; i++) {
108
- const target = targets[i];
109
- const calldata = calldatas[i];
110
- const value = values[i] ?? 0n;
111
- const targetLabel = labelAddress(target, addresses, chainId);
112
- const abi = abiMap[target.toLowerCase()];
113
- if (!abi) {
114
- unknownTargets.push(target);
115
- actions.push({
116
- target,
117
- targetLabel,
118
- functionName: 'unknown',
119
- parameters: [],
120
- rawCalldata: calldata,
121
- value,
122
- decoded: false,
123
- });
124
- continue;
125
- }
126
- try {
127
- const decoded = decodeFunctionData({ abi, data: calldata });
128
- // Extract parameter names and types from the ABI item
129
- const abiItem = getAbiItem({
130
- abi,
131
- name: decoded.functionName,
132
- });
133
- const parameters = (abiItem?.inputs ?? []).map((input, idx) => ({
134
- name: input.name,
135
- type: input.type,
136
- value: decoded.args?.[idx],
137
- }));
138
- actions.push({
139
- target,
140
- targetLabel,
141
- functionName: decoded.functionName,
142
- parameters,
143
- rawCalldata: calldata,
144
- value,
145
- decoded: true,
146
- });
147
- }
148
- catch {
149
- // ABI exists but selector doesn't match — likely a version mismatch
150
- unknownTargets.push(target);
151
- actions.push({
152
- target,
153
- targetLabel,
154
- functionName: 'unknown',
155
- parameters: [],
156
- rawCalldata: calldata,
157
- value,
158
- decoded: false,
159
- });
160
- }
161
- }
162
- return { actions, unknownTargets };
163
- }
164
- //# sourceMappingURL=decode-proposal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"decode-proposal.js","sourceRoot":"","sources":["../../src/governance/decode-proposal.ts"],"names":[],"mappings":"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"}