@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,39 @@
|
|
|
1
|
+
import { RESERVE_API_BASE_URL } from '../constants';
|
|
2
|
+
import { fetchWithRetry } from '../utils/fetch-with-retry';
|
|
3
|
+
/**
|
|
4
|
+
* Fetch the current price of a DTF from the Reserve API.
|
|
5
|
+
* WHY: Uses /current/dtf endpoint (not the dead /dtf/price).
|
|
6
|
+
* Register uses this same endpoint in use-dtf-price.ts.
|
|
7
|
+
*/
|
|
8
|
+
export async function fetchDtfPrice(chainId, folioAddress, baseUrl = RESERVE_API_BASE_URL) {
|
|
9
|
+
const url = `${baseUrl}/current/dtf?address=${folioAddress.toLowerCase()}&chainId=${chainId}`;
|
|
10
|
+
const response = await fetchWithRetry(url);
|
|
11
|
+
if (!response.ok) {
|
|
12
|
+
throw new Error(`Reserve API /current/dtf failed for ${folioAddress}: ${response.status} ${response.statusText}`);
|
|
13
|
+
}
|
|
14
|
+
const data = (await response.json());
|
|
15
|
+
return data.price;
|
|
16
|
+
}
|
|
17
|
+
export async function fetchZapQuote(chainId, params, baseUrl = RESERVE_API_BASE_URL) {
|
|
18
|
+
const url = `${baseUrl}/zapper/${chainId}/swap?tokenIn=${params.tokenIn.toLowerCase()}&tokenOut=${params.tokenOut.toLowerCase()}&amountIn=${params.amountIn.toString()}&slippage=${params.slippage}&sender=${params.sender.toLowerCase()}&recipient=${params.recipient.toLowerCase()}`;
|
|
19
|
+
const response = await fetchWithRetry(url);
|
|
20
|
+
if (!response.ok) {
|
|
21
|
+
throw new Error(`Reserve API /zapper/swap failed: ${response.status} ${response.statusText}`);
|
|
22
|
+
}
|
|
23
|
+
const data = (await response.json());
|
|
24
|
+
return {
|
|
25
|
+
amountOut: BigInt(data.amountOut),
|
|
26
|
+
to: data.to,
|
|
27
|
+
data: data.data,
|
|
28
|
+
value: BigInt(data.value),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export async function fetchVoteLockPositions(baseUrl = RESERVE_API_BASE_URL) {
|
|
32
|
+
const url = `${baseUrl}/dtf/daos`;
|
|
33
|
+
const response = await fetchWithRetry(url);
|
|
34
|
+
if (!response.ok) {
|
|
35
|
+
throw new Error(`Reserve API /dtf/daos failed: ${response.status} ${response.statusText}`);
|
|
36
|
+
}
|
|
37
|
+
return (await response.json());
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=fetch-dtf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-dtf.js","sourceRoot":"","sources":["../../src/dtf/fetch-dtf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAkB1D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,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,uCAAuC,YAAY,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CACjG,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAsB,CAAA;IACzD,OAAO,IAAI,CAAC,KAAK,CAAA;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,MAAsB,EACtB,UAAkB,oBAAoB;IAEtC,MAAM,GAAG,GAAG,GAAG,OAAO,WAAW,OAAO,iBAAiB,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,MAAM,CAAC,QAAQ,WAAW,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAA;IAEtR,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,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAKlC,CAAA;IAED,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;QACjC,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;KAC1B,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,UAAkB,oBAAoB;IAEtC,MAAM,GAAG,GAAG,GAAG,OAAO,WAAW,CAAA;IACjC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAA;IAC1C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,iCAAiC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAC1E,CAAA;IACH,CAAC;IACD,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAA;AACtD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type Address, type PublicClient } from 'viem';
|
|
2
|
+
import type { MintQuote, TransactionRequest } from '../types';
|
|
3
|
+
export declare function readMintQuote(publicClient: PublicClient, folioAddress: Address, shares: bigint): Promise<MintQuote>;
|
|
4
|
+
export declare function readMintFee(publicClient: PublicClient, folioAddress: Address): Promise<bigint>;
|
|
5
|
+
export declare function buildMintCalldata(folioAddress: Address, shares: bigint, receiver: Address, minSharesOut: bigint): TransactionRequest;
|
|
6
|
+
export declare function buildApproveCalldata(token: Address, spender: Address, amount: bigint): TransactionRequest;
|
|
7
|
+
export declare function readAllowances(publicClient: PublicClient, tokens: Address[], owner: Address, spender: Address): Promise<bigint[]>;
|
|
8
|
+
export declare function applySlippage(amount: bigint, slippageBps: bigint): bigint;
|
|
9
|
+
//# sourceMappingURL=mint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mint.d.ts","sourceRoot":"","sources":["../../src/dtf/mint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,MAAM,CAAA;AAI1E,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAG7D,wBAAsB,aAAa,CACjC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,EACrB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,SAAS,CAAC,CA4BpB;AAED,wBAAsB,WAAW,CAC/B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,OAAO,EACrB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,EACjB,YAAY,EAAE,MAAM,GACnB,kBAAkB,CAUpB;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,GACb,kBAAkB,CASpB;AAED,wBAAsB,cAAc,CAClC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,OAAO,EAAE,EACjB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBnB;AAGD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAOzE"}
|
package/dist/dtf/mint.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { encodeFunctionData } from 'viem';
|
|
2
|
+
import folioAbi from '../abi/folio';
|
|
3
|
+
import { ERC20_META_ABI } from '../abi/erc20';
|
|
4
|
+
import { D18 } from '../constants';
|
|
5
|
+
import { assert } from '../utils/assert';
|
|
6
|
+
export async function readMintQuote(publicClient, folioAddress, shares) {
|
|
7
|
+
const results = await publicClient.multicall({
|
|
8
|
+
contracts: [
|
|
9
|
+
{
|
|
10
|
+
address: folioAddress,
|
|
11
|
+
abi: folioAbi,
|
|
12
|
+
functionName: 'toAssets',
|
|
13
|
+
// WHY: Ceil rounding (1) — user pays the rounded-up amount to prevent undercollateralization
|
|
14
|
+
args: [shares, 1],
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
address: folioAddress,
|
|
18
|
+
abi: folioAbi,
|
|
19
|
+
functionName: 'mintFee',
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
});
|
|
23
|
+
if (results[0].status !== 'success')
|
|
24
|
+
throw new Error(`toAssets failed for ${folioAddress} with ${shares} shares`);
|
|
25
|
+
if (results[1].status !== 'success')
|
|
26
|
+
throw new Error(`mintFee failed for ${folioAddress}`);
|
|
27
|
+
const [assets, amounts] = results[0].result;
|
|
28
|
+
const mintFee = results[1].result;
|
|
29
|
+
const minSharesOut = shares - (shares * mintFee) / D18;
|
|
30
|
+
return { shares, assets, amounts, mintFee, minSharesOut };
|
|
31
|
+
}
|
|
32
|
+
export async function readMintFee(publicClient, folioAddress) {
|
|
33
|
+
return (await publicClient.readContract({
|
|
34
|
+
address: folioAddress,
|
|
35
|
+
abi: folioAbi,
|
|
36
|
+
functionName: 'mintFee',
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
export function buildMintCalldata(folioAddress, shares, receiver, minSharesOut) {
|
|
40
|
+
assert(shares > 0n, 'shares must be greater than 0');
|
|
41
|
+
return {
|
|
42
|
+
to: folioAddress,
|
|
43
|
+
data: encodeFunctionData({
|
|
44
|
+
abi: folioAbi,
|
|
45
|
+
functionName: 'mint',
|
|
46
|
+
args: [shares, receiver, minSharesOut],
|
|
47
|
+
}),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export function buildApproveCalldata(token, spender, amount) {
|
|
51
|
+
return {
|
|
52
|
+
to: token,
|
|
53
|
+
data: encodeFunctionData({
|
|
54
|
+
abi: ERC20_META_ABI,
|
|
55
|
+
functionName: 'approve',
|
|
56
|
+
args: [spender, amount],
|
|
57
|
+
}),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export async function readAllowances(publicClient, tokens, owner, spender) {
|
|
61
|
+
if (tokens.length === 0)
|
|
62
|
+
return [];
|
|
63
|
+
const results = await publicClient.multicall({
|
|
64
|
+
contracts: tokens.map((token) => ({
|
|
65
|
+
address: token,
|
|
66
|
+
abi: ERC20_META_ABI,
|
|
67
|
+
functionName: 'allowance',
|
|
68
|
+
args: [owner, spender],
|
|
69
|
+
})),
|
|
70
|
+
});
|
|
71
|
+
// WHY: Defaulting failed allowance to 0n is conservative — it means "needs approval".
|
|
72
|
+
// This is safer than throwing, since the caller will just prompt an approve tx.
|
|
73
|
+
return results.map((r) => r.status === 'success' ? r.result : 0n);
|
|
74
|
+
}
|
|
75
|
+
// WHY: bps (basis points) not percentage — 100 bps = 1%, matches DeFi convention
|
|
76
|
+
export function applySlippage(amount, slippageBps) {
|
|
77
|
+
if (slippageBps < 0n || slippageBps > 10000n) {
|
|
78
|
+
throw new Error(`slippageBps must be between 0 and 10000, got ${slippageBps}`);
|
|
79
|
+
}
|
|
80
|
+
return amount - (amount * slippageBps) / 10000n;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=mint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mint.js","sourceRoot":"","sources":["../../src/dtf/mint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-basket.d.ts","sourceRoot":"","sources":["../../src/dtf/read-basket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAGjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAE1C,wBAAsB,UAAU,CAC9B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,UAAU,CAAC,CAkBrB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import folioAbi from '../abi/folio';
|
|
2
|
+
import { fetchTokenMetadata } from '../utils/fetch-token-metadata';
|
|
3
|
+
export async function readBasket(publicClient, folioAddress) {
|
|
4
|
+
const [assetsResult, totalSupply] = await Promise.all([
|
|
5
|
+
publicClient.readContract({
|
|
6
|
+
address: folioAddress,
|
|
7
|
+
abi: folioAbi,
|
|
8
|
+
functionName: 'totalAssets',
|
|
9
|
+
}),
|
|
10
|
+
publicClient.readContract({
|
|
11
|
+
address: folioAddress,
|
|
12
|
+
abi: folioAbi,
|
|
13
|
+
functionName: 'totalSupply',
|
|
14
|
+
}),
|
|
15
|
+
]);
|
|
16
|
+
const [addresses, balances] = assetsResult;
|
|
17
|
+
const tokens = await fetchTokenMetadata(publicClient, addresses);
|
|
18
|
+
return { tokens, balances, totalSupply };
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=read-basket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-basket.js","sourceRoot":"","sources":["../../src/dtf/read-basket.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAGlE,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,YAA0B,EAC1B,YAAqB;IAErB,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACpD,YAAY,CAAC,YAAY,CAAC;YACxB,OAAO,EAAE,YAAY;YACrB,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,aAAa;SAC5B,CAAmC;QACpC,YAAY,CAAC,YAAY,CAAC;YACxB,OAAO,EAAE,YAAY;YACrB,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,aAAa;SAC5B,CAAoB;KACtB,CAAC,CAAA;IAEF,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAA;IAC1C,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;IAEhE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;AAC1C,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Address, PublicClient } from 'viem';
|
|
2
|
+
import type { DtfOnchainConfig, SupportedChainId } from '../types';
|
|
3
|
+
export declare function fetchDtfConfig(publicClient: PublicClient, chainId: SupportedChainId, folioAddress: Address): Promise<DtfOnchainConfig>;
|
|
4
|
+
//# sourceMappingURL=read-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-config.d.ts","sourceRoot":"","sources":["../../src/dtf/read-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AACjD,OAAO,KAAK,EACV,gBAAgB,EAEhB,gBAAgB,EACjB,MAAM,UAAU,CAAA;AAmFjB,wBAAsB,cAAc,CAClC,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,gBAAgB,CAAC,CA+B3B"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { fetchTokenMetadata } from '../utils/fetch-token-metadata';
|
|
2
|
+
import { querySubgraph } from '../utils/query-subgraph';
|
|
3
|
+
import folioAbi from '../abi/folio';
|
|
4
|
+
const GOV_FRAGMENT = `
|
|
5
|
+
id
|
|
6
|
+
votingDelay
|
|
7
|
+
votingPeriod
|
|
8
|
+
timelock {
|
|
9
|
+
id
|
|
10
|
+
executionDelay
|
|
11
|
+
}
|
|
12
|
+
`;
|
|
13
|
+
const DTF_QUERY = `
|
|
14
|
+
query getDTF($id: String!) {
|
|
15
|
+
dtf(id: $id) {
|
|
16
|
+
id
|
|
17
|
+
auctionLength
|
|
18
|
+
mandate
|
|
19
|
+
tvlFee
|
|
20
|
+
mintingFee
|
|
21
|
+
auctionLaunchers
|
|
22
|
+
brandManagers
|
|
23
|
+
ownerGovernance {
|
|
24
|
+
${GOV_FRAGMENT}
|
|
25
|
+
}
|
|
26
|
+
tradingGovernance {
|
|
27
|
+
${GOV_FRAGMENT}
|
|
28
|
+
}
|
|
29
|
+
stToken {
|
|
30
|
+
id
|
|
31
|
+
governance {
|
|
32
|
+
${GOV_FRAGMENT}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
`;
|
|
38
|
+
function parseGovernance(raw) {
|
|
39
|
+
if (!raw?.id)
|
|
40
|
+
return null;
|
|
41
|
+
// NOTE: If subgraph returns governor without timelock, we use zero address.
|
|
42
|
+
// This is defensive — in practice every deployed governor has a timelock.
|
|
43
|
+
return {
|
|
44
|
+
address: raw.id,
|
|
45
|
+
timelockAddress: (raw.timelock?.id ?? '0x0000000000000000000000000000000000000000'),
|
|
46
|
+
votingDelay: Number(raw.votingDelay ?? 0),
|
|
47
|
+
votingPeriod: Number(raw.votingPeriod ?? 0),
|
|
48
|
+
executionDelay: Number(raw.timelock?.executionDelay ?? 0),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export async function fetchDtfConfig(publicClient, chainId, folioAddress) {
|
|
52
|
+
const data = await querySubgraph(chainId, DTF_QUERY, {
|
|
53
|
+
id: folioAddress.toLowerCase(),
|
|
54
|
+
});
|
|
55
|
+
const dtf = data?.dtf;
|
|
56
|
+
if (!dtf)
|
|
57
|
+
throw new Error(`DTF not found: ${folioAddress}`);
|
|
58
|
+
// Read basket tokens on-chain (subgraph doesn't expose basket)
|
|
59
|
+
const [assets] = (await publicClient.readContract({
|
|
60
|
+
address: folioAddress,
|
|
61
|
+
abi: folioAbi,
|
|
62
|
+
functionName: 'totalAssets',
|
|
63
|
+
}));
|
|
64
|
+
const tokens = await fetchTokenMetadata(publicClient, assets);
|
|
65
|
+
return {
|
|
66
|
+
tokens,
|
|
67
|
+
// WHY: 300s is the protocol minimum auction length — safe fallback if subgraph omits it
|
|
68
|
+
auctionLength: Number(dtf.auctionLength ?? 300),
|
|
69
|
+
ownerGovernance: parseGovernance(dtf.ownerGovernance),
|
|
70
|
+
tradingGovernance: parseGovernance(dtf.tradingGovernance),
|
|
71
|
+
stTokenGovernance: parseGovernance(dtf.stToken?.governance),
|
|
72
|
+
stTokenAddress: (dtf.stToken?.id ?? null),
|
|
73
|
+
mandate: dtf.mandate ?? '',
|
|
74
|
+
tvlFee: dtf.tvlFee ?? '0',
|
|
75
|
+
mintingFee: dtf.mintingFee ?? '0',
|
|
76
|
+
auctionLaunchers: (dtf.auctionLaunchers ?? []),
|
|
77
|
+
brandManagers: (dtf.brandManagers ?? []),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=read-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-config.js","sourceRoot":"","sources":["../../src/dtf/read-config.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,QAAQ,MAAM,cAAc,CAAA;AA+BnC,MAAM,YAAY,GAAG;;;;;;;;CAQpB,CAAA;AAED,MAAM,SAAS,GAAG;;;;;;;;;;;UAWR,YAAY;;;UAGZ,YAAY;;;;;YAKV,YAAY;;;;;CAKvB,CAAA;AAED,SAAS,eAAe,CAAC,GAA0C;IACjE,IAAI,CAAC,GAAG,EAAE,EAAE;QAAE,OAAO,IAAI,CAAA;IACzB,4EAA4E;IAC5E,0EAA0E;IAC1E,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,EAAa;QAC1B,eAAe,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,4CAA4C,CAAY;QAC9F,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC;QACzC,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,CAAC;QAC3C,cAAc,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,IAAI,CAAC,CAAC;KAC1D,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,YAA0B,EAC1B,OAAyB,EACzB,YAAqB;IAErB,MAAM,IAAI,GAAG,MAAM,aAAa,CAAmB,OAAO,EAAE,SAAS,EAAE;QACrE,EAAE,EAAE,YAAY,CAAC,WAAW,EAAE;KAC/B,CAAC,CAAA;IACF,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,CAAA;IAErB,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,EAAE,CAAC,CAAA;IAE3D,+DAA+D;IAC/D,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QAChD,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,QAAQ;QACb,YAAY,EAAE,aAAa;KAC5B,CAAC,CAA0B,CAAA;IAE5B,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;IAE7D,OAAO;QACL,MAAM;QACN,wFAAwF;QACxF,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC;QAC/C,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC;QACrD,iBAAiB,EAAE,eAAe,CAAC,GAAG,CAAC,iBAAiB,CAAC;QACzD,iBAAiB,EAAE,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC;QAC3D,cAAc,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,IAAI,CAAmB;QAC3D,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;QAC1B,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,GAAG;QACzB,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,GAAG;QACjC,gBAAgB,EAAE,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAc;QAC3D,aAAa,EAAE,CAAC,GAAG,CAAC,aAAa,IAAI,EAAE,CAAc;KACtD,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Address, PublicClient } from 'viem';
|
|
2
|
+
export declare function readTotalSupply(publicClient: PublicClient, folioAddress: Address): Promise<bigint>;
|
|
3
|
+
export declare function readBalanceOf(publicClient: PublicClient, tokenAddress: Address, account: Address): Promise<bigint>;
|
|
4
|
+
export declare function readName(publicClient: PublicClient, folioAddress: Address): Promise<string>;
|
|
5
|
+
export declare function readSymbol(publicClient: PublicClient, folioAddress: Address): Promise<string>;
|
|
6
|
+
//# sourceMappingURL=read-dtf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-dtf.d.ts","sourceRoot":"","sources":["../../src/dtf/read-dtf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAIjD,wBAAsB,eAAe,CACnC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED,wBAAsB,aAAa,CACjC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,EACrB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,MAAM,CAAC,CAOjB;AAED,wBAAsB,QAAQ,CAC5B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED,wBAAsB,UAAU,CAC9B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,MAAM,CAAC,CAMjB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import folioAbi from '../abi/folio';
|
|
2
|
+
import { ERC20_META_ABI } from '../abi/erc20';
|
|
3
|
+
export async function readTotalSupply(publicClient, folioAddress) {
|
|
4
|
+
return (await publicClient.readContract({
|
|
5
|
+
address: folioAddress,
|
|
6
|
+
abi: folioAbi,
|
|
7
|
+
functionName: 'totalSupply',
|
|
8
|
+
}));
|
|
9
|
+
}
|
|
10
|
+
export async function readBalanceOf(publicClient, tokenAddress, account) {
|
|
11
|
+
return (await publicClient.readContract({
|
|
12
|
+
address: tokenAddress,
|
|
13
|
+
abi: ERC20_META_ABI,
|
|
14
|
+
functionName: 'balanceOf',
|
|
15
|
+
args: [account],
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
export async function readName(publicClient, folioAddress) {
|
|
19
|
+
return (await publicClient.readContract({
|
|
20
|
+
address: folioAddress,
|
|
21
|
+
abi: folioAbi,
|
|
22
|
+
functionName: 'name',
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
export async function readSymbol(publicClient, folioAddress) {
|
|
26
|
+
return (await publicClient.readContract({
|
|
27
|
+
address: folioAddress,
|
|
28
|
+
abi: folioAbi,
|
|
29
|
+
functionName: 'symbol',
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=read-dtf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-dtf.js","sourceRoot":"","sources":["../../src/dtf/read-dtf.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,YAA0B,EAC1B,YAAqB;IAErB,OAAO,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QACtC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,QAAQ;QACb,YAAY,EAAE,aAAa;KAC5B,CAAC,CAAW,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,YAA0B,EAC1B,YAAqB,EACrB,OAAgB;IAEhB,OAAO,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QACtC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,cAAc;QACnB,YAAY,EAAE,WAAW;QACzB,IAAI,EAAE,CAAC,OAAO,CAAC;KAChB,CAAC,CAAW,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,YAA0B,EAC1B,YAAqB;IAErB,OAAO,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QACtC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,QAAQ;QACb,YAAY,EAAE,MAAM;KACrB,CAAC,CAAW,CAAA;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,YAA0B,EAC1B,YAAqB;IAErB,OAAO,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QACtC,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,QAAQ;QACb,YAAY,EAAE,QAAQ;KACvB,CAAC,CAAW,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Address, PublicClient } from 'viem';
|
|
2
|
+
import type { RebalanceControl } from '../types';
|
|
3
|
+
export declare function readRebalanceControl(publicClient: PublicClient, folioAddress: Address): Promise<RebalanceControl>;
|
|
4
|
+
//# sourceMappingURL=read-rebalance-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-rebalance-control.d.ts","sourceRoot":"","sources":["../../src/dtf/read-rebalance-control.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAEjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAGhD,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,gBAAgB,CAAC,CAW3B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import folioAbi from '../abi/folio';
|
|
2
|
+
import { validatePriceControl } from '../utils/validate-price-control';
|
|
3
|
+
export async function readRebalanceControl(publicClient, folioAddress) {
|
|
4
|
+
const [weightControl, priceControl] = (await publicClient.readContract({
|
|
5
|
+
address: folioAddress,
|
|
6
|
+
abi: folioAbi,
|
|
7
|
+
functionName: 'rebalanceControl',
|
|
8
|
+
}));
|
|
9
|
+
return {
|
|
10
|
+
weightControl,
|
|
11
|
+
priceControl: validatePriceControl(priceControl),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=read-rebalance-control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-rebalance-control.js","sourceRoot":"","sources":["../../src/dtf/read-rebalance-control.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,cAAc,CAAA;AAEnC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AAEtE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,YAA0B,EAC1B,YAAqB;IAErB,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC;QACrE,OAAO,EAAE,YAAY;QACrB,GAAG,EAAE,QAAQ;QACb,YAAY,EAAE,kBAAkB;KACjC,CAAC,CAAsB,CAAA;IAExB,OAAO;QACL,aAAa;QACb,YAAY,EAAE,oBAAoB,CAAC,YAAY,CAAC;KACjD,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-roles.d.ts","sourceRoot":"","sources":["../../src/dtf/read-roles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAGjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,wBAAsB,YAAY,CAChC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,EACrB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,QAAQ,CAAC,CA+BnB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import folioAbi from '../abi/folio';
|
|
2
|
+
import { FOLIO_ROLES } from '../constants';
|
|
3
|
+
export async function readDtfRoles(publicClient, folioAddress, account) {
|
|
4
|
+
// WHY: Explicit array instead of Object.values(FOLIO_ROLES) to avoid
|
|
5
|
+
// positional indexing that breaks silently if key order changes.
|
|
6
|
+
const roleChecks = [
|
|
7
|
+
{ key: 'isAdmin', hash: FOLIO_ROLES.DEFAULT_ADMIN },
|
|
8
|
+
{ key: 'isRebalanceManager', hash: FOLIO_ROLES.REBALANCE_MANAGER },
|
|
9
|
+
{ key: 'isAuctionLauncher', hash: FOLIO_ROLES.AUCTION_LAUNCHER },
|
|
10
|
+
{ key: 'isBrandManager', hash: FOLIO_ROLES.BRAND_MANAGER },
|
|
11
|
+
];
|
|
12
|
+
const results = await publicClient.multicall({
|
|
13
|
+
contracts: roleChecks.map(({ hash }) => ({
|
|
14
|
+
address: folioAddress,
|
|
15
|
+
abi: folioAbi,
|
|
16
|
+
functionName: 'hasRole',
|
|
17
|
+
args: [hash, account],
|
|
18
|
+
})),
|
|
19
|
+
});
|
|
20
|
+
// WHY: Defaulting to false on failure is conservative — "no role" means the user
|
|
21
|
+
// won't see buttons/actions they can't execute. Safer than showing capabilities they don't have.
|
|
22
|
+
return {
|
|
23
|
+
isAdmin: results[0].status === 'success' ? results[0].result : false,
|
|
24
|
+
isRebalanceManager: results[1].status === 'success' ? results[1].result : false,
|
|
25
|
+
isAuctionLauncher: results[2].status === 'success' ? results[2].result : false,
|
|
26
|
+
isBrandManager: results[3].status === 'success' ? results[3].result : false,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=read-roles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-roles.js","sourceRoot":"","sources":["../../src/dtf/read-roles.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAG1C,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,YAA0B,EAC1B,YAAqB,EACrB,OAAgB;IAEhB,qEAAqE;IACrE,iEAAiE;IACjE,MAAM,UAAU,GAAG;QACjB,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,CAAC,aAAa,EAAE;QACnD,EAAE,GAAG,EAAE,oBAAoB,EAAE,IAAI,EAAE,WAAW,CAAC,iBAAiB,EAAE;QAClE,EAAE,GAAG,EAAE,mBAAmB,EAAE,IAAI,EAAE,WAAW,CAAC,gBAAgB,EAAE;QAChE,EAAE,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,CAAC,aAAa,EAAE;KAClD,CAAA;IAEV,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC;QAC3C,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACvC,OAAO,EAAE,YAAY;YACrB,GAAG,EAAE,QAAQ;YACb,YAAY,EAAE,SAAkB;YAChC,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,CAAU;SAC/B,CAAC,CAAC;KACJ,CAAC,CAAA;IAEF,iFAAiF;IACjF,iGAAiG;IACjG,OAAO;QACL,OAAO,EACL,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAE,OAAO,CAAC,CAAC,CAAE,CAAC,MAAkB,CAAC,CAAC,CAAC,KAAK;QAC5E,kBAAkB,EAChB,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAE,OAAO,CAAC,CAAC,CAAE,CAAC,MAAkB,CAAC,CAAC,CAAC,KAAK;QAC5E,iBAAiB,EACf,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAE,OAAO,CAAC,CAAC,CAAE,CAAC,MAAkB,CAAC,CAAC,CAAC,KAAK;QAC5E,cAAc,EACZ,OAAO,CAAC,CAAC,CAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAE,OAAO,CAAC,CAAC,CAAE,CAAC,MAAkB,CAAC,CAAC,CAAC,KAAK;KAC7E,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-version.d.ts","sourceRoot":"","sources":["../../src/dtf/read-version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAGjD,wBAAsB,cAAc,CAClC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,MAAM,CAAC,CAMjB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type Address, type PublicClient } from 'viem';
|
|
2
|
+
import type { RedeemQuote, TransactionRequest } from '../types';
|
|
3
|
+
export declare function readRedeemQuote(publicClient: PublicClient, folioAddress: Address, shares: bigint): Promise<RedeemQuote>;
|
|
4
|
+
export declare function buildRedeemCalldata(folioAddress: Address, shares: bigint, receiver: Address, assets: Address[], minAmountsOut: bigint[]): TransactionRequest;
|
|
5
|
+
//# sourceMappingURL=redeem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redeem.d.ts","sourceRoot":"","sources":["../../src/dtf/redeem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,MAAM,CAAA;AAE1E,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAG/D,wBAAsB,eAAe,CACnC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,EACrB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,WAAW,CAAC,CAWtB;AAED,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,OAAO,EACrB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,OAAO,EAAE,EACjB,aAAa,EAAE,MAAM,EAAE,GACtB,kBAAkB,CAcpB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Address, type Hex } from 'viem';
|
|
2
|
+
import type { TransactionRequest, VoteSupport } from '../types';
|
|
3
|
+
export declare function hashDescription(description: string): Hex;
|
|
4
|
+
export declare function buildProposeCalldata(governor: Address, targets: Address[], values: bigint[], calldatas: Hex[], description: string): TransactionRequest;
|
|
5
|
+
export declare function buildCastVoteCalldata(governor: Address, proposalId: bigint, support: VoteSupport): TransactionRequest;
|
|
6
|
+
export declare function buildCastVoteWithReasonCalldata(governor: Address, proposalId: bigint, support: VoteSupport, reason: string): TransactionRequest;
|
|
7
|
+
export declare function buildQueueCalldata(governor: Address, targets: Address[], values: bigint[], calldatas: Hex[], descriptionHash: Hex): TransactionRequest;
|
|
8
|
+
export declare function buildExecuteCalldata(governor: Address, targets: Address[], values: bigint[], calldatas: Hex[], descriptionHash: Hex): TransactionRequest;
|
|
9
|
+
export declare function buildCancelCalldata(governor: Address, targets: Address[], values: bigint[], calldatas: Hex[], descriptionHash: Hex): TransactionRequest;
|
|
10
|
+
export declare function wrapInProposal(governor: Address, target: Address, innerCalldata: Hex, description: string): TransactionRequest;
|
|
11
|
+
//# sourceMappingURL=build-proposal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-proposal.d.ts","sourceRoot":"","sources":["../../src/governance/build-proposal.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,OAAO,EACZ,KAAK,GAAG,EACT,MAAM,MAAM,CAAA;AAEb,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAc/D,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAExD;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,OAAO,EAAE,EAClB,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE,GAAG,EAAE,EAChB,WAAW,EAAE,MAAM,GAClB,kBAAkB,CAWpB;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,OAAO,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,GACnB,kBAAkB,CASpB;AAED,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,OAAO,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,MAAM,GACb,kBAAkB,CASpB;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,OAAO,EAAE,EAClB,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE,GAAG,EAAE,EAChB,eAAe,EAAE,GAAG,GACnB,kBAAkB,CAUpB;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,OAAO,EAAE,EAClB,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE,GAAG,EAAE,EAChB,eAAe,EAAE,GAAG,GACnB,kBAAkB,CAUpB;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,OAAO,EAAE,EAClB,MAAM,EAAE,MAAM,EAAE,EAChB,SAAS,EAAE,GAAG,EAAE,EAChB,eAAe,EAAE,GAAG,GACnB,kBAAkB,CAUpB;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,OAAO,EACf,aAAa,EAAE,GAAG,EAClB,WAAW,EAAE,MAAM,GAClB,kBAAkB,CAQpB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-proposal.js","sourceRoot":"","sources":["../../src/governance/build-proposal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type Address, type Hex } from 'viem';
|
|
2
|
+
import type { FeeRecipient, PriceControl } from '../types';
|
|
3
|
+
export declare function encodeMintFee(fee: bigint): Hex;
|
|
4
|
+
export declare function encodeTvlFee(fee: bigint): Hex;
|
|
5
|
+
export declare function encodeFeeRecipients(recipients: FeeRecipient[]): Hex;
|
|
6
|
+
export declare function encodeMandate(mandate: string): Hex;
|
|
7
|
+
export declare function encodeAuctionLength(seconds: bigint): Hex;
|
|
8
|
+
export declare function encodeRebalanceControl(weightControl: boolean, priceControl: PriceControl): Hex;
|
|
9
|
+
export declare function encodeTrustedFillerRegistry(registry: Address, enabled: boolean): Hex;
|
|
10
|
+
export declare function encodeGrantRole(role: Hex, account: Address): Hex;
|
|
11
|
+
export declare function encodeRevokeRole(role: Hex, account: Address): Hex;
|
|
12
|
+
export declare function encodeStartRebalance(tokens: {
|
|
13
|
+
token: Address;
|
|
14
|
+
weight: {
|
|
15
|
+
low: bigint;
|
|
16
|
+
spot: bigint;
|
|
17
|
+
high: bigint;
|
|
18
|
+
};
|
|
19
|
+
price: {
|
|
20
|
+
low: bigint;
|
|
21
|
+
high: bigint;
|
|
22
|
+
};
|
|
23
|
+
maxAuctionSize: bigint;
|
|
24
|
+
inRebalance: boolean;
|
|
25
|
+
}[], limits: {
|
|
26
|
+
low: bigint;
|
|
27
|
+
spot: bigint;
|
|
28
|
+
high: bigint;
|
|
29
|
+
}, launcherWindow: bigint, ttl: bigint): Hex;
|
|
30
|
+
export declare function encodeAddToBasket(token: Address): Hex;
|
|
31
|
+
export declare function encodeRemoveFromBasket(token: Address): Hex;
|
|
32
|
+
export declare function encodeVotingDelay(delay: bigint): Hex;
|
|
33
|
+
export declare function encodeVotingPeriod(period: bigint): Hex;
|
|
34
|
+
export declare function encodeProposalThreshold(threshold: bigint): Hex;
|
|
35
|
+
export declare function encodeQuorumNumerator(numerator: bigint): Hex;
|
|
36
|
+
export declare function encodeTimelockDelay(delay: bigint): Hex;
|
|
37
|
+
export declare function encodeTimelockGrantRole(role: Hex, account: Address): Hex;
|
|
38
|
+
export declare function encodeTimelockRevokeRole(role: Hex, account: Address): Hex;
|
|
39
|
+
//# sourceMappingURL=build-settings-calldata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-settings-calldata.d.ts","sourceRoot":"","sources":["../../src/governance/build-settings-calldata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,OAAO,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,CAAA;AAIjE,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAI1D,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAM9C;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAM7C;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,GAAG,CAMnE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAMlD;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAMxD;AAED,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,OAAO,EACtB,YAAY,EAAE,YAAY,GACzB,GAAG,CAML;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,OAAO,EACjB,OAAO,EAAE,OAAO,GACf,GAAG,CAML;AAID,wBAAgB,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,GAAG,CAMhE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,GAAG,CAMjE;AAID,wBAAgB,oBAAoB,CAClC,MAAM,EAAE;IACN,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACnD,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACpC,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,OAAO,CAAA;CACrB,EAAE,EACH,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACnD,cAAc,EAAE,MAAM,EACtB,GAAG,EAAE,MAAM,GACV,GAAG,CAML;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,CAMrD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,GAAG,CAM1D;AAKD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAMpD;AAGD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAMtD;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,CAM9D;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG,CAM5D;AAID,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAMtD;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,GAAG,CAMxE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,GAAG,CAMzE"}
|