agentwallet-sdk 5.1.1 → 6.0.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/LICENSE +21 -0
- package/README.md +463 -24
- package/dist/bridge/__tests__/solana.test.d.ts +2 -0
- package/dist/bridge/__tests__/solana.test.d.ts.map +1 -0
- package/dist/bridge/__tests__/solana.test.js +106 -0
- package/dist/bridge/__tests__/solana.test.js.map +1 -0
- package/dist/bridge/client.d.ts +21 -7
- package/dist/bridge/client.d.ts.map +1 -1
- package/dist/bridge/client.js +16 -1
- package/dist/bridge/client.js.map +1 -1
- package/dist/bridge/index.d.ts +12 -1
- package/dist/bridge/index.d.ts.map +1 -1
- package/dist/bridge/index.js +11 -0
- package/dist/bridge/index.js.map +1 -1
- package/dist/bridge/solana.d.ts +132 -0
- package/dist/bridge/solana.d.ts.map +1 -0
- package/dist/bridge/solana.js +313 -0
- package/dist/bridge/solana.js.map +1 -0
- package/dist/bridge/types.d.ts +35 -10
- package/dist/bridge/types.d.ts.map +1 -1
- package/dist/bridge/types.js +16 -4
- package/dist/bridge/types.js.map +1 -1
- package/dist/escrow/MutualStakeEscrow.d.ts.map +1 -1
- package/dist/escrow/MutualStakeEscrow.js +3 -5
- package/dist/escrow/MutualStakeEscrow.js.map +1 -1
- package/dist/index.d.ts +192 -469
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -8
- package/dist/index.js.map +1 -1
- package/dist/policy/SpendingPolicy.test.js.map +1 -1
- package/dist/swap/SwapModule.d.ts +17 -3
- package/dist/swap/SwapModule.d.ts.map +1 -1
- package/dist/swap/SwapModule.js +21 -5
- package/dist/swap/SwapModule.js.map +1 -1
- package/dist/swap/index.d.ts +9 -2
- package/dist/swap/index.d.ts.map +1 -1
- package/dist/swap/index.js +8 -1
- package/dist/swap/index.js.map +1 -1
- package/dist/swap/types.d.ts +58 -1
- package/dist/swap/types.d.ts.map +1 -1
- package/dist/swap/types.js +56 -1
- package/dist/swap/types.js.map +1 -1
- package/dist/tokens/__tests__/decimals.test.d.ts +2 -0
- package/dist/tokens/__tests__/decimals.test.d.ts.map +1 -0
- package/dist/tokens/__tests__/decimals.test.js +107 -0
- package/dist/tokens/__tests__/decimals.test.js.map +1 -0
- package/dist/tokens/__tests__/registry.test.d.ts +2 -0
- package/dist/tokens/__tests__/registry.test.d.ts.map +1 -0
- package/dist/tokens/__tests__/registry.test.js +191 -0
- package/dist/tokens/__tests__/registry.test.js.map +1 -0
- package/dist/tokens/__tests__/transfers.test.d.ts +2 -0
- package/dist/tokens/__tests__/transfers.test.d.ts.map +1 -0
- package/dist/tokens/__tests__/transfers.test.js +103 -0
- package/dist/tokens/__tests__/transfers.test.js.map +1 -0
- package/dist/tokens/decimals.d.ts +65 -0
- package/dist/tokens/decimals.d.ts.map +1 -0
- package/dist/tokens/decimals.js +112 -0
- package/dist/tokens/decimals.js.map +1 -0
- package/dist/tokens/index.d.ts +14 -0
- package/dist/tokens/index.d.ts.map +1 -0
- package/dist/tokens/index.js +14 -0
- package/dist/tokens/index.js.map +1 -0
- package/dist/tokens/registry.d.ts +82 -0
- package/dist/tokens/registry.d.ts.map +1 -0
- package/dist/tokens/registry.js +293 -0
- package/dist/tokens/registry.js.map +1 -0
- package/dist/tokens/solana.d.ts +108 -0
- package/dist/tokens/solana.d.ts.map +1 -0
- package/dist/tokens/solana.js +306 -0
- package/dist/tokens/solana.js.map +1 -0
- package/dist/tokens/transfers.d.ts +95 -0
- package/dist/tokens/transfers.d.ts.map +1 -0
- package/dist/tokens/transfers.js +196 -0
- package/dist/tokens/transfers.js.map +1 -0
- package/dist/types.d.ts +20 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -1
- package/dist/x402/__tests__/client.test.js +77 -5
- package/dist/x402/__tests__/client.test.js.map +1 -1
- package/dist/x402/chains/abstract/index.d.ts.map +1 -1
- package/dist/x402/chains/abstract/index.js.map +1 -1
- package/dist/x402/chains/stellar/index.d.ts +149 -0
- package/dist/x402/chains/stellar/index.d.ts.map +1 -0
- package/dist/x402/chains/stellar/index.js +199 -0
- package/dist/x402/chains/stellar/index.js.map +1 -0
- package/dist/x402/client.d.ts +7 -1
- package/dist/x402/client.d.ts.map +1 -1
- package/dist/x402/client.js +24 -13
- package/dist/x402/client.js.map +1 -1
- package/dist/x402/index.d.ts +1 -0
- package/dist/x402/index.d.ts.map +1 -1
- package/dist/x402/index.js +2 -0
- package/dist/x402/index.js.map +1 -1
- package/dist/x402/middleware.d.ts.map +1 -1
- package/dist/x402/middleware.js +0 -3
- package/dist/x402/middleware.js.map +1 -1
- package/dist/x402/multi-asset.d.ts +54 -0
- package/dist/x402/multi-asset.d.ts.map +1 -0
- package/dist/x402/multi-asset.js +123 -0
- package/dist/x402/multi-asset.js.map +1 -0
- package/dist/x402/types.d.ts +22 -3
- package/dist/x402/types.d.ts.map +1 -1
- package/dist/x402/types.js +34 -4
- package/dist/x402/types.js.map +1 -1
- package/package.json +21 -6
- package/dist/ap2/index.d.ts +0 -185
- package/dist/ap2/index.d.ts.map +0 -1
- package/dist/ap2/index.js +0 -255
- package/dist/ap2/index.js.map +0 -1
- package/dist/bridge/unified.d.ts +0 -101
- package/dist/bridge/unified.d.ts.map +0 -1
- package/dist/bridge/unified.js +0 -284
- package/dist/bridge/unified.js.map +0 -1
- package/dist/chains.d.ts +0 -62
- package/dist/chains.d.ts.map +0 -1
- package/dist/chains.js +0 -108
- package/dist/chains.js.map +0 -1
- package/dist/fiat/index.d.ts +0 -10
- package/dist/fiat/index.d.ts.map +0 -1
- package/dist/fiat/index.js +0 -9
- package/dist/fiat/index.js.map +0 -1
- package/dist/fiat/onramp.d.ts +0 -101
- package/dist/fiat/onramp.d.ts.map +0 -1
- package/dist/fiat/onramp.js +0 -155
- package/dist/fiat/onramp.js.map +0 -1
- package/dist/fiat/providers/index.d.ts +0 -16
- package/dist/fiat/providers/index.d.ts.map +0 -1
- package/dist/fiat/providers/index.js +0 -30
- package/dist/fiat/providers/index.js.map +0 -1
- package/dist/fiat/providers/moonpay.d.ts +0 -22
- package/dist/fiat/providers/moonpay.d.ts.map +0 -1
- package/dist/fiat/providers/moonpay.js +0 -107
- package/dist/fiat/providers/moonpay.js.map +0 -1
- package/dist/fiat/providers/stripe.d.ts +0 -26
- package/dist/fiat/providers/stripe.d.ts.map +0 -1
- package/dist/fiat/providers/stripe.js +0 -135
- package/dist/fiat/providers/stripe.js.map +0 -1
- package/dist/fiat/providers/transak.d.ts +0 -26
- package/dist/fiat/providers/transak.d.ts.map +0 -1
- package/dist/fiat/providers/transak.js +0 -119
- package/dist/fiat/providers/transak.js.map +0 -1
- package/dist/fiat/types.d.ts +0 -106
- package/dist/fiat/types.d.ts.map +0 -1
- package/dist/fiat/types.js +0 -13
- package/dist/fiat/types.js.map +0 -1
- package/dist/flash/executor.d.ts +0 -119
- package/dist/flash/executor.d.ts.map +0 -1
- package/dist/flash/executor.js +0 -195
- package/dist/flash/executor.js.map +0 -1
- package/dist/flash/index.d.ts +0 -28
- package/dist/flash/index.d.ts.map +0 -1
- package/dist/flash/index.js +0 -29
- package/dist/flash/index.js.map +0 -1
- package/dist/flash/scanner.d.ts +0 -133
- package/dist/flash/scanner.d.ts.map +0 -1
- package/dist/flash/scanner.js +0 -212
- package/dist/flash/scanner.js.map +0 -1
- package/dist/flash/types.d.ts +0 -136
- package/dist/flash/types.d.ts.map +0 -1
- package/dist/flash/types.js +0 -23
- package/dist/flash/types.js.map +0 -1
- package/dist/gas/index.d.ts +0 -4
- package/dist/gas/index.d.ts.map +0 -1
- package/dist/gas/index.js +0 -3
- package/dist/gas/index.js.map +0 -1
- package/dist/gas/sponsor.d.ts +0 -70
- package/dist/gas/sponsor.d.ts.map +0 -1
- package/dist/gas/sponsor.js +0 -193
- package/dist/gas/sponsor.js.map +0 -1
- package/dist/gas/types.d.ts +0 -76
- package/dist/gas/types.d.ts.map +0 -1
- package/dist/gas/types.js +0 -21
- package/dist/gas/types.js.map +0 -1
- package/dist/identity/agent-identity.d.ts +0 -276
- package/dist/identity/agent-identity.d.ts.map +0 -1
- package/dist/identity/agent-identity.js +0 -300
- package/dist/identity/agent-identity.js.map +0 -1
- package/dist/identity/email-resolver.d.ts +0 -235
- package/dist/identity/email-resolver.js +0 -283
- package/dist/identity/erc6551.d.ts +0 -441
- package/dist/identity/erc6551.d.ts.map +0 -1
- package/dist/identity/erc6551.js +0 -517
- package/dist/identity/erc6551.js.map +0 -1
- package/dist/mev/index.d.ts +0 -4
- package/dist/mev/index.d.ts.map +0 -1
- package/dist/mev/index.js +0 -8
- package/dist/mev/index.js.map +0 -1
- package/dist/mev/protection.d.ts +0 -54
- package/dist/mev/protection.d.ts.map +0 -1
- package/dist/mev/protection.js +0 -185
- package/dist/mev/protection.js.map +0 -1
- package/dist/mev/risk.d.ts +0 -19
- package/dist/mev/risk.d.ts.map +0 -1
- package/dist/mev/risk.js +0 -95
- package/dist/mev/risk.js.map +0 -1
- package/dist/mev/types.d.ts +0 -49
- package/dist/mev/types.d.ts.map +0 -1
- package/dist/mev/types.js +0 -2
- package/dist/mev/types.js.map +0 -1
- package/dist/plugins/elizaos.d.ts +0 -52
- package/dist/plugins/elizaos.d.ts.map +0 -1
- package/dist/plugins/elizaos.js +0 -89
- package/dist/plugins/elizaos.js.map +0 -1
- package/dist/settlement/index.d.ts +0 -4
- package/dist/settlement/index.d.ts.map +0 -1
- package/dist/settlement/index.js +0 -3
- package/dist/settlement/index.js.map +0 -1
- package/dist/settlement/types.d.ts +0 -66
- package/dist/settlement/types.d.ts.map +0 -1
- package/dist/settlement/types.js +0 -37
- package/dist/settlement/types.js.map +0 -1
- package/dist/settlement/verifier.d.ts +0 -75
- package/dist/settlement/verifier.d.ts.map +0 -1
- package/dist/settlement/verifier.js +0 -354
- package/dist/settlement/verifier.js.map +0 -1
- package/dist/solana/bridge.d.ts +0 -144
- package/dist/solana/bridge.d.ts.map +0 -1
- package/dist/solana/bridge.js +0 -352
- package/dist/solana/bridge.js.map +0 -1
- package/dist/solana/index.d.ts +0 -8
- package/dist/solana/index.d.ts.map +0 -1
- package/dist/solana/index.js +0 -6
- package/dist/solana/index.js.map +0 -1
- package/dist/solana/swap.d.ts +0 -85
- package/dist/solana/swap.d.ts.map +0 -1
- package/dist/solana/swap.js +0 -173
- package/dist/solana/swap.js.map +0 -1
- package/dist/solana/types.d.ts +0 -126
- package/dist/solana/types.d.ts.map +0 -1
- package/dist/solana/types.js +0 -10
- package/dist/solana/types.js.map +0 -1
- package/dist/solana/wallet.d.ts +0 -83
- package/dist/solana/wallet.d.ts.map +0 -1
- package/dist/solana/wallet.js +0 -164
- package/dist/solana/wallet.js.map +0 -1
- package/dist/solana/x402.d.ts +0 -69
- package/dist/solana/x402.d.ts.map +0 -1
- package/dist/solana/x402.js +0 -154
- package/dist/solana/x402.js.map +0 -1
- package/dist/solver/adapter.d.ts +0 -47
- package/dist/solver/adapter.d.ts.map +0 -1
- package/dist/solver/adapter.js +0 -146
- package/dist/solver/adapter.js.map +0 -1
- package/dist/solver/analyzer.d.ts +0 -48
- package/dist/solver/analyzer.d.ts.map +0 -1
- package/dist/solver/analyzer.js +0 -171
- package/dist/solver/analyzer.js.map +0 -1
- package/dist/solver/builder.d.ts +0 -31
- package/dist/solver/builder.d.ts.map +0 -1
- package/dist/solver/builder.js +0 -60
- package/dist/solver/builder.js.map +0 -1
- package/dist/solver/index.d.ts +0 -22
- package/dist/solver/index.d.ts.map +0 -1
- package/dist/solver/index.js +0 -25
- package/dist/solver/index.js.map +0 -1
- package/dist/solver/types.d.ts +0 -115
- package/dist/solver/types.d.ts.map +0 -1
- package/dist/solver/types.js +0 -10
- package/dist/solver/types.js.map +0 -1
- package/dist/spend-guard/index.d.ts +0 -125
- package/dist/spend-guard/index.d.ts.map +0 -1
- package/dist/spend-guard/index.js +0 -150
- package/dist/spend-guard/index.js.map +0 -1
- package/dist/swap/router/cache.d.ts +0 -13
- package/dist/swap/router/cache.d.ts.map +0 -1
- package/dist/swap/router/cache.js +0 -30
- package/dist/swap/router/cache.js.map +0 -1
- package/dist/swap/router/flashbots.d.ts +0 -10
- package/dist/swap/router/flashbots.d.ts.map +0 -1
- package/dist/swap/router/flashbots.js +0 -43
- package/dist/swap/router/flashbots.js.map +0 -1
- package/dist/swap/router/health.d.ts +0 -17
- package/dist/swap/router/health.d.ts.map +0 -1
- package/dist/swap/router/health.js +0 -38
- package/dist/swap/router/health.js.map +0 -1
- package/dist/swap/router/index.d.ts +0 -10
- package/dist/swap/router/index.d.ts.map +0 -1
- package/dist/swap/router/index.js +0 -10
- package/dist/swap/router/index.js.map +0 -1
- package/dist/swap/router/providers/cowswap.d.ts +0 -11
- package/dist/swap/router/providers/cowswap.d.ts.map +0 -1
- package/dist/swap/router/providers/cowswap.js +0 -79
- package/dist/swap/router/providers/cowswap.js.map +0 -1
- package/dist/swap/router/providers/index.d.ts +0 -20
- package/dist/swap/router/providers/index.d.ts.map +0 -1
- package/dist/swap/router/providers/index.js +0 -32
- package/dist/swap/router/providers/index.js.map +0 -1
- package/dist/swap/router/providers/jupiter.d.ts +0 -12
- package/dist/swap/router/providers/jupiter.d.ts.map +0 -1
- package/dist/swap/router/providers/jupiter.js +0 -73
- package/dist/swap/router/providers/jupiter.js.map +0 -1
- package/dist/swap/router/providers/lifi.d.ts +0 -11
- package/dist/swap/router/providers/lifi.d.ts.map +0 -1
- package/dist/swap/router/providers/lifi.js +0 -123
- package/dist/swap/router/providers/lifi.js.map +0 -1
- package/dist/swap/router/providers/oneinch.d.ts +0 -13
- package/dist/swap/router/providers/oneinch.d.ts.map +0 -1
- package/dist/swap/router/providers/oneinch.js +0 -71
- package/dist/swap/router/providers/oneinch.js.map +0 -1
- package/dist/swap/router/providers/paraswap.d.ts +0 -11
- package/dist/swap/router/providers/paraswap.d.ts.map +0 -1
- package/dist/swap/router/providers/paraswap.js +0 -73
- package/dist/swap/router/providers/paraswap.js.map +0 -1
- package/dist/swap/router/providers/uniswap.d.ts +0 -31
- package/dist/swap/router/providers/uniswap.d.ts.map +0 -1
- package/dist/swap/router/providers/uniswap.js +0 -237
- package/dist/swap/router/providers/uniswap.js.map +0 -1
- package/dist/swap/router/providers/zerox.d.ts +0 -13
- package/dist/swap/router/providers/zerox.d.ts.map +0 -1
- package/dist/swap/router/providers/zerox.js +0 -94
- package/dist/swap/router/providers/zerox.js.map +0 -1
- package/dist/swap/router/router.d.ts +0 -86
- package/dist/swap/router/router.d.ts.map +0 -1
- package/dist/swap/router/router.js +0 -224
- package/dist/swap/router/router.js.map +0 -1
- package/dist/swap/router/rsi/engine.d.ts +0 -60
- package/dist/swap/router/rsi/engine.d.ts.map +0 -1
- package/dist/swap/router/rsi/engine.js +0 -483
- package/dist/swap/router/rsi/engine.js.map +0 -1
- package/dist/swap/router/rsi/index.d.ts +0 -3
- package/dist/swap/router/rsi/index.d.ts.map +0 -1
- package/dist/swap/router/rsi/index.js +0 -3
- package/dist/swap/router/rsi/index.js.map +0 -1
- package/dist/swap/router/rsi/types.d.ts +0 -106
- package/dist/swap/router/rsi/types.d.ts.map +0 -1
- package/dist/swap/router/rsi/types.js +0 -3
- package/dist/swap/router/rsi/types.js.map +0 -1
- package/dist/swap/router/types.d.ts +0 -120
- package/dist/swap/router/types.d.ts.map +0 -1
- package/dist/swap/router/types.js +0 -16
- package/dist/swap/router/types.js.map +0 -1
- package/dist/tax/engine.d.ts +0 -131
- package/dist/tax/engine.d.ts.map +0 -1
- package/dist/tax/engine.js +0 -307
- package/dist/tax/engine.js.map +0 -1
- package/dist/tax/index.d.ts +0 -9
- package/dist/tax/index.d.ts.map +0 -1
- package/dist/tax/index.js +0 -12
- package/dist/tax/index.js.map +0 -1
- package/dist/tax/lots.d.ts +0 -60
- package/dist/tax/lots.d.ts.map +0 -1
- package/dist/tax/lots.js +0 -129
- package/dist/tax/lots.js.map +0 -1
- package/dist/tax/types.d.ts +0 -113
- package/dist/tax/types.d.ts.map +0 -1
- package/dist/tax/types.js +0 -18
- package/dist/tax/types.js.map +0 -1
- package/dist/verifiable-intent/index.d.ts +0 -84
- package/dist/verifiable-intent/index.js +0 -385
- package/dist/yield/index.d.ts +0 -26
- package/dist/yield/index.d.ts.map +0 -1
- package/dist/yield/index.js +0 -29
- package/dist/yield/index.js.map +0 -1
- package/dist/yield/rates.d.ts +0 -114
- package/dist/yield/rates.d.ts.map +0 -1
- package/dist/yield/rates.js +0 -351
- package/dist/yield/rates.js.map +0 -1
- package/dist/yield/types.d.ts +0 -134
- package/dist/yield/types.d.ts.map +0 -1
- package/dist/yield/types.js +0 -24
- package/dist/yield/types.js.map +0 -1
- package/dist/yield/vault.d.ts +0 -112
- package/dist/yield/vault.d.ts.map +0 -1
- package/dist/yield/vault.js +0 -264
- package/dist/yield/vault.js.map +0 -1
package/dist/swap/types.d.ts
CHANGED
|
@@ -1,6 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module swap/types
|
|
3
|
+
* Type definitions and constants for the multi-chain Uniswap V3 SwapModule.
|
|
4
|
+
*
|
|
5
|
+
* Supported swap chains: Base, Arbitrum, Optimism, Polygon.
|
|
6
|
+
* All router/quoter addresses verified against official Uniswap V3 deployment docs:
|
|
7
|
+
* - Base: https://docs.uniswap.org/contracts/v3/reference/deployments/base-deployments
|
|
8
|
+
* - Arbitrum: https://docs.uniswap.org/contracts/v3/reference/deployments/arbitrum-deployments
|
|
9
|
+
* - Optimism: https://docs.uniswap.org/contracts/v3/reference/deployments/optimism-deployments
|
|
10
|
+
* - Polygon: https://docs.uniswap.org/contracts/v3/reference/deployments/polygon-deployments
|
|
11
|
+
*
|
|
12
|
+
* Note: Base uses a unique SwapRouter02 address; Arbitrum, Optimism, and Polygon
|
|
13
|
+
* share the same universal SwapRouter02 deployment address.
|
|
14
|
+
*/
|
|
1
15
|
import type { Address, Hash } from 'viem';
|
|
2
16
|
/** Uniswap V3 fee tier options */
|
|
3
17
|
export type UniswapFeeTier = 100 | 500 | 3000 | 10000;
|
|
18
|
+
/** Chains supported for Uniswap V3 swap */
|
|
19
|
+
export type SwapChain = 'base' | 'arbitrum' | 'optimism' | 'polygon';
|
|
4
20
|
export interface SwapQuote {
|
|
5
21
|
tokenIn: Address;
|
|
6
22
|
tokenOut: Address;
|
|
@@ -31,6 +47,8 @@ export interface SwapModuleConfig {
|
|
|
31
47
|
quoterAddress: Address;
|
|
32
48
|
feeBps: number;
|
|
33
49
|
feeWallet: Address;
|
|
50
|
+
/** Chain this SwapModule is configured for */
|
|
51
|
+
chain: SwapChain;
|
|
34
52
|
}
|
|
35
53
|
/** Well-known Base Mainnet token addresses */
|
|
36
54
|
export declare const BASE_TOKENS: {
|
|
@@ -39,7 +57,46 @@ export declare const BASE_TOKENS: {
|
|
|
39
57
|
cbETH: "0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22";
|
|
40
58
|
WNATIVE: "0x4200000000000000000000000000000000000006";
|
|
41
59
|
};
|
|
42
|
-
/**
|
|
60
|
+
/** Well-known Arbitrum token addresses */
|
|
61
|
+
export declare const ARBITRUM_TOKENS: {
|
|
62
|
+
USDC: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831";
|
|
63
|
+
WETH: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1";
|
|
64
|
+
WNATIVE: "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1";
|
|
65
|
+
};
|
|
66
|
+
/** Well-known Optimism token addresses */
|
|
67
|
+
export declare const OPTIMISM_TOKENS: {
|
|
68
|
+
USDC: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85";
|
|
69
|
+
WETH: "0x4200000000000000000000000000000000000006";
|
|
70
|
+
OP: "0x4200000000000000000000000000000000000042";
|
|
71
|
+
WNATIVE: "0x4200000000000000000000000000000000000006";
|
|
72
|
+
};
|
|
73
|
+
/** Well-known Polygon token addresses */
|
|
74
|
+
export declare const POLYGON_TOKENS: {
|
|
75
|
+
USDC: "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359";
|
|
76
|
+
WETH: "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619";
|
|
77
|
+
WMATIC: "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270";
|
|
78
|
+
WNATIVE: "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270";
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Uniswap V3 router and quoter addresses.
|
|
82
|
+
*
|
|
83
|
+
* Base has a different router (SwapRouter02 deployed at a unique address due to BASE chain launch).
|
|
84
|
+
* Arbitrum, Optimism, and Polygon use the same universal SwapRouter02 address.
|
|
85
|
+
*
|
|
86
|
+
* Sources:
|
|
87
|
+
* - Base: https://docs.uniswap.org/contracts/v3/reference/deployments/base-deployments
|
|
88
|
+
* - Arbitrum: https://docs.uniswap.org/contracts/v3/reference/deployments/arbitrum-deployments
|
|
89
|
+
* - Optimism: https://docs.uniswap.org/contracts/v3/reference/deployments/optimism-deployments
|
|
90
|
+
* - Polygon: https://docs.uniswap.org/contracts/v3/reference/deployments/polygon-deployments
|
|
91
|
+
*/
|
|
92
|
+
export declare const UNISWAP_V3_ADDRESSES: Record<SwapChain, {
|
|
93
|
+
ROUTER: Address;
|
|
94
|
+
QUOTER_V2: Address;
|
|
95
|
+
}>;
|
|
96
|
+
/**
|
|
97
|
+
* @deprecated Use UNISWAP_V3_ADDRESSES.base instead.
|
|
98
|
+
* Kept for backwards compatibility.
|
|
99
|
+
*/
|
|
43
100
|
export declare const UNISWAP_V3_BASE: {
|
|
44
101
|
ROUTER: "0x2626664c2603336E57B271c5C0b26F421741e481";
|
|
45
102
|
QUOTER_V2: "0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a";
|
package/dist/swap/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/swap/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE1C,kCAAkC;AAClC,MAAM,MAAM,cAAc,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,CAAC;AAEtD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,cAAc,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,IAAI,CAAC;IACb,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/swap/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE1C,kCAAkC;AAClC,MAAM,MAAM,cAAc,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,CAAC;AAEtD,2CAA2C;AAC3C,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;AAErE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,cAAc,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,IAAI,CAAC;IACb,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,KAAK,EAAE,SAAS,CAAC;CAClB;AAID,8CAA8C;AAC9C,eAAO,MAAM,WAAW;;;;;CAKvB,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,eAAe;;;;CAI3B,CAAC;AAEF,0CAA0C;AAC1C,eAAO,MAAM,eAAe;;;;;CAK3B,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,cAAc;;;;;CAK1B,CAAC;AAIF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,SAAS,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAiB3F,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe;;;CAG3B,CAAC;AAEF,mCAAmC;AACnC,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,qCAAqC;AACrC,eAAO,MAAM,oBAAoB,KAAK,CAAC"}
|
package/dist/swap/types.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
// ─── Token Addresses ───
|
|
1
2
|
/** Well-known Base Mainnet token addresses */
|
|
2
3
|
export const BASE_TOKENS = {
|
|
3
4
|
USDC: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',
|
|
@@ -5,7 +6,61 @@ export const BASE_TOKENS = {
|
|
|
5
6
|
cbETH: '0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22',
|
|
6
7
|
WNATIVE: '0x4200000000000000000000000000000000000006',
|
|
7
8
|
};
|
|
8
|
-
/**
|
|
9
|
+
/** Well-known Arbitrum token addresses */
|
|
10
|
+
export const ARBITRUM_TOKENS = {
|
|
11
|
+
USDC: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',
|
|
12
|
+
WETH: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',
|
|
13
|
+
WNATIVE: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',
|
|
14
|
+
};
|
|
15
|
+
/** Well-known Optimism token addresses */
|
|
16
|
+
export const OPTIMISM_TOKENS = {
|
|
17
|
+
USDC: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',
|
|
18
|
+
WETH: '0x4200000000000000000000000000000000000006',
|
|
19
|
+
OP: '0x4200000000000000000000000000000000000042',
|
|
20
|
+
WNATIVE: '0x4200000000000000000000000000000000000006',
|
|
21
|
+
};
|
|
22
|
+
/** Well-known Polygon token addresses */
|
|
23
|
+
export const POLYGON_TOKENS = {
|
|
24
|
+
USDC: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',
|
|
25
|
+
WETH: '0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619',
|
|
26
|
+
WMATIC: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270',
|
|
27
|
+
WNATIVE: '0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270',
|
|
28
|
+
};
|
|
29
|
+
// ─── Uniswap V3 Contract Addresses ───
|
|
30
|
+
/**
|
|
31
|
+
* Uniswap V3 router and quoter addresses.
|
|
32
|
+
*
|
|
33
|
+
* Base has a different router (SwapRouter02 deployed at a unique address due to BASE chain launch).
|
|
34
|
+
* Arbitrum, Optimism, and Polygon use the same universal SwapRouter02 address.
|
|
35
|
+
*
|
|
36
|
+
* Sources:
|
|
37
|
+
* - Base: https://docs.uniswap.org/contracts/v3/reference/deployments/base-deployments
|
|
38
|
+
* - Arbitrum: https://docs.uniswap.org/contracts/v3/reference/deployments/arbitrum-deployments
|
|
39
|
+
* - Optimism: https://docs.uniswap.org/contracts/v3/reference/deployments/optimism-deployments
|
|
40
|
+
* - Polygon: https://docs.uniswap.org/contracts/v3/reference/deployments/polygon-deployments
|
|
41
|
+
*/
|
|
42
|
+
export const UNISWAP_V3_ADDRESSES = {
|
|
43
|
+
base: {
|
|
44
|
+
ROUTER: '0x2626664c2603336E57B271c5C0b26F421741e481',
|
|
45
|
+
QUOTER_V2: '0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a',
|
|
46
|
+
},
|
|
47
|
+
arbitrum: {
|
|
48
|
+
ROUTER: '0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45',
|
|
49
|
+
QUOTER_V2: '0x61fFE014bA17989E743c5F6cB21bF9697530B21e',
|
|
50
|
+
},
|
|
51
|
+
optimism: {
|
|
52
|
+
ROUTER: '0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45',
|
|
53
|
+
QUOTER_V2: '0x61fFE014bA17989E743c5F6cB21bF9697530B21e',
|
|
54
|
+
},
|
|
55
|
+
polygon: {
|
|
56
|
+
ROUTER: '0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45',
|
|
57
|
+
QUOTER_V2: '0x61fFE014bA17989E743c5F6cB21bF9697530B21e',
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* @deprecated Use UNISWAP_V3_ADDRESSES.base instead.
|
|
62
|
+
* Kept for backwards compatibility.
|
|
63
|
+
*/
|
|
9
64
|
export const UNISWAP_V3_BASE = {
|
|
10
65
|
ROUTER: '0x2626664c2603336E57B271c5C0b26F421741e481',
|
|
11
66
|
QUOTER_V2: '0x3d4e44Eb1374240CE5F1B871ab261CD16335B76a',
|
package/dist/swap/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/swap/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/swap/types.ts"],"names":[],"mappings":"AA2DA,0BAA0B;AAE1B,8CAA8C;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAK,4CAAqD;IAC9D,IAAI,EAAK,4CAAqD;IAC9D,KAAK,EAAI,4CAAqD;IAC9D,OAAO,EAAE,4CAAqD;CAC/D,CAAC;AAEF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAK,4CAAqD;IAC9D,IAAI,EAAK,4CAAqD;IAC9D,OAAO,EAAE,4CAAqD;CAC/D,CAAC;AAEF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,IAAI,EAAK,4CAAqD;IAC9D,IAAI,EAAK,4CAAqD;IAC9D,EAAE,EAAO,4CAAqD;IAC9D,OAAO,EAAE,4CAAqD;CAC/D,CAAC;AAEF,yCAAyC;AACzC,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAK,4CAAqD;IAC9D,IAAI,EAAK,4CAAqD;IAC9D,MAAM,EAAG,4CAAqD;IAC9D,OAAO,EAAE,4CAAqD;CAC/D,CAAC;AAEF,wCAAwC;AAExC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA+D;IAC9F,IAAI,EAAE;QACJ,MAAM,EAAK,4CAA4C;QACvD,SAAS,EAAE,4CAA4C;KACxD;IACD,QAAQ,EAAE;QACR,MAAM,EAAK,4CAA4C;QACvD,SAAS,EAAE,4CAA4C;KACxD;IACD,QAAQ,EAAE;QACR,MAAM,EAAK,4CAA4C;QACvD,SAAS,EAAE,4CAA4C;KACxD;IACD,OAAO,EAAE;QACP,MAAM,EAAK,4CAA4C;QACvD,SAAS,EAAE,4CAA4C;KACxD;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,MAAM,EAAK,4CAAqD;IAChE,SAAS,EAAE,4CAAqD;CACjE,CAAC;AAEF,mCAAmC;AACnC,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AACpC,qCAAqC;AACrC,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decimals.test.d.ts","sourceRoot":"","sources":["../../../src/tokens/__tests__/decimals.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for token decimal normalization utilities.
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect } from 'vitest';
|
|
5
|
+
import { toRaw, toHuman, formatBalance, parseAmount } from '../decimals.js';
|
|
6
|
+
describe('toRaw', () => {
|
|
7
|
+
it('converts "1.5" with 6 decimals to 1500000n (USDC)', () => {
|
|
8
|
+
expect(toRaw('1.5', 6)).toBe(1500000n);
|
|
9
|
+
});
|
|
10
|
+
it('converts "1.0" with 18 decimals to 1000000000000000000n (WETH)', () => {
|
|
11
|
+
expect(toRaw('1.0', 18)).toBe(1000000000000000000n);
|
|
12
|
+
});
|
|
13
|
+
it('converts "0.001" with 8 decimals to 100000n (WBTC)', () => {
|
|
14
|
+
expect(toRaw('0.001', 8)).toBe(100000n);
|
|
15
|
+
});
|
|
16
|
+
it('converts integer "100" with 6 decimals correctly', () => {
|
|
17
|
+
expect(toRaw('100', 6)).toBe(100000000n);
|
|
18
|
+
});
|
|
19
|
+
it('converts "0" to 0n', () => {
|
|
20
|
+
expect(toRaw('0', 6)).toBe(0n);
|
|
21
|
+
});
|
|
22
|
+
it('handles string with more fractional digits than decimals (truncates)', () => {
|
|
23
|
+
// 1.9999999 with 6 decimals should truncate to 1.999999 → 1999999n
|
|
24
|
+
expect(toRaw('1.9999999', 6)).toBe(1999999n);
|
|
25
|
+
});
|
|
26
|
+
it('handles fractional-only strings', () => {
|
|
27
|
+
expect(toRaw('0.5', 6)).toBe(500000n);
|
|
28
|
+
});
|
|
29
|
+
it('handles bigint passthrough', () => {
|
|
30
|
+
expect(toRaw(12345n, 6)).toBe(12345n);
|
|
31
|
+
});
|
|
32
|
+
it('handles zero-padding short fractions', () => {
|
|
33
|
+
// "1.5" with 18 decimals → 1500000000000000000n
|
|
34
|
+
expect(toRaw('1.5', 18)).toBe(1500000000000000000n);
|
|
35
|
+
});
|
|
36
|
+
it('throws on invalid amount string', () => {
|
|
37
|
+
expect(() => toRaw('abc', 6)).toThrow();
|
|
38
|
+
expect(() => toRaw('1.2.3', 6)).toThrow();
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
describe('toHuman', () => {
|
|
42
|
+
it('converts 1500000n with 6 decimals to "1.5"', () => {
|
|
43
|
+
expect(toHuman(1500000n, 6)).toBe('1.5');
|
|
44
|
+
});
|
|
45
|
+
it('converts 1000000000000000000n with 18 decimals to "1.0"', () => {
|
|
46
|
+
expect(toHuman(1000000000000000000n, 18)).toBe('1.0');
|
|
47
|
+
});
|
|
48
|
+
it('converts 0n to "0.0"', () => {
|
|
49
|
+
expect(toHuman(0n, 6)).toBe('0.0');
|
|
50
|
+
expect(toHuman(0n, 18)).toBe('0.0');
|
|
51
|
+
});
|
|
52
|
+
it('converts 100000000n with 6 decimals to "100.0"', () => {
|
|
53
|
+
expect(toHuman(100000000n, 6)).toBe('100.0');
|
|
54
|
+
});
|
|
55
|
+
it('trims trailing zeros but keeps at least one decimal', () => {
|
|
56
|
+
expect(toHuman(1500000n, 6)).toBe('1.5');
|
|
57
|
+
expect(toHuman(1000000n, 6)).toBe('1.0');
|
|
58
|
+
});
|
|
59
|
+
it('handles 0 decimals', () => {
|
|
60
|
+
expect(toHuman(12345n, 0)).toBe('12345');
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
describe('formatBalance', () => {
|
|
64
|
+
it('formats USDC (6 decimals) with 2 decimal places', () => {
|
|
65
|
+
const token = { symbol: 'USDC', decimals: 6, address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' };
|
|
66
|
+
expect(formatBalance(1500000n, token)).toBe('1.50 USDC');
|
|
67
|
+
});
|
|
68
|
+
it('formats WETH (18 decimals) with 4 decimal places', () => {
|
|
69
|
+
const token = { symbol: 'WETH', decimals: 18, address: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2' };
|
|
70
|
+
expect(formatBalance(1000000000000000000n, token)).toBe('1.0000 WETH');
|
|
71
|
+
});
|
|
72
|
+
it('formats 0 balance correctly', () => {
|
|
73
|
+
const token = { symbol: 'USDC', decimals: 6, address: '0x0000000000000000000000000000000000000000' };
|
|
74
|
+
expect(formatBalance(0n, token)).toBe('0.00 USDC');
|
|
75
|
+
});
|
|
76
|
+
it('accepts custom displayDecimals', () => {
|
|
77
|
+
const token = { symbol: 'WETH', decimals: 18, address: '0x0000000000000000000000000000000000000000' };
|
|
78
|
+
expect(formatBalance(1000000000000000000n, token, 2)).toBe('1.00 WETH');
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe('parseAmount', () => {
|
|
82
|
+
it('parses string to raw bigint', () => {
|
|
83
|
+
expect(parseAmount('1.5', 6)).toBe(1500000n);
|
|
84
|
+
});
|
|
85
|
+
it('passes through bigint unchanged', () => {
|
|
86
|
+
expect(parseAmount(1500000n, 6)).toBe(1500000n);
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe('round-trip consistency', () => {
|
|
90
|
+
it('toRaw(toHuman(x)) === x for USDC amounts', () => {
|
|
91
|
+
const cases = [0n, 1n, 1000000n, 1500000n, 100000000n, 999999n];
|
|
92
|
+
for (const raw of cases) {
|
|
93
|
+
const human = toHuman(raw, 6);
|
|
94
|
+
const backToRaw = toRaw(human, 6);
|
|
95
|
+
expect(backToRaw).toBe(raw);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
it('toRaw(toHuman(x)) === x for ETH amounts (selected)', () => {
|
|
99
|
+
const cases = [0n, 1000000000000000000n, 500000000000000000n];
|
|
100
|
+
for (const raw of cases) {
|
|
101
|
+
const human = toHuman(raw, 18);
|
|
102
|
+
const backToRaw = toRaw(human, 18);
|
|
103
|
+
expect(backToRaw).toBe(raw);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
//# sourceMappingURL=decimals.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decimals.test.js","sourceRoot":"","sources":["../../../src/tokens/__tests__/decimals.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["../../../src/tokens/__tests__/registry.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for the TokenRegistry — pre-populated multi-chain token registry.
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect } from 'vitest';
|
|
5
|
+
import { TokenRegistry, getGlobalRegistry, BASE_REGISTRY, ETHEREUM_REGISTRY } from '../registry.js';
|
|
6
|
+
import { zeroAddress } from 'viem';
|
|
7
|
+
// Chain IDs
|
|
8
|
+
const ETH = 1;
|
|
9
|
+
const BASE = 8453;
|
|
10
|
+
const ARB = 42161;
|
|
11
|
+
const OP = 10;
|
|
12
|
+
const POLY = 137;
|
|
13
|
+
const AVAX = 43114;
|
|
14
|
+
const SONIC = 146;
|
|
15
|
+
describe('TokenRegistry — construction', () => {
|
|
16
|
+
it('creates a registry and has tokens pre-populated', () => {
|
|
17
|
+
const r = new TokenRegistry();
|
|
18
|
+
expect(r.size()).toBeGreaterThan(0);
|
|
19
|
+
});
|
|
20
|
+
it('populates tokens for Ethereum mainnet', () => {
|
|
21
|
+
const r = new TokenRegistry();
|
|
22
|
+
const tokens = r.listTokens(ETH);
|
|
23
|
+
expect(tokens.length).toBeGreaterThanOrEqual(10);
|
|
24
|
+
const symbols = tokens.map(t => t.symbol);
|
|
25
|
+
expect(symbols).toContain('USDC');
|
|
26
|
+
expect(symbols).toContain('WETH');
|
|
27
|
+
expect(symbols).toContain('WBTC');
|
|
28
|
+
expect(symbols).toContain('LINK');
|
|
29
|
+
expect(symbols).toContain('UNI');
|
|
30
|
+
expect(symbols).toContain('AAVE');
|
|
31
|
+
expect(symbols).toContain('DAI');
|
|
32
|
+
expect(symbols).toContain('MKR');
|
|
33
|
+
expect(symbols).toContain('ETH'); // native
|
|
34
|
+
});
|
|
35
|
+
it('populates tokens for Base mainnet', () => {
|
|
36
|
+
const r = new TokenRegistry();
|
|
37
|
+
const tokens = r.listTokens(BASE);
|
|
38
|
+
const symbols = tokens.map(t => t.symbol);
|
|
39
|
+
expect(symbols).toContain('USDC');
|
|
40
|
+
expect(symbols).toContain('WETH');
|
|
41
|
+
expect(symbols).toContain('cbETH');
|
|
42
|
+
});
|
|
43
|
+
it('populates ARB on Arbitrum', () => {
|
|
44
|
+
const r = new TokenRegistry();
|
|
45
|
+
const token = r.getToken('ARB', ARB);
|
|
46
|
+
expect(token).toBeDefined();
|
|
47
|
+
expect(token.address.toLowerCase()).toBe('0x912ce59144191c1204e64559fe8253a0e49e6548');
|
|
48
|
+
});
|
|
49
|
+
it('populates OP on Optimism', () => {
|
|
50
|
+
const r = new TokenRegistry();
|
|
51
|
+
const token = r.getToken('OP', OP);
|
|
52
|
+
expect(token).toBeDefined();
|
|
53
|
+
expect(token.address.toLowerCase()).toBe('0x4200000000000000000000000000000000000042');
|
|
54
|
+
});
|
|
55
|
+
it('populates WMATIC on Polygon', () => {
|
|
56
|
+
const r = new TokenRegistry();
|
|
57
|
+
const token = r.getToken('WMATIC', POLY);
|
|
58
|
+
expect(token).toBeDefined();
|
|
59
|
+
expect(token.address.toLowerCase()).toBe('0x0d500b1d8e8ef31e21c99d1db9a6444d3adf1270');
|
|
60
|
+
});
|
|
61
|
+
it('populates WAVAX on Avalanche', () => {
|
|
62
|
+
const r = new TokenRegistry();
|
|
63
|
+
const token = r.getToken('WAVAX', AVAX);
|
|
64
|
+
expect(token).toBeDefined();
|
|
65
|
+
expect(token.address.toLowerCase()).toBe('0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7');
|
|
66
|
+
});
|
|
67
|
+
it('includes native gas tokens with isNative=true and zeroAddress', () => {
|
|
68
|
+
const r = new TokenRegistry();
|
|
69
|
+
const eth = r.getToken('ETH', BASE);
|
|
70
|
+
expect(eth).toBeDefined();
|
|
71
|
+
expect(eth.isNative).toBe(true);
|
|
72
|
+
expect(eth.address).toBe(zeroAddress);
|
|
73
|
+
const pol = r.getToken('POL', POLY);
|
|
74
|
+
expect(pol).toBeDefined();
|
|
75
|
+
expect(pol.isNative).toBe(true);
|
|
76
|
+
const avax = r.getToken('AVAX', AVAX);
|
|
77
|
+
expect(avax).toBeDefined();
|
|
78
|
+
expect(avax.isNative).toBe(true);
|
|
79
|
+
const s = r.getToken('S', SONIC);
|
|
80
|
+
expect(s).toBeDefined();
|
|
81
|
+
expect(s.isNative).toBe(true);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
describe('TokenRegistry — getToken', () => {
|
|
85
|
+
it('returns undefined for unknown symbol', () => {
|
|
86
|
+
const r = new TokenRegistry();
|
|
87
|
+
expect(r.getToken('FAKECOIN', ETH)).toBeUndefined();
|
|
88
|
+
});
|
|
89
|
+
it('is case-insensitive for symbol lookup', () => {
|
|
90
|
+
const r = new TokenRegistry();
|
|
91
|
+
expect(r.getToken('usdc', ETH)).toBeDefined();
|
|
92
|
+
expect(r.getToken('USDC', ETH)).toBeDefined();
|
|
93
|
+
expect(r.getToken('Usdc', ETH)).toBeDefined();
|
|
94
|
+
});
|
|
95
|
+
it('USDC on Ethereum is correct address', () => {
|
|
96
|
+
const r = new TokenRegistry();
|
|
97
|
+
const usdc = r.getToken('USDC', ETH);
|
|
98
|
+
expect(usdc.address.toLowerCase()).toBe('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48');
|
|
99
|
+
expect(usdc.decimals).toBe(6);
|
|
100
|
+
});
|
|
101
|
+
it('USDC on Base is correct address', () => {
|
|
102
|
+
const r = new TokenRegistry();
|
|
103
|
+
const usdc = r.getToken('USDC', BASE);
|
|
104
|
+
expect(usdc.address.toLowerCase()).toBe('0x833589fcd6edb6e08f4c7c32d4f71b54bda02913');
|
|
105
|
+
});
|
|
106
|
+
it('WETH on Ethereum is correct address', () => {
|
|
107
|
+
const r = new TokenRegistry();
|
|
108
|
+
const weth = r.getToken('WETH', ETH);
|
|
109
|
+
expect(weth.address.toLowerCase()).toBe('0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2');
|
|
110
|
+
expect(weth.decimals).toBe(18);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
describe('TokenRegistry — addToken (custom)', () => {
|
|
114
|
+
it('adds a custom token and retrieves it', () => {
|
|
115
|
+
const r = new TokenRegistry();
|
|
116
|
+
r.addToken({
|
|
117
|
+
symbol: 'MYTOKEN',
|
|
118
|
+
address: '0xDeadBeefDeadBeefDeadBeefDeadBeefDeadBeef',
|
|
119
|
+
decimals: 18,
|
|
120
|
+
chainId: BASE,
|
|
121
|
+
name: 'My Custom Token',
|
|
122
|
+
});
|
|
123
|
+
const t = r.getToken('MYTOKEN', BASE);
|
|
124
|
+
expect(t).toBeDefined();
|
|
125
|
+
expect(t.name).toBe('My Custom Token');
|
|
126
|
+
expect(t.decimals).toBe(18);
|
|
127
|
+
});
|
|
128
|
+
it('overwriting a token with addToken replaces it', () => {
|
|
129
|
+
const r = new TokenRegistry();
|
|
130
|
+
r.addToken({
|
|
131
|
+
symbol: 'USDC',
|
|
132
|
+
address: '0x1234567890123456789012345678901234567890',
|
|
133
|
+
decimals: 6,
|
|
134
|
+
chainId: BASE,
|
|
135
|
+
name: 'Test USDC',
|
|
136
|
+
});
|
|
137
|
+
const usdc = r.getToken('USDC', BASE);
|
|
138
|
+
expect(usdc.address.toLowerCase()).toBe('0x1234567890123456789012345678901234567890');
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
describe('TokenRegistry — listTokens', () => {
|
|
142
|
+
it('returns all tokens for a chain', () => {
|
|
143
|
+
const r = new TokenRegistry();
|
|
144
|
+
const tokens = r.listTokens(ARB);
|
|
145
|
+
expect(tokens.length).toBeGreaterThan(0);
|
|
146
|
+
// Every returned token should have chainId === ARB
|
|
147
|
+
for (const t of tokens) {
|
|
148
|
+
expect(t.chainId).toBe(ARB);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
it('returns empty array for unknown chainId', () => {
|
|
152
|
+
const r = new TokenRegistry();
|
|
153
|
+
const tokens = r.listTokens(99999);
|
|
154
|
+
expect(tokens).toEqual([]);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
describe('TokenRegistry — getTokenByAddress', () => {
|
|
158
|
+
it('finds a token by its address', () => {
|
|
159
|
+
const r = new TokenRegistry();
|
|
160
|
+
const usdc = r.getTokenByAddress('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', ETH);
|
|
161
|
+
expect(usdc).toBeDefined();
|
|
162
|
+
expect(usdc.symbol).toBe('USDC');
|
|
163
|
+
});
|
|
164
|
+
it('is case-insensitive for address lookup', () => {
|
|
165
|
+
const r = new TokenRegistry();
|
|
166
|
+
const usdc = r.getTokenByAddress('0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // lower
|
|
167
|
+
ETH);
|
|
168
|
+
expect(usdc).toBeDefined();
|
|
169
|
+
});
|
|
170
|
+
it('returns undefined for unknown address', () => {
|
|
171
|
+
const r = new TokenRegistry();
|
|
172
|
+
const t = r.getTokenByAddress('0xDeadBeefDeadBeefDeadBeefDeadBeefDeadBeef', ETH);
|
|
173
|
+
expect(t).toBeUndefined();
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
describe('Pre-built registry exports', () => {
|
|
177
|
+
it('BASE_REGISTRY has Base tokens', () => {
|
|
178
|
+
const tokens = BASE_REGISTRY.listTokens(BASE);
|
|
179
|
+
expect(tokens.length).toBeGreaterThan(0);
|
|
180
|
+
});
|
|
181
|
+
it('ETHEREUM_REGISTRY has Ethereum tokens', () => {
|
|
182
|
+
const tokens = ETHEREUM_REGISTRY.listTokens(ETH);
|
|
183
|
+
expect(tokens.length).toBeGreaterThan(0);
|
|
184
|
+
});
|
|
185
|
+
it('getGlobalRegistry() returns consistent instance', () => {
|
|
186
|
+
const r1 = getGlobalRegistry();
|
|
187
|
+
const r2 = getGlobalRegistry();
|
|
188
|
+
expect(r1).toBe(r2);
|
|
189
|
+
});
|
|
190
|
+
});
|
|
191
|
+
//# sourceMappingURL=registry.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../../src/tokens/__tests__/registry.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfers.test.d.ts","sourceRoot":"","sources":["../../../src/tokens/__tests__/transfers.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for ERC-20 and native transfer encoding.
|
|
3
|
+
* Uses mocked publicClient/walletClient to avoid real RPC calls.
|
|
4
|
+
*
|
|
5
|
+
* NOTE: viem enforces EIP-55 checksummed addresses. All addresses here
|
|
6
|
+
* are checksummed via `getAddress()` from viem.
|
|
7
|
+
*/
|
|
8
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
9
|
+
import { encodeERC20Transfer } from '../transfers.js';
|
|
10
|
+
import { toRaw } from '../decimals.js';
|
|
11
|
+
// Checksummed test addresses (verified via viem's getAddress)
|
|
12
|
+
// These are real EIP-55 addresses used only in tests
|
|
13
|
+
const TO = '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB'; // BBBB... checksummed
|
|
14
|
+
const ACCOUNT = '0xaAaAaAaaAaAaAaaAaAAAAAAAAaaaAaAaAaaAaaAa'; // AAAA... checksummed
|
|
15
|
+
const USDC_ETH = '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48';
|
|
16
|
+
const FAKE_HASH = ('0x' + 'a'.repeat(64));
|
|
17
|
+
// ─── encodeERC20Transfer tests ────────────────────────────────────────────────
|
|
18
|
+
describe('encodeERC20Transfer', () => {
|
|
19
|
+
it('produces correct 4-byte selector for transfer()', () => {
|
|
20
|
+
const data = encodeERC20Transfer(TO, 1000000n);
|
|
21
|
+
// transfer(address,uint256) selector = 0xa9059cbb
|
|
22
|
+
expect(data.slice(0, 10).toLowerCase()).toBe('0xa9059cbb');
|
|
23
|
+
});
|
|
24
|
+
it('encodes the recipient address in the calldata', () => {
|
|
25
|
+
const data = encodeERC20Transfer(TO, 1000000n);
|
|
26
|
+
// Recipient is ABI-encoded as 32-byte padded address starting at byte 4
|
|
27
|
+
const lowerTo = TO.toLowerCase().slice(2); // strip 0x
|
|
28
|
+
expect(data.toLowerCase()).toContain(lowerTo);
|
|
29
|
+
});
|
|
30
|
+
it('encodes the amount correctly', () => {
|
|
31
|
+
const amount = 1500000n; // 1.5 USDC
|
|
32
|
+
const data = encodeERC20Transfer(TO, amount);
|
|
33
|
+
// Amount 1500000 = 0x16e360
|
|
34
|
+
expect(data.toLowerCase()).toContain('16e360');
|
|
35
|
+
});
|
|
36
|
+
it('encodes zero amount', () => {
|
|
37
|
+
const data = encodeERC20Transfer(TO, 0n);
|
|
38
|
+
expect(data).toBeDefined();
|
|
39
|
+
expect(data.startsWith('0xa9059cbb')).toBe(true);
|
|
40
|
+
});
|
|
41
|
+
it('encodes large amounts (18 decimals, 1 WETH)', () => {
|
|
42
|
+
const oneWeth = toRaw('1.0', 18);
|
|
43
|
+
const data = encodeERC20Transfer(TO, oneWeth);
|
|
44
|
+
expect(data.startsWith('0xa9059cbb')).toBe(true);
|
|
45
|
+
// 1e18 = 0xde0b6b3a7640000
|
|
46
|
+
expect(data.toLowerCase()).toContain('de0b6b3a7640000');
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
// ─── Transfer function smoke tests (mocked clients) ──────────────────────────
|
|
50
|
+
describe('sendToken (mocked)', () => {
|
|
51
|
+
it('calls walletClient.sendTransaction with transfer calldata', async () => {
|
|
52
|
+
const { sendToken } = await import('../transfers.js');
|
|
53
|
+
const sendTransaction = vi.fn().mockResolvedValue(FAKE_HASH);
|
|
54
|
+
const readContract = vi.fn().mockResolvedValue(6); // decimals
|
|
55
|
+
const ctx = {
|
|
56
|
+
publicClient: { readContract },
|
|
57
|
+
walletClient: { sendTransaction },
|
|
58
|
+
account: ACCOUNT,
|
|
59
|
+
chainId: 1,
|
|
60
|
+
};
|
|
61
|
+
const hash = await sendToken(ctx, TO, '1.5', USDC_ETH);
|
|
62
|
+
expect(hash).toBe(FAKE_HASH);
|
|
63
|
+
expect(sendTransaction).toHaveBeenCalledOnce();
|
|
64
|
+
const callArgs = sendTransaction.mock.calls[0][0];
|
|
65
|
+
// Should send to the token contract address
|
|
66
|
+
expect(callArgs.to).toBe(USDC_ETH);
|
|
67
|
+
// Data should start with transfer() selector
|
|
68
|
+
expect(callArgs.data.toLowerCase().startsWith('0xa9059cbb')).toBe(true);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe('sendNative (mocked)', () => {
|
|
72
|
+
it('calls walletClient.sendTransaction with value and no data', async () => {
|
|
73
|
+
const { sendNative } = await import('../transfers.js');
|
|
74
|
+
const sendTransaction = vi.fn().mockResolvedValue(('0x' + 'b'.repeat(64)));
|
|
75
|
+
const ctx = {
|
|
76
|
+
publicClient: {},
|
|
77
|
+
walletClient: { sendTransaction },
|
|
78
|
+
account: ACCOUNT,
|
|
79
|
+
};
|
|
80
|
+
const _hash = await sendNative(ctx, TO, '0.5'); // 0.5 ETH
|
|
81
|
+
expect(sendTransaction).toHaveBeenCalledOnce();
|
|
82
|
+
const callArgs = sendTransaction.mock.calls[0][0];
|
|
83
|
+
expect(callArgs.to).toBe(TO);
|
|
84
|
+
expect(callArgs.value).toBe(500000000000000000n); // 0.5 * 10^18
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
describe('getNativeBalance (mocked)', () => {
|
|
88
|
+
it('returns correct balance info', async () => {
|
|
89
|
+
const { getNativeBalance } = await import('../transfers.js');
|
|
90
|
+
const getBalance = vi.fn().mockResolvedValue(1000000000000000000n); // 1 ETH
|
|
91
|
+
const ctx = {
|
|
92
|
+
publicClient: { getBalance },
|
|
93
|
+
walletClient: {},
|
|
94
|
+
account: ACCOUNT,
|
|
95
|
+
chainId: 8453,
|
|
96
|
+
};
|
|
97
|
+
const result = await getNativeBalance(ctx);
|
|
98
|
+
expect(result.rawBalance).toBe(1000000000000000000n);
|
|
99
|
+
expect(result.humanBalance).toBe('1.0');
|
|
100
|
+
expect(result.decimals).toBe(18);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
//# sourceMappingURL=transfers.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transfers.test.js","sourceRoot":"","sources":["../../../src/tokens/__tests__/transfers.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,8DAA8D;AAC9D,qDAAqD;AACrD,MAAM,EAAE,GAAiB,4CAA4C,CAAC,CAAC,sBAAsB;AAC7F,MAAM,OAAO,GAAY,4CAA4C,CAAC,CAAC,sBAAsB;AAC7F,MAAM,QAAQ,GAAY,4CAA4C,CAAC;AACvE,MAAM,SAAS,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAkB,CAAC;AAE3D,iFAAiF;AAEjF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,IAAI,GAAG,mBAAmB,CAAC,EAAE,EAAE,QAAU,CAAC,CAAC;QACjD,kDAAkD;QAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,IAAI,GAAG,mBAAmB,CAAC,EAAE,EAAE,QAAU,CAAC,CAAC;QACjD,wEAAwE;QACxE,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW;QACtD,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,MAAM,GAAG,QAAU,CAAC,CAAC,WAAW;QACtC,MAAM,IAAI,GAAG,mBAAmB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC7C,4BAA4B;QAC5B,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,IAAI,GAAG,mBAAmB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,mBAAmB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,2BAA2B;QAC3B,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,gFAAgF;AAEhF,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAEtD,MAAM,eAAe,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC7D,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW;QAE9D,MAAM,GAAG,GAAG;YACV,YAAY,EAAE,EAAE,YAAY,EAAS;YACrC,YAAY,EAAE,EAAE,eAAe,EAAS;YACxC,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,CAAC;SACX,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEvD,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,EAAE,CAAC;QAE/C,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,4CAA4C;QAC5C,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,6CAA6C;QAC7C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAEvD,MAAM,eAAe,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAkB,CAAC,CAAC;QAE5F,MAAM,GAAG,GAAG;YACV,YAAY,EAAE,EAAS;YACvB,YAAY,EAAE,EAAE,eAAe,EAAS;YACxC,OAAO,EAAE,OAAO;SACjB,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,UAAU;QAE1D,MAAM,CAAC,eAAe,CAAC,CAAC,oBAAoB,EAAE,CAAC;QAE/C,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,mBAAwB,CAAC,CAAC,CAAC,cAAc;IACvE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAE7D,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,oBAA0B,CAAC,CAAC,CAAC,QAAQ;QAElF,MAAM,GAAG,GAAG;YACV,YAAY,EAAE,EAAE,UAAU,EAAS;YACnC,YAAY,EAAE,EAAS;YACvB,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,IAAI;SACd,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,oBAA0B,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|