@andrewkimjoseph/celina-sdk 0.15.1 → 0.15.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.
- package/build/config/celina-tag.d.ts +5 -0
- package/build/config/celina-tag.js +67 -3
- package/build/config/celina-tag.js.map +1 -1
- package/build/index.d.ts +1 -1
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/build/src/a2a/agent-card.d.ts +37 -0
- package/build/src/a2a/agent-card.js +46 -0
- package/build/src/a2a/agent-card.js.map +1 -0
- package/build/src/a2a/index.d.ts +2 -0
- package/build/src/a2a/index.js +3 -0
- package/build/src/a2a/index.js.map +1 -0
- package/build/src/a2a/skills.d.ts +18 -0
- package/build/src/a2a/skills.js +106 -0
- package/build/src/a2a/skills.js.map +1 -0
- package/build/src/aa/create-aa-client.d.ts +44 -0
- package/build/src/aa/create-aa-client.js +115 -0
- package/build/src/aa/create-aa-client.js.map +1 -0
- package/build/src/aa/gas-sponsorship.d.ts +27 -0
- package/build/src/aa/gas-sponsorship.js +65 -0
- package/build/src/aa/gas-sponsorship.js.map +1 -0
- package/build/src/aa/index.d.ts +4 -0
- package/build/src/aa/index.js +4 -0
- package/build/src/aa/index.js.map +1 -0
- package/build/src/aa/prepared-calls.d.ts +8 -0
- package/build/src/aa/prepared-calls.js +27 -0
- package/build/src/aa/prepared-calls.js.map +1 -0
- package/build/src/aa/types.d.ts +61 -0
- package/build/src/aa/types.js +2 -0
- package/build/src/aa/types.js.map +1 -0
- package/build/src/abis/aave-pool.d.ts +37 -0
- package/build/src/abis/aave-pool.js +26 -0
- package/build/src/abis/aave-pool.js.map +1 -0
- package/build/src/abis/accounts.d.ts +13 -0
- package/build/src/abis/accounts.js +10 -0
- package/build/src/abis/accounts.js.map +1 -0
- package/build/src/abis/election.d.ts +124 -0
- package/build/src/abis/election.js +88 -0
- package/build/src/abis/election.js.map +1 -0
- package/build/src/abis/gooddollar-broker.d.ts +77 -0
- package/build/src/abis/gooddollar-broker.js +44 -0
- package/build/src/abis/gooddollar-broker.js.map +1 -0
- package/build/src/abis/gooddollar-identity.d.ts +85 -0
- package/build/src/abis/gooddollar-identity.js +52 -0
- package/build/src/abis/gooddollar-identity.js.map +1 -0
- package/build/src/abis/governance.d.ts +86 -0
- package/build/src/abis/governance.js +68 -0
- package/build/src/abis/governance.js.map +1 -0
- package/build/src/abis/locked-gold.d.ts +10 -0
- package/build/src/abis/locked-gold.js +10 -0
- package/build/src/abis/locked-gold.js.map +1 -0
- package/build/src/abis/nft.d.ts +107 -0
- package/build/src/abis/nft.js +75 -0
- package/build/src/abis/nft.js.map +1 -0
- package/build/src/abis/permit2.d.ts +43 -0
- package/build/src/abis/permit2.js +30 -0
- package/build/src/abis/permit2.js.map +1 -0
- package/build/src/abis/self-registry.d.ts +194 -0
- package/build/src/abis/self-registry.js +120 -0
- package/build/src/abis/self-registry.js.map +1 -0
- package/build/src/abis/ubi-scheme.d.ts +91 -0
- package/build/src/abis/ubi-scheme.js +66 -0
- package/build/src/abis/ubi-scheme.js.map +1 -0
- package/build/src/abis/uniswap-state-view.d.ts +34 -0
- package/build/src/abis/uniswap-state-view.js +22 -0
- package/build/src/abis/uniswap-state-view.js.map +1 -0
- package/build/src/abis/uniswap-v4-quoter.d.ts +86 -0
- package/build/src/abis/uniswap-v4-quoter.js +64 -0
- package/build/src/abis/uniswap-v4-quoter.js.map +1 -0
- package/build/src/abis/universal-router.d.ts +16 -0
- package/build/src/abis/universal-router.js +14 -0
- package/build/src/abis/universal-router.js.map +1 -0
- package/build/src/abis/validators-minimal.d.ts +65 -0
- package/build/src/abis/validators-minimal.js +39 -0
- package/build/src/abis/validators-minimal.js.map +1 -0
- package/build/src/analytics/amplitude.d.ts +11 -0
- package/build/src/analytics/amplitude.js +76 -0
- package/build/src/analytics/amplitude.js.map +1 -0
- package/build/src/analytics/config.d.ts +7 -0
- package/build/src/analytics/config.js +25 -0
- package/build/src/analytics/config.js.map +1 -0
- package/build/src/analytics/consumer-package.d.ts +9 -0
- package/build/src/analytics/consumer-package.js +143 -0
- package/build/src/analytics/consumer-package.js.map +1 -0
- package/build/src/analytics/mcp-tool-events.d.ts +5 -0
- package/build/src/analytics/mcp-tool-events.js +53 -0
- package/build/src/analytics/mcp-tool-events.js.map +1 -0
- package/build/src/analytics/wallet-context.d.ts +11 -0
- package/build/src/analytics/wallet-context.js +81 -0
- package/build/src/analytics/wallet-context.js.map +1 -0
- package/build/src/analytics/wallet-extract.d.ts +9 -0
- package/build/src/analytics/wallet-extract.js +21 -0
- package/build/src/analytics/wallet-extract.js.map +1 -0
- package/build/src/analytics/wrap-service.d.ts +5 -0
- package/build/src/analytics/wrap-service.js +38 -0
- package/build/src/analytics/wrap-service.js.map +1 -0
- package/build/src/clients/celo-client.d.ts +19 -0
- package/build/src/clients/celo-client.js +32 -0
- package/build/src/clients/celo-client.js.map +1 -0
- package/build/src/clients/ens-client.d.ts +17 -0
- package/build/src/clients/ens-client.js +30 -0
- package/build/src/clients/ens-client.js.map +1 -0
- package/build/src/clients/mento-sdk.d.ts +2 -0
- package/build/src/clients/mento-sdk.js +9 -0
- package/build/src/clients/mento-sdk.js.map +1 -0
- package/build/src/clients/self-api.d.ts +82 -0
- package/build/src/clients/self-api.js +242 -0
- package/build/src/clients/self-api.js.map +1 -0
- package/build/src/clients/uniswap-sdk.d.ts +4 -0
- package/build/src/clients/uniswap-sdk.js +13 -0
- package/build/src/clients/uniswap-sdk.js.map +1 -0
- package/build/src/config/aave.d.ts +17 -0
- package/build/src/config/aave.js +77 -0
- package/build/src/config/aave.js.map +1 -0
- package/build/src/config/celina-tag.d.ts +55 -0
- package/build/src/config/celina-tag.js +234 -0
- package/build/src/config/celina-tag.js.map +1 -0
- package/build/src/config/celo-core-contracts.d.ts +8 -0
- package/build/src/config/celo-core-contracts.js +9 -0
- package/build/src/config/celo-core-contracts.js.map +1 -0
- package/build/src/config/chains.d.ts +937 -0
- package/build/src/config/chains.js +319 -0
- package/build/src/config/chains.js.map +1 -0
- package/build/src/config/gooddollar.d.ts +16 -0
- package/build/src/config/gooddollar.js +24 -0
- package/build/src/config/gooddollar.js.map +1 -0
- package/build/src/config/sdk-config.d.ts +44 -0
- package/build/src/config/sdk-config.js +28 -0
- package/build/src/config/sdk-config.js.map +1 -0
- package/build/src/config/self.d.ts +22 -0
- package/build/src/config/self.js +27 -0
- package/build/src/config/self.js.map +1 -0
- package/build/src/config/uniswap.d.ts +42 -0
- package/build/src/config/uniswap.js +76 -0
- package/build/src/config/uniswap.js.map +1 -0
- package/build/src/index.d.ts +127 -0
- package/build/src/index.js +72 -0
- package/build/src/index.js.map +1 -0
- package/build/src/oasf/index.d.ts +2 -0
- package/build/src/oasf/index.js +3 -0
- package/build/src/oasf/index.js.map +1 -0
- package/build/src/oasf/record.d.ts +39 -0
- package/build/src/oasf/record.js +35 -0
- package/build/src/oasf/record.js.map +1 -0
- package/build/src/oasf/taxonomy.d.ts +19 -0
- package/build/src/oasf/taxonomy.js +46 -0
- package/build/src/oasf/taxonomy.js.map +1 -0
- package/build/src/services/aave.service.d.ts +59 -0
- package/build/src/services/aave.service.js +210 -0
- package/build/src/services/aave.service.js.map +1 -0
- package/build/src/services/account.service.d.ts +22 -0
- package/build/src/services/account.service.js +29 -0
- package/build/src/services/account.service.js.map +1 -0
- package/build/src/services/agentkarma.service.d.ts +89 -0
- package/build/src/services/agentkarma.service.js +102 -0
- package/build/src/services/agentkarma.service.js.map +1 -0
- package/build/src/services/blockchain.service.d.ts +126 -0
- package/build/src/services/blockchain.service.js +188 -0
- package/build/src/services/blockchain.service.js.map +1 -0
- package/build/src/services/contract.service.d.ts +78 -0
- package/build/src/services/contract.service.js +117 -0
- package/build/src/services/contract.service.js.map +1 -0
- package/build/src/services/ens.service.d.ts +44 -0
- package/build/src/services/ens.service.js +92 -0
- package/build/src/services/ens.service.js.map +1 -0
- package/build/src/services/gooddollar.service.d.ts +184 -0
- package/build/src/services/gooddollar.service.js +675 -0
- package/build/src/services/gooddollar.service.js.map +1 -0
- package/build/src/services/governance.service.d.ts +96 -0
- package/build/src/services/governance.service.js +255 -0
- package/build/src/services/governance.service.js.map +1 -0
- package/build/src/services/mento-fx.service.d.ts +81 -0
- package/build/src/services/mento-fx.service.js +318 -0
- package/build/src/services/mento-fx.service.js.map +1 -0
- package/build/src/services/nft.service.d.ts +58 -0
- package/build/src/services/nft.service.js +222 -0
- package/build/src/services/nft.service.js.map +1 -0
- package/build/src/services/self-session-store.d.ts +19 -0
- package/build/src/services/self-session-store.js +28 -0
- package/build/src/services/self-session-store.js.map +1 -0
- package/build/src/services/self.service.d.ts +241 -0
- package/build/src/services/self.service.js +699 -0
- package/build/src/services/self.service.js.map +1 -0
- package/build/src/services/staking.service.d.ts +140 -0
- package/build/src/services/staking.service.js +444 -0
- package/build/src/services/staking.service.js.map +1 -0
- package/build/src/services/token.service.d.ts +110 -0
- package/build/src/services/token.service.js +189 -0
- package/build/src/services/token.service.js.map +1 -0
- package/build/src/services/transaction.service.d.ts +69 -0
- package/build/src/services/transaction.service.js +197 -0
- package/build/src/services/transaction.service.js.map +1 -0
- package/build/src/services/uniswap-path-router.d.ts +40 -0
- package/build/src/services/uniswap-path-router.js +168 -0
- package/build/src/services/uniswap-path-router.js.map +1 -0
- package/build/src/services/uniswap-pool-discovery.d.ts +55 -0
- package/build/src/services/uniswap-pool-discovery.js +198 -0
- package/build/src/services/uniswap-pool-discovery.js.map +1 -0
- package/build/src/services/uniswap.service.d.ts +83 -0
- package/build/src/services/uniswap.service.js +352 -0
- package/build/src/services/uniswap.service.js.map +1 -0
- package/build/src/simulation/index.d.ts +5 -0
- package/build/src/simulation/index.js +2 -0
- package/build/src/simulation/index.js.map +1 -0
- package/build/src/simulation/simulate-prepared-step.d.ts +17 -0
- package/build/src/simulation/simulate-prepared-step.js +42 -0
- package/build/src/simulation/simulate-prepared-step.js.map +1 -0
- package/build/src/tools/catalog.d.ts +11 -0
- package/build/src/tools/catalog.js +43 -0
- package/build/src/tools/catalog.js.map +1 -0
- package/build/src/tools/domains/aave.d.ts +2 -0
- package/build/src/tools/domains/aave.js +115 -0
- package/build/src/tools/domains/aave.js.map +1 -0
- package/build/src/tools/domains/agentkarma.d.ts +2 -0
- package/build/src/tools/domains/agentkarma.js +92 -0
- package/build/src/tools/domains/agentkarma.js.map +1 -0
- package/build/src/tools/domains/blockchain.d.ts +2 -0
- package/build/src/tools/domains/blockchain.js +122 -0
- package/build/src/tools/domains/blockchain.js.map +1 -0
- package/build/src/tools/domains/browser.d.ts +2 -0
- package/build/src/tools/domains/browser.js +45 -0
- package/build/src/tools/domains/browser.js.map +1 -0
- package/build/src/tools/domains/contract.d.ts +2 -0
- package/build/src/tools/domains/contract.js +67 -0
- package/build/src/tools/domains/contract.js.map +1 -0
- package/build/src/tools/domains/ens.d.ts +2 -0
- package/build/src/tools/domains/ens.js +16 -0
- package/build/src/tools/domains/ens.js.map +1 -0
- package/build/src/tools/domains/gooddollar.d.ts +2 -0
- package/build/src/tools/domains/gooddollar.js +171 -0
- package/build/src/tools/domains/gooddollar.js.map +1 -0
- package/build/src/tools/domains/governance.d.ts +2 -0
- package/build/src/tools/domains/governance.js +41 -0
- package/build/src/tools/domains/governance.js.map +1 -0
- package/build/src/tools/domains/index.d.ts +1 -0
- package/build/src/tools/domains/index.js +33 -0
- package/build/src/tools/domains/index.js.map +1 -0
- package/build/src/tools/domains/mento-fx.d.ts +2 -0
- package/build/src/tools/domains/mento-fx.js +67 -0
- package/build/src/tools/domains/mento-fx.js.map +1 -0
- package/build/src/tools/domains/nft.d.ts +2 -0
- package/build/src/tools/domains/nft.js +38 -0
- package/build/src/tools/domains/nft.js.map +1 -0
- package/build/src/tools/domains/self.d.ts +2 -0
- package/build/src/tools/domains/self.js +187 -0
- package/build/src/tools/domains/self.js.map +1 -0
- package/build/src/tools/domains/staking.d.ts +2 -0
- package/build/src/tools/domains/staking.js +74 -0
- package/build/src/tools/domains/staking.js.map +1 -0
- package/build/src/tools/domains/token.d.ts +2 -0
- package/build/src/tools/domains/token.js +74 -0
- package/build/src/tools/domains/token.js.map +1 -0
- package/build/src/tools/domains/transaction.d.ts +2 -0
- package/build/src/tools/domains/transaction.js +120 -0
- package/build/src/tools/domains/transaction.js.map +1 -0
- package/build/src/tools/domains/uniswap.d.ts +2 -0
- package/build/src/tools/domains/uniswap.js +67 -0
- package/build/src/tools/domains/uniswap.js.map +1 -0
- package/build/src/tools/filter.d.ts +2 -0
- package/build/src/tools/filter.js +50 -0
- package/build/src/tools/filter.js.map +1 -0
- package/build/src/tools/index.d.ts +7 -0
- package/build/src/tools/index.js +7 -0
- package/build/src/tools/index.js.map +1 -0
- package/build/src/tools/schemas/common.d.ts +165 -0
- package/build/src/tools/schemas/common.js +207 -0
- package/build/src/tools/schemas/common.js.map +1 -0
- package/build/src/tools/schemas/wallet-params.d.ts +9 -0
- package/build/src/tools/schemas/wallet-params.js +52 -0
- package/build/src/tools/schemas/wallet-params.js.map +1 -0
- package/build/src/tools/swap-routing.d.ts +25 -0
- package/build/src/tools/swap-routing.js +174 -0
- package/build/src/tools/swap-routing.js.map +1 -0
- package/build/src/tools/types.d.ts +124 -0
- package/build/src/tools/types.js +2 -0
- package/build/src/tools/types.js.map +1 -0
- package/build/src/tools/utils/normalize-token.d.ts +2 -0
- package/build/src/tools/utils/normalize-token.js +12 -0
- package/build/src/tools/utils/normalize-token.js.map +1 -0
- package/build/src/tools/utils/wallet.d.ts +4 -0
- package/build/src/tools/utils/wallet.js +8 -0
- package/build/src/tools/utils/wallet.js.map +1 -0
- package/build/src/tools/website-sync.d.ts +28 -0
- package/build/src/tools/website-sync.js +198 -0
- package/build/src/tools/website-sync.js.map +1 -0
- package/build/src/types/prepared.d.ts +43 -0
- package/build/src/types/prepared.js +15 -0
- package/build/src/types/prepared.js.map +1 -0
- package/build/src/utils/celo-format.d.ts +6 -0
- package/build/src/utils/celo-format.js +17 -0
- package/build/src/utils/celo-format.js.map +1 -0
- package/build/src/utils/erc20-allowance-storage.d.ts +20 -0
- package/build/src/utils/erc20-allowance-storage.js +64 -0
- package/build/src/utils/erc20-allowance-storage.js.map +1 -0
- package/build/src/utils/format-date.d.ts +2 -0
- package/build/src/utils/format-date.js +13 -0
- package/build/src/utils/format-date.js.map +1 -0
- package/build/src/utils/format-duration.d.ts +2 -0
- package/build/src/utils/format-duration.js +17 -0
- package/build/src/utils/format-duration.js.map +1 -0
- package/build/src/utils/format-unix-datetime.d.ts +4 -0
- package/build/src/utils/format-unix-datetime.js +18 -0
- package/build/src/utils/format-unix-datetime.js.map +1 -0
- package/build/src/utils/gooddollar-ubi-period.d.ts +23 -0
- package/build/src/utils/gooddollar-ubi-period.js +23 -0
- package/build/src/utils/gooddollar-ubi-period.js.map +1 -0
- package/build/src/utils/normalize-address.d.ts +7 -0
- package/build/src/utils/normalize-address.js +16 -0
- package/build/src/utils/normalize-address.js.map +1 -0
- package/build/src/utils/self-format.d.ts +28 -0
- package/build/src/utils/self-format.js +79 -0
- package/build/src/utils/self-format.js.map +1 -0
- package/build/src/utils/self-signing.d.ts +4 -0
- package/build/src/utils/self-signing.js +38 -0
- package/build/src/utils/self-signing.js.map +1 -0
- package/build/src/utils/transaction-errors.d.ts +3 -0
- package/build/src/utils/transaction-errors.js +17 -0
- package/build/src/utils/transaction-errors.js.map +1 -0
- package/build/tests/catalog/domains/blockchain.d.ts +2 -0
- package/build/tests/catalog/domains/blockchain.js +127 -0
- package/build/tests/catalog/domains/blockchain.js.map +1 -0
- package/build/tests/catalog/domains/chain-ext.d.ts +5 -0
- package/build/tests/catalog/domains/chain-ext.js +207 -0
- package/build/tests/catalog/domains/chain-ext.js.map +1 -0
- package/build/tests/catalog/domains/defi.d.ts +6 -0
- package/build/tests/catalog/domains/defi.js +581 -0
- package/build/tests/catalog/domains/defi.js.map +1 -0
- package/build/tests/catalog/domains/self.d.ts +2 -0
- package/build/tests/catalog/domains/self.js +208 -0
- package/build/tests/catalog/domains/self.js.map +1 -0
- package/build/tests/catalog/domains/token.d.ts +2 -0
- package/build/tests/catalog/domains/token.js +70 -0
- package/build/tests/catalog/domains/token.js.map +1 -0
- package/build/tests/catalog/domains/transaction.d.ts +2 -0
- package/build/tests/catalog/domains/transaction.js +96 -0
- package/build/tests/catalog/domains/transaction.js.map +1 -0
- package/build/tests/catalog/index.d.ts +2 -0
- package/build/tests/catalog/index.js +2 -0
- package/build/tests/catalog/index.js.map +1 -0
- package/build/tests/catalog/operations.d.ts +12 -0
- package/build/tests/catalog/operations.js +29 -0
- package/build/tests/catalog/operations.js.map +1 -0
- package/build/tests/catalog/types.d.ts +24 -0
- package/build/tests/catalog/types.js +2 -0
- package/build/tests/catalog/types.js.map +1 -0
- package/build/tests/fixtures/mainnet.d.ts +54 -0
- package/build/tests/fixtures/mainnet.js +53 -0
- package/build/tests/fixtures/mainnet.js.map +1 -0
- package/build/tests/helpers/assert.d.ts +4 -0
- package/build/tests/helpers/assert.js +24 -0
- package/build/tests/helpers/assert.js.map +1 -0
- package/build/tests/helpers/env.d.ts +12 -0
- package/build/tests/helpers/env.js +29 -0
- package/build/tests/helpers/env.js.map +1 -0
- package/build/tests/helpers/gating.d.ts +3 -0
- package/build/tests/helpers/gating.js +23 -0
- package/build/tests/helpers/gating.js.map +1 -0
- package/build/tests/testing-entry.d.ts +6 -0
- package/build/tests/testing-entry.js +6 -0
- package/build/tests/testing-entry.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic contract reads and gas estimates — caller supplies the ABI.
|
|
3
|
+
*/
|
|
4
|
+
import { type Abi } from "viem";
|
|
5
|
+
import type { CeloClientFactory } from "../clients/celo-client.js";
|
|
6
|
+
/** Parameters for a read-only or gas-estimated contract call on Celo mainnet. */
|
|
7
|
+
export interface ContractCallParams {
|
|
8
|
+
/** Target contract address. */
|
|
9
|
+
contractAddress: `0x${string}`;
|
|
10
|
+
/** ABI function name to invoke. */
|
|
11
|
+
functionName: string;
|
|
12
|
+
/** Contract ABI JSON (must include `functionName`). */
|
|
13
|
+
abi: Abi;
|
|
14
|
+
/** Positional arguments for the function (default `[]`). */
|
|
15
|
+
functionArgs?: unknown[];
|
|
16
|
+
/** Optional `msg.sender` for state-dependent view calls. */
|
|
17
|
+
fromAddress?: `0x${string}`;
|
|
18
|
+
/** Wei value as decimal string for payable calls (default `"0"`). */
|
|
19
|
+
value?: string;
|
|
20
|
+
}
|
|
21
|
+
/** Read-only and gas-estimation helpers for arbitrary contracts. */
|
|
22
|
+
export declare class ContractService {
|
|
23
|
+
private readonly clientFactory;
|
|
24
|
+
constructor(clientFactory: CeloClientFactory);
|
|
25
|
+
/**
|
|
26
|
+
* Simulate a read-only contract call (`eth_call`).
|
|
27
|
+
* @param params - Contract address, ABI, function name, and optional args
|
|
28
|
+
* @returns Decoded result on success; `{ success: false, error }` on revert
|
|
29
|
+
*/
|
|
30
|
+
callFunction(params: ContractCallParams): Promise<{
|
|
31
|
+
network: "mainnet";
|
|
32
|
+
contractAddress: `0x${string}`;
|
|
33
|
+
functionName: string;
|
|
34
|
+
result: unknown;
|
|
35
|
+
success: boolean;
|
|
36
|
+
error?: undefined;
|
|
37
|
+
} | {
|
|
38
|
+
network: "mainnet";
|
|
39
|
+
contractAddress: `0x${string}`;
|
|
40
|
+
functionName: string;
|
|
41
|
+
result: null;
|
|
42
|
+
success: boolean;
|
|
43
|
+
error: string;
|
|
44
|
+
}>;
|
|
45
|
+
/**
|
|
46
|
+
* Estimate gas for a contract call from `fromAddress`.
|
|
47
|
+
* @param params - Same as `callFunction` plus required `fromAddress`
|
|
48
|
+
* @returns Gas estimate, current gas price, and total cost in wei
|
|
49
|
+
*/
|
|
50
|
+
estimateGas(params: ContractCallParams & {
|
|
51
|
+
fromAddress: `0x${string}`;
|
|
52
|
+
}): Promise<{
|
|
53
|
+
network: "mainnet";
|
|
54
|
+
contractAddress: `0x${string}`;
|
|
55
|
+
functionName: string;
|
|
56
|
+
gasEstimate: string;
|
|
57
|
+
gasPrice: string;
|
|
58
|
+
totalCost: string;
|
|
59
|
+
success: boolean;
|
|
60
|
+
error?: undefined;
|
|
61
|
+
} | {
|
|
62
|
+
network: "mainnet";
|
|
63
|
+
contractAddress: `0x${string}`;
|
|
64
|
+
functionName: string;
|
|
65
|
+
gasEstimate: string;
|
|
66
|
+
gasPrice: string;
|
|
67
|
+
totalCost: string;
|
|
68
|
+
success: boolean;
|
|
69
|
+
error: string;
|
|
70
|
+
}>;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Decode raw calldata result bytes using a single ABI function entry.
|
|
74
|
+
* @param abi - Contract ABI containing `functionName`
|
|
75
|
+
* @param functionName - Function whose return types define decoding
|
|
76
|
+
* @param data - Hex return data from `eth_call`
|
|
77
|
+
*/
|
|
78
|
+
export declare function decodeContractResult(abi: Abi, functionName: string, data: `0x${string}`): readonly unknown[];
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic contract reads and gas estimates — caller supplies the ABI.
|
|
3
|
+
*/
|
|
4
|
+
import { decodeFunctionResult, encodeFunctionData, } from "viem";
|
|
5
|
+
import { normalizeAddress } from "../utils/normalize-address.js";
|
|
6
|
+
function findAbiFunction(abi, functionName) {
|
|
7
|
+
const fn = abi.find((item) => item.type === "function" && item.name === functionName);
|
|
8
|
+
if (!fn) {
|
|
9
|
+
throw new Error(`Function "${functionName}" not found in ABI`);
|
|
10
|
+
}
|
|
11
|
+
return fn;
|
|
12
|
+
}
|
|
13
|
+
/** Read-only and gas-estimation helpers for arbitrary contracts. */
|
|
14
|
+
export class ContractService {
|
|
15
|
+
clientFactory;
|
|
16
|
+
constructor(clientFactory) {
|
|
17
|
+
this.clientFactory = clientFactory;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Simulate a read-only contract call (`eth_call`).
|
|
21
|
+
* @param params - Contract address, ABI, function name, and optional args
|
|
22
|
+
* @returns Decoded result on success; `{ success: false, error }` on revert
|
|
23
|
+
*/
|
|
24
|
+
async callFunction(params) {
|
|
25
|
+
const contractAddress = normalizeAddress(params.contractAddress, "contract address");
|
|
26
|
+
const fromAddress = params.fromAddress
|
|
27
|
+
? normalizeAddress(params.fromAddress, "from address")
|
|
28
|
+
: undefined;
|
|
29
|
+
const { public: client } = this.clientFactory.getClients();
|
|
30
|
+
const args = params.functionArgs ?? [];
|
|
31
|
+
try {
|
|
32
|
+
const result = await client.readContract({
|
|
33
|
+
address: contractAddress,
|
|
34
|
+
abi: params.abi,
|
|
35
|
+
functionName: params.functionName,
|
|
36
|
+
args: args,
|
|
37
|
+
...(fromAddress ? { account: fromAddress } : {}),
|
|
38
|
+
});
|
|
39
|
+
return {
|
|
40
|
+
network: "mainnet",
|
|
41
|
+
contractAddress,
|
|
42
|
+
functionName: params.functionName,
|
|
43
|
+
result,
|
|
44
|
+
success: true,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
return {
|
|
49
|
+
network: "mainnet",
|
|
50
|
+
contractAddress,
|
|
51
|
+
functionName: params.functionName,
|
|
52
|
+
result: null,
|
|
53
|
+
success: false,
|
|
54
|
+
error: error instanceof Error ? error.message : String(error),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Estimate gas for a contract call from `fromAddress`.
|
|
60
|
+
* @param params - Same as `callFunction` plus required `fromAddress`
|
|
61
|
+
* @returns Gas estimate, current gas price, and total cost in wei
|
|
62
|
+
*/
|
|
63
|
+
async estimateGas(params) {
|
|
64
|
+
const contractAddress = normalizeAddress(params.contractAddress, "contract address");
|
|
65
|
+
const fromAddress = normalizeAddress(params.fromAddress, "from address");
|
|
66
|
+
const { public: client } = this.clientFactory.getClients();
|
|
67
|
+
const args = params.functionArgs ?? [];
|
|
68
|
+
const value = params.value ? BigInt(params.value) : 0n;
|
|
69
|
+
try {
|
|
70
|
+
const data = encodeFunctionData({
|
|
71
|
+
abi: params.abi,
|
|
72
|
+
functionName: params.functionName,
|
|
73
|
+
args: args,
|
|
74
|
+
});
|
|
75
|
+
const gasEstimate = await client.estimateGas({
|
|
76
|
+
account: fromAddress,
|
|
77
|
+
to: contractAddress,
|
|
78
|
+
data,
|
|
79
|
+
value,
|
|
80
|
+
});
|
|
81
|
+
const gasPrice = await client.getGasPrice();
|
|
82
|
+
const totalCost = gasEstimate * gasPrice;
|
|
83
|
+
return {
|
|
84
|
+
network: "mainnet",
|
|
85
|
+
contractAddress,
|
|
86
|
+
functionName: params.functionName,
|
|
87
|
+
gasEstimate: gasEstimate.toString(),
|
|
88
|
+
gasPrice: gasPrice.toString(),
|
|
89
|
+
totalCost: totalCost.toString(),
|
|
90
|
+
success: true,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
return {
|
|
95
|
+
network: "mainnet",
|
|
96
|
+
contractAddress,
|
|
97
|
+
functionName: params.functionName,
|
|
98
|
+
gasEstimate: "0",
|
|
99
|
+
gasPrice: "0",
|
|
100
|
+
totalCost: "0",
|
|
101
|
+
success: false,
|
|
102
|
+
error: error instanceof Error ? error.message : String(error),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Decode raw calldata result bytes using a single ABI function entry.
|
|
109
|
+
* @param abi - Contract ABI containing `functionName`
|
|
110
|
+
* @param functionName - Function whose return types define decoding
|
|
111
|
+
* @param data - Hex return data from `eth_call`
|
|
112
|
+
*/
|
|
113
|
+
export function decodeContractResult(abi, functionName, data) {
|
|
114
|
+
const fn = findAbiFunction(abi, functionName);
|
|
115
|
+
return decodeFunctionResult({ abi: [fn], functionName, data });
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=contract.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.service.js","sourceRoot":"","sources":["../../../src/services/contract.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { type EnsClientFactory } from "../clients/ens-client.js";
|
|
2
|
+
/** Chain used for ENS resolution. */
|
|
3
|
+
export type EnsResolveChain = "celo" | "ethereum";
|
|
4
|
+
/** Address with optional ENS metadata when input was a name. */
|
|
5
|
+
export type ResolvedRecipient = {
|
|
6
|
+
address: `0x${string}`;
|
|
7
|
+
ens?: {
|
|
8
|
+
name: string;
|
|
9
|
+
normalizedName: string;
|
|
10
|
+
/** Present when resolved on Celo (may fall back to Ethereum records). */
|
|
11
|
+
resolvedVia?: "celo" | "ethereum";
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
/** ENS name and address resolution for send/swap recipients. */
|
|
15
|
+
export declare class EnsService {
|
|
16
|
+
private readonly ensClientFactory;
|
|
17
|
+
constructor(ensClientFactory: EnsClientFactory);
|
|
18
|
+
/**
|
|
19
|
+
* Resolve an ENS name on Celo or Ethereum to an address.
|
|
20
|
+
* @param name - ENS name (e.g. `andrewkimjoseph.celo.eth`)
|
|
21
|
+
* @param chain - `"celo"` tries Celo coin type first, then Ethereum; `"ethereum"` uses ETH only
|
|
22
|
+
* @throws When no address record exists for the name
|
|
23
|
+
*/
|
|
24
|
+
resolveEns(name: string, chain?: EnsResolveChain): Promise<{
|
|
25
|
+
name: string;
|
|
26
|
+
normalizedName: string;
|
|
27
|
+
address: `0x${string}`;
|
|
28
|
+
coinType: string;
|
|
29
|
+
chain: "ethereum";
|
|
30
|
+
resolvedVia?: undefined;
|
|
31
|
+
} | {
|
|
32
|
+
name: string;
|
|
33
|
+
normalizedName: string;
|
|
34
|
+
address: `0x${string}`;
|
|
35
|
+
coinType: string;
|
|
36
|
+
chain: "celo";
|
|
37
|
+
resolvedVia: "celo" | "ethereum";
|
|
38
|
+
}>;
|
|
39
|
+
/**
|
|
40
|
+
* Accept a raw `0x` address or ENS name; returns address plus optional ENS metadata.
|
|
41
|
+
* @param input - Hex address or ENS name
|
|
42
|
+
*/
|
|
43
|
+
resolveAddressOrEns(input: string): Promise<ResolvedRecipient>;
|
|
44
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ENS resolution on Celo (coin type 42220) and Ethereum mainnet.
|
|
3
|
+
*/
|
|
4
|
+
import { toCoinType } from "viem";
|
|
5
|
+
import { celo } from "viem/chains";
|
|
6
|
+
import { getEnsAddress, normalize } from "viem/ens";
|
|
7
|
+
import { ENS_CCIP_GATEWAY, } from "../clients/ens-client.js";
|
|
8
|
+
const ADDRESS_PATTERN = /^0x[a-fA-F0-9]{40}$/;
|
|
9
|
+
/** ENS name and address resolution for send/swap recipients. */
|
|
10
|
+
export class EnsService {
|
|
11
|
+
ensClientFactory;
|
|
12
|
+
constructor(ensClientFactory) {
|
|
13
|
+
this.ensClientFactory = ensClientFactory;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Resolve an ENS name on Celo or Ethereum to an address.
|
|
17
|
+
* @param name - ENS name (e.g. `andrewkimjoseph.celo.eth`)
|
|
18
|
+
* @param chain - `"celo"` tries Celo coin type first, then Ethereum; `"ethereum"` uses ETH only
|
|
19
|
+
* @throws When no address record exists for the name
|
|
20
|
+
*/
|
|
21
|
+
async resolveEns(name, chain = "celo") {
|
|
22
|
+
const trimmedName = name.trim();
|
|
23
|
+
const normalizedName = normalize(trimmedName);
|
|
24
|
+
const client = this.ensClientFactory.getClient();
|
|
25
|
+
const gatewayUrls = [ENS_CCIP_GATEWAY];
|
|
26
|
+
if (chain === "ethereum") {
|
|
27
|
+
const address = await getEnsAddress(client, {
|
|
28
|
+
name: normalizedName,
|
|
29
|
+
gatewayUrls,
|
|
30
|
+
});
|
|
31
|
+
if (!address) {
|
|
32
|
+
throw new Error(`ENS name "${trimmedName}" has no Ethereum address record`);
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
name: trimmedName,
|
|
36
|
+
normalizedName,
|
|
37
|
+
address,
|
|
38
|
+
coinType: "60",
|
|
39
|
+
chain: "ethereum",
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const celoCoinType = toCoinType(celo.id);
|
|
43
|
+
let address = await getEnsAddress(client, {
|
|
44
|
+
name: normalizedName,
|
|
45
|
+
coinType: celoCoinType,
|
|
46
|
+
gatewayUrls,
|
|
47
|
+
});
|
|
48
|
+
let coinType = celoCoinType.toString();
|
|
49
|
+
let resolvedVia = "celo";
|
|
50
|
+
if (!address) {
|
|
51
|
+
address = await getEnsAddress(client, {
|
|
52
|
+
name: normalizedName,
|
|
53
|
+
gatewayUrls,
|
|
54
|
+
});
|
|
55
|
+
coinType = "60";
|
|
56
|
+
resolvedVia = "ethereum";
|
|
57
|
+
}
|
|
58
|
+
if (!address) {
|
|
59
|
+
throw new Error(`ENS name "${trimmedName}" could not be resolved to an address`);
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
name: trimmedName,
|
|
63
|
+
normalizedName,
|
|
64
|
+
address,
|
|
65
|
+
coinType,
|
|
66
|
+
chain: "celo",
|
|
67
|
+
resolvedVia,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Accept a raw `0x` address or ENS name; returns address plus optional ENS metadata.
|
|
72
|
+
* @param input - Hex address or ENS name
|
|
73
|
+
*/
|
|
74
|
+
async resolveAddressOrEns(input) {
|
|
75
|
+
const trimmed = input.trim();
|
|
76
|
+
if (ADDRESS_PATTERN.test(trimmed)) {
|
|
77
|
+
return { address: trimmed };
|
|
78
|
+
}
|
|
79
|
+
const resolved = await this.resolveEns(trimmed);
|
|
80
|
+
return {
|
|
81
|
+
address: resolved.address,
|
|
82
|
+
ens: {
|
|
83
|
+
name: resolved.name,
|
|
84
|
+
normalizedName: resolved.normalizedName,
|
|
85
|
+
...(resolved.chain === "celo"
|
|
86
|
+
? { resolvedVia: resolved.resolvedVia }
|
|
87
|
+
: {}),
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=ens.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ens.service.js","sourceRoot":"","sources":["../../../src/services/ens.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import type { CeloClientFactory } from "../clients/celo-client.js";
|
|
2
|
+
import { type SerializedPreparedFlow } from "../types/prepared.js";
|
|
3
|
+
export type GoodDollarReserveAmountSide = "in" | "out";
|
|
4
|
+
/** Optional parameters for GoodDollar reserve swap prepares. */
|
|
5
|
+
export interface GoodDollarReserveSwapParams {
|
|
6
|
+
/** Max slippage tolerance in percent (default `0.5`). */
|
|
7
|
+
slippageTolerance?: number;
|
|
8
|
+
/** Address receiving output tokens (default: `from`). */
|
|
9
|
+
recipient?: `0x${string}`;
|
|
10
|
+
/**
|
|
11
|
+
* `in` (default): `amount` is token_in spend. `out`: `amount` is desired token_out;
|
|
12
|
+
* SDK resolves required token_in via MentoBroker `getAmountIn`.
|
|
13
|
+
*/
|
|
14
|
+
amountSide?: GoodDollarReserveAmountSide;
|
|
15
|
+
}
|
|
16
|
+
export interface GoodDollarReserveQuoteOptions {
|
|
17
|
+
/** @deprecated Ignored; balance checks run on prepare/estimate only. */
|
|
18
|
+
from?: `0x${string}`;
|
|
19
|
+
amountSide?: GoodDollarReserveAmountSide;
|
|
20
|
+
}
|
|
21
|
+
/** GoodDollar IdentityV4 whitelist, reverification, daily UBI claim, and reserve swap preparation. */
|
|
22
|
+
export declare class GoodDollarService {
|
|
23
|
+
private readonly clientFactory;
|
|
24
|
+
private readonly tokenService;
|
|
25
|
+
private readonly attributionTags?;
|
|
26
|
+
constructor(clientFactory: CeloClientFactory);
|
|
27
|
+
private getPublicClient;
|
|
28
|
+
private resolveWhitelistedRoot;
|
|
29
|
+
private fetchWhitelistingData;
|
|
30
|
+
/**
|
|
31
|
+
* How a wallet links to GoodDollar IdentityV4 (root vs connected account).
|
|
32
|
+
* @param address - Wallet to inspect
|
|
33
|
+
*/
|
|
34
|
+
getIdentityLink(address: `0x${string}`): Promise<{
|
|
35
|
+
address: `0x${string}`;
|
|
36
|
+
contract: "0xC361A6E67822a0EDc17D899227dd9FC50BD62F42";
|
|
37
|
+
whitelistedRoot: `0x${string}` | null;
|
|
38
|
+
isConnectedWallet: boolean;
|
|
39
|
+
isWhitelistedRoot: boolean;
|
|
40
|
+
connectedTo: `0x${string}` | null;
|
|
41
|
+
checkedAddress: `0x${string}`;
|
|
42
|
+
isWhitelisted: boolean;
|
|
43
|
+
}>;
|
|
44
|
+
/**
|
|
45
|
+
* GoodDollar IdentityV4 whitelist status and reverification progress for a wallet.
|
|
46
|
+
* Resolves connected wallets via Identity `getWhitelistedRoot`.
|
|
47
|
+
* @param address - Wallet to check against IdentityV4
|
|
48
|
+
* @returns On-chain status, whitelist dates, field descriptions, and reverification timeline
|
|
49
|
+
*/
|
|
50
|
+
getWhitelistingInfo(address: `0x${string}`): Promise<{
|
|
51
|
+
contract: "0xC361A6E67822a0EDc17D899227dd9FC50BD62F42";
|
|
52
|
+
isWhitelisted: boolean;
|
|
53
|
+
status: number;
|
|
54
|
+
statusLabel: string;
|
|
55
|
+
whitelistedOn: string | null;
|
|
56
|
+
lastAuthenticatedOn: string | null;
|
|
57
|
+
fieldDescriptions: {
|
|
58
|
+
whitelistedOn: string;
|
|
59
|
+
lastAuthenticatedOn: string;
|
|
60
|
+
};
|
|
61
|
+
reverification: {
|
|
62
|
+
daysSinceLastAuthentication: number;
|
|
63
|
+
currentReverificationPeriodDays: number;
|
|
64
|
+
maxReverificationPeriodDays: number;
|
|
65
|
+
daysUntilReverificationRequired: number;
|
|
66
|
+
reverificationRequiredOn: string;
|
|
67
|
+
reverificationProgressPercent: number;
|
|
68
|
+
isReverificationOverdue: boolean;
|
|
69
|
+
} | null;
|
|
70
|
+
identity: {
|
|
71
|
+
dateAuthenticated: number;
|
|
72
|
+
dateAdded: number;
|
|
73
|
+
did: string;
|
|
74
|
+
whitelistedOnChainId: number;
|
|
75
|
+
status: number;
|
|
76
|
+
authCount: number;
|
|
77
|
+
};
|
|
78
|
+
address: `0x${string}`;
|
|
79
|
+
whitelistedRoot: `0x${string}` | null;
|
|
80
|
+
isConnectedWallet: boolean;
|
|
81
|
+
checkedAddress: `0x${string}`;
|
|
82
|
+
}>;
|
|
83
|
+
/**
|
|
84
|
+
* Daily UBI claim eligibility for a wallet against UBISchemeV2 on Celo.
|
|
85
|
+
* Resolves connected wallets via Identity `getWhitelistedRoot`.
|
|
86
|
+
*/
|
|
87
|
+
getUbiClaimEligibility(address: `0x${string}`): Promise<{
|
|
88
|
+
address: `0x${string}`;
|
|
89
|
+
contract: "0x43d72Ff17701B2DA814620735C39C620Ce0ea4A1";
|
|
90
|
+
whitelistedRoot: `0x${string}` | null;
|
|
91
|
+
isConnectedWallet: boolean;
|
|
92
|
+
isEligibleToClaim: boolean;
|
|
93
|
+
claimableAmount: string;
|
|
94
|
+
claimableAmountFormatted: string;
|
|
95
|
+
alreadyClaimedToday: boolean;
|
|
96
|
+
inClaimCooldown: boolean;
|
|
97
|
+
lastClaimedAt: string | null;
|
|
98
|
+
nextClaimAvailableAt: string;
|
|
99
|
+
secondsUntilNextClaim: string;
|
|
100
|
+
nextClaimAvailableIn: string;
|
|
101
|
+
ubiPeriodDay: string;
|
|
102
|
+
schemePaused: boolean;
|
|
103
|
+
schemeStarted: boolean;
|
|
104
|
+
estimatedDailyUbi: string;
|
|
105
|
+
estimatedDailyUbiFormatted: string;
|
|
106
|
+
currentDailyUbi: string;
|
|
107
|
+
currentDailyUbiFormatted: string;
|
|
108
|
+
reasons: string[];
|
|
109
|
+
identity: {
|
|
110
|
+
checkedAddress: `0x${string}`;
|
|
111
|
+
isWhitelisted: boolean;
|
|
112
|
+
statusLabel: string;
|
|
113
|
+
reverification: {
|
|
114
|
+
daysSinceLastAuthentication: number;
|
|
115
|
+
currentReverificationPeriodDays: number;
|
|
116
|
+
maxReverificationPeriodDays: number;
|
|
117
|
+
daysUntilReverificationRequired: number;
|
|
118
|
+
reverificationRequiredOn: string;
|
|
119
|
+
reverificationProgressPercent: number;
|
|
120
|
+
isReverificationOverdue: boolean;
|
|
121
|
+
} | null;
|
|
122
|
+
};
|
|
123
|
+
}>;
|
|
124
|
+
/**
|
|
125
|
+
* Build an unsigned UBISchemeV2 `claim()` transaction for daily G$ UBI.
|
|
126
|
+
* Validates whitelist, entitlement, and simulates gas before returning steps.
|
|
127
|
+
*/
|
|
128
|
+
prepareClaimUbi(from: `0x${string}`): Promise<SerializedPreparedFlow>;
|
|
129
|
+
private resolveReservePair;
|
|
130
|
+
private reserveOptions;
|
|
131
|
+
private baseReserveQuoteFields;
|
|
132
|
+
private resolveReserveAmount;
|
|
133
|
+
/**
|
|
134
|
+
* Expected GoodDollar reserve output for G$ ↔ USDm — no wallet required.
|
|
135
|
+
* Balance checks run on prepare/estimate only.
|
|
136
|
+
*/
|
|
137
|
+
getReserveQuote(tokenIn: string, tokenOut: string, amount: string, options?: GoodDollarReserveQuoteOptions): Promise<{
|
|
138
|
+
protocol: "gooddollar_reserve";
|
|
139
|
+
network: "mainnet";
|
|
140
|
+
tokenIn: string;
|
|
141
|
+
tokenOut: string;
|
|
142
|
+
amountIn: string;
|
|
143
|
+
expectedOut: string;
|
|
144
|
+
amountSide: GoodDollarReserveAmountSide;
|
|
145
|
+
routeHops: number;
|
|
146
|
+
broker: "0x88de45906D4F5a57315c133620cfa484cB297541";
|
|
147
|
+
exchangeProvider: "0x2fFBB49055d487DdBBb0C052Cd7c2a02A7971e41";
|
|
148
|
+
exchangeId: "0xba77f5c7bb3317643c6d81d1ef3f9913561741d92095f88efa402faf2cbe9124";
|
|
149
|
+
}>;
|
|
150
|
+
private buildReserveSwap;
|
|
151
|
+
private buildReserveApprovalData;
|
|
152
|
+
private estimateReserveSwapGas;
|
|
153
|
+
/**
|
|
154
|
+
* Simulate gas for a GoodDollar reserve swap from `from`, including approval if needed.
|
|
155
|
+
*/
|
|
156
|
+
estimateReserveSwap(from: `0x${string}`, tokenIn: string, tokenOut: string, amount: string, params?: GoodDollarReserveSwapParams): Promise<{
|
|
157
|
+
from: `0x${string}`;
|
|
158
|
+
recipient: `0x${string}`;
|
|
159
|
+
amountOutMin: string;
|
|
160
|
+
approvalNeeded: boolean;
|
|
161
|
+
approvalGas: string | undefined;
|
|
162
|
+
swapGas: string;
|
|
163
|
+
totalGas: string;
|
|
164
|
+
slippageTolerance: number;
|
|
165
|
+
protocol: "gooddollar_reserve";
|
|
166
|
+
network: "mainnet";
|
|
167
|
+
tokenIn: string;
|
|
168
|
+
tokenOut: string;
|
|
169
|
+
amountIn: string;
|
|
170
|
+
expectedOut: string;
|
|
171
|
+
amountSide: GoodDollarReserveAmountSide;
|
|
172
|
+
routeHops: number;
|
|
173
|
+
broker: "0x88de45906D4F5a57315c133620cfa484cB297541";
|
|
174
|
+
exchangeProvider: "0x2fFBB49055d487DdBBb0C052Cd7c2a02A7971e41";
|
|
175
|
+
exchangeId: "0xba77f5c7bb3317643c6d81d1ef3f9913561741d92095f88efa402faf2cbe9124";
|
|
176
|
+
}>;
|
|
177
|
+
/**
|
|
178
|
+
* Build unsigned GoodDollar reserve swap steps (approve + swapIn when needed).
|
|
179
|
+
*/
|
|
180
|
+
prepareReserveSwap(from: `0x${string}`, tokenIn: string, tokenOut: string, amount: string, params?: GoodDollarReserveSwapParams): Promise<SerializedPreparedFlow>;
|
|
181
|
+
private effectiveAuthCount;
|
|
182
|
+
private fetchReverifyDaysOptions;
|
|
183
|
+
private buildReverificationProgress;
|
|
184
|
+
}
|