@luxfi/exchange 0.1.0 → 1.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.
Files changed (69) hide show
  1. package/dist/bridge/use-private-teleport.d.ts +1 -1
  2. package/dist/bridge/use-private-teleport.d.ts.map +1 -1
  3. package/dist/bridge/use-private-teleport.js +73 -71
  4. package/dist/contracts/abis/amm-v2-factory.d.ts +148 -0
  5. package/dist/contracts/abis/amm-v2-factory.d.ts.map +1 -0
  6. package/dist/contracts/abis/amm-v2-factory.js +52 -0
  7. package/dist/contracts/abis/amm-v2-pair.d.ts +236 -0
  8. package/dist/contracts/abis/amm-v2-pair.d.ts.map +1 -0
  9. package/dist/contracts/abis/amm-v2-pair.js +88 -0
  10. package/dist/contracts/abis/amm-v2-router.d.ts +496 -0
  11. package/dist/contracts/abis/amm-v2-router.d.ts.map +1 -0
  12. package/dist/contracts/abis/amm-v2-router.js +149 -0
  13. package/dist/contracts/abis/amm-v3-factory.d.ts +152 -0
  14. package/dist/contracts/abis/amm-v3-factory.d.ts.map +1 -0
  15. package/dist/contracts/abis/amm-v3-factory.js +48 -0
  16. package/dist/contracts/abis/amm-v3-pool.d.ts +254 -0
  17. package/dist/contracts/abis/amm-v3-pool.d.ts.map +1 -0
  18. package/dist/contracts/abis/amm-v3-pool.js +84 -0
  19. package/dist/contracts/abis/index.d.ts +8 -5
  20. package/dist/contracts/abis/index.d.ts.map +1 -1
  21. package/dist/contracts/abis/index.js +13 -6
  22. package/dist/contracts/abis/lux-amm-v2-factory.d.ts +148 -0
  23. package/dist/contracts/abis/lux-amm-v2-factory.d.ts.map +1 -0
  24. package/dist/contracts/abis/lux-amm-v2-factory.js +52 -0
  25. package/dist/contracts/abis/lux-amm-v2-pair.d.ts +236 -0
  26. package/dist/contracts/abis/lux-amm-v2-pair.d.ts.map +1 -0
  27. package/dist/contracts/abis/lux-amm-v2-pair.js +88 -0
  28. package/dist/contracts/abis/lux-amm-v2-router.d.ts +496 -0
  29. package/dist/contracts/abis/lux-amm-v2-router.d.ts.map +1 -0
  30. package/dist/contracts/abis/lux-amm-v2-router.js +149 -0
  31. package/dist/contracts/abis/lux-amm-v3-factory.d.ts +152 -0
  32. package/dist/contracts/abis/lux-amm-v3-factory.d.ts.map +1 -0
  33. package/dist/contracts/abis/lux-amm-v3-factory.js +48 -0
  34. package/dist/contracts/abis/lux-amm-v3-pool.d.ts +254 -0
  35. package/dist/contracts/abis/lux-amm-v3-pool.d.ts.map +1 -0
  36. package/dist/contracts/abis/lux-amm-v3-pool.js +84 -0
  37. package/dist/contracts/addresses.d.ts +18 -48
  38. package/dist/contracts/addresses.d.ts.map +1 -1
  39. package/dist/contracts/addresses.js +30 -22
  40. package/dist/index.d.ts +1 -0
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +2 -2
  43. package/dist/tokens/index.d.ts +25 -0
  44. package/dist/tokens/index.d.ts.map +1 -1
  45. package/dist/tokens/index.js +90 -5
  46. package/package.json +6 -2
  47. package/src/bridge/cross-chain-store.ts +210 -0
  48. package/src/bridge/index.ts +81 -0
  49. package/src/bridge/private-teleport-types.ts +578 -0
  50. package/src/bridge/types.ts +125 -0
  51. package/src/bridge/use-cross-chain-mint.ts +299 -0
  52. package/src/bridge/use-private-teleport.ts +951 -0
  53. package/src/contracts/abis/{uniswap-v2-factory.ts → amm-v2-factory.ts} +6 -2
  54. package/src/contracts/abis/{uniswap-v2-pair.ts → amm-v2-pair.ts} +6 -2
  55. package/src/contracts/abis/{uniswap-v2-router.ts → amm-v2-router.ts} +6 -2
  56. package/src/contracts/abis/{uniswap-v3-factory.ts → amm-v3-factory.ts} +6 -2
  57. package/src/contracts/abis/{uniswap-v3-pool.ts → amm-v3-pool.ts} +6 -2
  58. package/src/contracts/abis/index.ts +16 -6
  59. package/src/contracts/abis/pool-manager.ts +1 -1
  60. package/src/contracts/addresses.ts +53 -52
  61. package/src/hooks/use-pools.ts +8 -6
  62. package/src/hooks/use-positions.ts +3 -3
  63. package/src/hooks/use-swap-quote.ts +1 -1
  64. package/src/hooks/use-swap.ts +1 -1
  65. package/src/index.ts +2 -2
  66. package/src/tokens/index.ts +148 -32
  67. package/dist/bridge/__tests__/use-private-teleport.test.d.ts +0 -2
  68. package/dist/bridge/__tests__/use-private-teleport.test.d.ts.map +0 -1
  69. package/dist/bridge/__tests__/use-private-teleport.test.js +0 -272
@@ -30,6 +30,10 @@ export const LUX_TESTNET_CONTRACTS = {
30
30
  WLUX: '0x732740c5c895C9FCF619930ed4293fc858eb44c7',
31
31
  WETH: '0xd9956542B51032d940ef076d70B69410667277A3',
32
32
  MULTICALL: '0xd25F88CBdAe3c2CCA3Bb75FC4E723b44C0Ea362F',
33
+ // Bridge tokens (testnet deployments)
34
+ LETH: '0x60E0a8167FC13dE89348978860466C9ceC24B9ba',
35
+ LBTC: '0x1E48D32a4F5e9f08DB9aE4959163300FaF8A6C8e',
36
+ LUSD: '0xb84112ac9318a0b2319aa11d4d10e9762b25f7f4',
33
37
  // AMM V2
34
38
  V2_FACTORY: '0x81C3669B139D92909AA67DbF74a241b10540d919',
35
39
  V2_ROUTER: '0xDB6c703c80BFaE5F9a56482d3c8535f27E1136EB',
@@ -44,38 +48,42 @@ export const LUX_TESTNET_CONTRACTS = {
44
48
  V3_NFT_DESCRIPTOR: '0x53B1aAA5b6DDFD4eD00D0A7b5Ef333dc74B605b5',
45
49
  };
46
50
  /**
47
- * DEX Precompile addresses (native AMM)
48
- * These provide sub-microsecond execution
51
+ * DEX Precompile addresses (native AMM - Uniswap v4 style singleton PoolManager)
52
+ * These provide sub-microsecond execution via native Go implementation
49
53
  *
50
- * Lux Precompile Address Standard:
51
- * - Prefix format: 0xNNNN000000000000000000000000000000000000
52
- * - Range 0x0400-0x04FF is reserved for DEX precompiles
54
+ * Address format: 0x0000...00LPNUMBER (addresses end with LP number)
55
+ * LP-9010: DEX Precompile - Native HFT Order Book (PoolManager)
56
+ * LP-9011: Oracle Precompile - Multi-Source Price Aggregation
53
57
  *
54
- * @see ~/work/lux/precompile/dex/module.go for implementation
58
+ * @see ~/work/lux/precompile/registry/registry.go for the full address scheme
59
+ * @see ~/work/lux/dex/pkg/gateway/lux/provider.go for gateway implementation
55
60
  */
56
61
  export const DEX_PRECOMPILES = {
57
- POOL_MANAGER: '0x0400000000000000000000000000000000000000',
58
- SWAP_ROUTER: '0x0401000000000000000000000000000000000000',
59
- HOOKS_REGISTRY: '0x0402000000000000000000000000000000000000',
60
- FLASH_LOAN: '0x0403000000000000000000000000000000000000',
61
- LENDING: '0x0410000000000000000000000000000000000000',
62
- LIQUID: '0x0430000000000000000000000000000000000000',
63
- TELEPORT: '0x0440000000000000000000000000000000000000',
62
+ // Core DEX (LP-9010 series - Uniswap v4 style)
63
+ POOL_MANAGER: '0x0000000000000000000000000000000000009010', // LP-9010
64
+ SWAP_ROUTER: '0x0000000000000000000000000000000000009012', // LP-9012
65
+ HOOKS_REGISTRY: '0x0000000000000000000000000000000000009013', // LP-9013
66
+ FLASH_LOAN: '0x0000000000000000000000000000000000009014', // LP-9014
67
+ // DeFi Extensions
68
+ ORACLE_HUB: '0x0000000000000000000000000000000000009011', // LP-9011
69
+ CLOB: '0x0000000000000000000000000000000000009020', // LP-9020
70
+ VAULT: '0x0000000000000000000000000000000000009030', // LP-9030
71
+ // Bridges (LP-6xxx)
72
+ TELEPORT: '0x0000000000000000000000000000000000006010', // LP-6010
64
73
  };
65
74
  /**
66
75
  * Contract addresses for Lux Dev (1337)
76
+ * Deterministic CREATE addresses from DeployFullStack.s.sol deployed by anvil account 0
77
+ * Account 0: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
67
78
  */
68
79
  export const LUX_DEV_CONTRACTS = {
69
- // Core
70
- WLUX: '0x610178dA211FEF7D417bC0e6FeD39F05609AD788',
80
+ // Core - Nonce 0
81
+ WLUX: '0x5FbDB2315678afecb367f032d93F642f64180aa3',
71
82
  MULTICALL: '0xd25F88CBdAe3c2CCA3Bb75FC4E723b44C0Ea362F',
72
- // Bridged tokens (local dev)
73
- ETH: '0x5FbDB2315678afecb367f032d93F642f64180aa3',
74
- BTC: '0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512',
75
- USDC: '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0',
76
- USDT: '0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9',
77
- DAI: '0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9',
78
- AI: '0x0B306BF915C4d645ff596e518fAf3F9669b97016',
83
+ // Bridged tokens (deterministic deployment nonces 1-3)
84
+ LETH: '0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512', // Nonce 1
85
+ LBTC: '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0', // Nonce 2
86
+ LUSD: '0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9', // Nonce 3
79
87
  // AMM V2
80
88
  V2_FACTORY: '0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1',
81
89
  V2_ROUTER: '0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE',
package/dist/index.d.ts CHANGED
@@ -14,4 +14,5 @@ export * from './contracts';
14
14
  export * from './dex';
15
15
  export * from './hooks';
16
16
  export * from './stores';
17
+ export * from './bridge';
17
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,cAAc,UAAU,CAAA;AAGxB,cAAc,UAAU,CAAA;AAGxB,cAAc,aAAa,CAAA;AAG3B,cAAc,OAAO,CAAA;AAGrB,cAAc,SAAS,CAAA;AAGvB,cAAc,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,cAAc,UAAU,CAAA;AAGxB,cAAc,UAAU,CAAA;AAGxB,cAAc,aAAa,CAAA;AAG3B,cAAc,OAAO,CAAA;AAGrB,cAAc,SAAS,CAAA;AAGvB,cAAc,UAAU,CAAA;AAGxB,cAAc,UAAU,CAAA"}
package/dist/index.js CHANGED
@@ -20,5 +20,5 @@ export * from './dex';
20
20
  export * from './hooks';
21
21
  // Stores
22
22
  export * from './stores';
23
- // Note: Bridge module is experimental and will be added in a future release
24
- // See bridge-wip/ for the work-in-progress implementation
23
+ // Bridge (cross-chain + Z-Chain privacy layer)
24
+ export * from './bridge';
@@ -28,9 +28,22 @@ export declare const WLUX_DEV: Token;
28
28
  export declare const LUSD: Token;
29
29
  /**
30
30
  * Bridge tokens (L-prefix for assets bridged to Lux)
31
+ * These are the canonical mainnet addresses from @luxfi/config
31
32
  */
32
33
  export declare const LETH: Token;
33
34
  export declare const LBTC: Token;
35
+ /**
36
+ * Testnet bridge tokens
37
+ */
38
+ export declare const LETH_TESTNET: Token;
39
+ export declare const LBTC_TESTNET: Token;
40
+ export declare const LUSD_TESTNET: Token;
41
+ /**
42
+ * Dev mode bridge tokens (deterministic CREATE addresses)
43
+ */
44
+ export declare const LETH_DEV: Token;
45
+ export declare const LBTC_DEV: Token;
46
+ export declare const LUSD_DEV: Token;
34
47
  /**
35
48
  * Major tokens on Lux Mainnet
36
49
  */
@@ -54,6 +67,18 @@ export declare const LUX_MAINNET_TOKENS: Token[];
54
67
  * Default token list for Zoo Mainnet
55
68
  */
56
69
  export declare const ZOO_MAINNET_TOKENS: Token[];
70
+ /**
71
+ * Default token list for Lux Testnet
72
+ */
73
+ export declare const LUX_TESTNET_TOKENS: Token[];
74
+ /**
75
+ * Default token list for Lux Dev
76
+ */
77
+ export declare const LUX_DEV_TOKENS: Token[];
78
+ /**
79
+ * Get tokens for a chain
80
+ */
81
+ export declare function getTokensForChain(chainId: number): Token[];
57
82
  /**
58
83
  * Get wrapped native token for chain
59
84
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,KAMlB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,KAMlB,CAAA;AAED,eAAO,MAAM,IAAI,EAAE,KAMlB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,KAMlB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,EAWrC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,EAMrC,CAAA;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAWnE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAEnD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,KAMlB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,IAAI,EAAE,KAMlB,CAAA;AAED,eAAO,MAAM,IAAI,EAAE,KAMlB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,KAMlB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,EAWrC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,EAMrC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,EAKrC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,EAKjC,CAAA;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,CAa1D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAWnE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAEnD"}
@@ -35,7 +35,8 @@ export const WLUX_TESTNET = {
35
35
  name: 'Wrapped LUX',
36
36
  };
37
37
  export const WLUX_DEV = {
38
- address: '0x610178dA211FEF7D417bC0e6FeD39F05609AD788',
38
+ // Deterministic CREATE address from DeployFullStack.s.sol (nonce 0)
39
+ address: '0x5FbDB2315678afecb367f032d93F642f64180aa3',
39
40
  chainId: 1337,
40
41
  decimals: 18,
41
42
  symbol: 'WLUX',
@@ -45,29 +46,78 @@ export const WLUX_DEV = {
45
46
  * Stablecoins
46
47
  */
47
48
  export const LUSD = {
48
- address: '0x0000000000000000000000000000000000000000', // TODO: Deploy
49
+ address: '0x4B1BfA76eD63F1A0aD2E4f40b3F46C45E8F7A4E2',
49
50
  chainId: 96369,
50
- decimals: 18,
51
+ decimals: 6, // USDC-compatible decimals
51
52
  symbol: 'LUSD',
52
53
  name: 'Lux Dollar',
53
54
  };
54
55
  /**
55
56
  * Bridge tokens (L-prefix for assets bridged to Lux)
57
+ * These are the canonical mainnet addresses from @luxfi/config
56
58
  */
57
59
  export const LETH = {
58
- address: '0xAA3AE951A7925F25aE8Ad65b052a76Bd8f052598',
60
+ address: '0xAA3AE95816a4A6FbC6b8Ed5a6C06f22A96A80C8C',
59
61
  chainId: 96369,
60
62
  decimals: 18,
61
63
  symbol: 'LETH',
62
64
  name: 'Lux ETH',
63
65
  };
64
66
  export const LBTC = {
65
- address: '0x526903Ee6118de6737D11b37f82fC7f69B13685D',
67
+ address: '0x526903E35E7106D62ED3B5d77E14e51d024Aa1D3',
66
68
  chainId: 96369,
67
69
  decimals: 8,
68
70
  symbol: 'LBTC',
69
71
  name: 'Lux BTC',
70
72
  };
73
+ /**
74
+ * Testnet bridge tokens
75
+ */
76
+ export const LETH_TESTNET = {
77
+ address: '0x60E0a8167FC13dE89348978860466C9ceC24B9ba',
78
+ chainId: 96368,
79
+ decimals: 18,
80
+ symbol: 'LETH',
81
+ name: 'Lux ETH',
82
+ };
83
+ export const LBTC_TESTNET = {
84
+ address: '0x1E48D32a4F5e9f08DB9aE4959163300FaF8A6C8e',
85
+ chainId: 96368,
86
+ decimals: 8,
87
+ symbol: 'LBTC',
88
+ name: 'Lux BTC',
89
+ };
90
+ export const LUSD_TESTNET = {
91
+ address: '0xb84112ac9318a0b2319aa11d4d10e9762b25f7f4',
92
+ chainId: 96368,
93
+ decimals: 18,
94
+ symbol: 'LUSD',
95
+ name: 'Lux Dollar',
96
+ };
97
+ /**
98
+ * Dev mode bridge tokens (deterministic CREATE addresses)
99
+ */
100
+ export const LETH_DEV = {
101
+ address: '0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512',
102
+ chainId: 1337,
103
+ decimals: 18,
104
+ symbol: 'LETH',
105
+ name: 'Lux ETH',
106
+ };
107
+ export const LBTC_DEV = {
108
+ address: '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0',
109
+ chainId: 1337,
110
+ decimals: 8,
111
+ symbol: 'LBTC',
112
+ name: 'Lux BTC',
113
+ };
114
+ export const LUSD_DEV = {
115
+ address: '0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9',
116
+ chainId: 1337,
117
+ decimals: 6,
118
+ symbol: 'LUSD',
119
+ name: 'Lux Dollar',
120
+ };
71
121
  /**
72
122
  * Major tokens on Lux Mainnet
73
123
  */
@@ -162,6 +212,41 @@ export const ZOO_MAINNET_TOKENS = [
162
212
  USDT_ZOO,
163
213
  WETH_ZOO,
164
214
  ];
215
+ /**
216
+ * Default token list for Lux Testnet
217
+ */
218
+ export const LUX_TESTNET_TOKENS = [
219
+ WLUX_TESTNET,
220
+ LETH_TESTNET,
221
+ LBTC_TESTNET,
222
+ LUSD_TESTNET,
223
+ ];
224
+ /**
225
+ * Default token list for Lux Dev
226
+ */
227
+ export const LUX_DEV_TOKENS = [
228
+ WLUX_DEV,
229
+ LETH_DEV,
230
+ LBTC_DEV,
231
+ LUSD_DEV,
232
+ ];
233
+ /**
234
+ * Get tokens for a chain
235
+ */
236
+ export function getTokensForChain(chainId) {
237
+ switch (chainId) {
238
+ case 96369:
239
+ return LUX_MAINNET_TOKENS;
240
+ case 96368:
241
+ return LUX_TESTNET_TOKENS;
242
+ case 1337:
243
+ return LUX_DEV_TOKENS;
244
+ case 200200:
245
+ return ZOO_MAINNET_TOKENS;
246
+ default:
247
+ return [];
248
+ }
249
+ }
165
250
  /**
166
251
  * Get wrapped native token for chain
167
252
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@luxfi/exchange",
3
- "version": "0.1.0",
3
+ "version": "1.0.0",
4
4
  "description": "Lux Exchange SDK - React hooks and utilities for Lux DEX",
5
5
  "license": "MIT",
6
6
  "main": "./dist/index.js",
@@ -34,6 +34,10 @@
34
34
  "./dex": {
35
35
  "types": "./dist/dex/index.d.ts",
36
36
  "import": "./dist/dex/index.js"
37
+ },
38
+ "./bridge": {
39
+ "types": "./dist/bridge/index.d.ts",
40
+ "import": "./dist/bridge/index.js"
37
41
  }
38
42
  },
39
43
  "files": [
@@ -64,7 +68,7 @@
64
68
  "repository": {
65
69
  "type": "git",
66
70
  "url": "https://github.com/luxfi/exchange.git",
67
- "directory": "packages/exchange"
71
+ "directory": "pkgs/exchange"
68
72
  },
69
73
  "keywords": [
70
74
  "lux",
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Zustand store for cross-chain mint operations
3
+ */
4
+
5
+ import { create } from 'zustand'
6
+ import { devtools, persist } from 'zustand/middleware'
7
+ import type { CrossChainMintRequest, CrossChainMintState, CrossChainMintStatus } from './types'
8
+
9
+ interface PendingMint extends CrossChainMintRequest {
10
+ state: CrossChainMintState
11
+ }
12
+
13
+ export interface CrossChainStore {
14
+ /** Currently active mints by swap ID */
15
+ pendingMints: Record<string, PendingMint>
16
+ /** Most recent completed mints (for history) */
17
+ recentMints: PendingMint[]
18
+ /** Maximum number of recent mints to keep */
19
+ maxRecentMints: number
20
+
21
+ // Actions
22
+ initiateMint: (request: CrossChainMintRequest) => string
23
+ updateMintStatus: (swapId: string, status: CrossChainMintStatus) => void
24
+ updateMintTxHash: (swapId: string, field: 'sourceTxHash' | 'mintTxHash' | 'swapTxHash', hash: string) => void
25
+ completeMint: (swapId: string) => void
26
+ failMint: (swapId: string, error: string) => void
27
+ cancelMint: (swapId: string) => void
28
+ clearPendingMint: (swapId: string) => void
29
+ getPendingMint: (swapId: string) => PendingMint | undefined
30
+ getActiveMints: () => PendingMint[]
31
+ }
32
+
33
+ // Generate a random swap ID
34
+ function generateSwapId(): string {
35
+ const bytes = new Uint8Array(32)
36
+ crypto.getRandomValues(bytes)
37
+ return '0x' + Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('')
38
+ }
39
+
40
+ export const useCrossChainStore = create<CrossChainStore>()(
41
+ devtools(
42
+ persist(
43
+ (set, get) => ({
44
+ pendingMints: {},
45
+ recentMints: [],
46
+ maxRecentMints: 20,
47
+
48
+ initiateMint: (request: CrossChainMintRequest) => {
49
+ const swapId = generateSwapId()
50
+ const now = Date.now()
51
+
52
+ const pendingMint: PendingMint = {
53
+ ...request,
54
+ state: {
55
+ swapId: swapId as `0x${string}`,
56
+ status: 'initiating',
57
+ sourceTxHash: null,
58
+ mintTxHash: null,
59
+ swapTxHash: null,
60
+ error: null,
61
+ startedAt: now,
62
+ completedAt: null,
63
+ },
64
+ }
65
+
66
+ set((state) => ({
67
+ pendingMints: {
68
+ ...state.pendingMints,
69
+ [swapId]: pendingMint,
70
+ },
71
+ }))
72
+
73
+ return swapId
74
+ },
75
+
76
+ updateMintStatus: (swapId: string, status: CrossChainMintStatus) => {
77
+ set((state) => {
78
+ const mint = state.pendingMints[swapId]
79
+ if (!mint) return state
80
+
81
+ return {
82
+ pendingMints: {
83
+ ...state.pendingMints,
84
+ [swapId]: {
85
+ ...mint,
86
+ state: {
87
+ ...mint.state,
88
+ status,
89
+ },
90
+ },
91
+ },
92
+ }
93
+ })
94
+ },
95
+
96
+ updateMintTxHash: (swapId: string, field: 'sourceTxHash' | 'mintTxHash' | 'swapTxHash', hash: string) => {
97
+ set((state) => {
98
+ const mint = state.pendingMints[swapId]
99
+ if (!mint) return state
100
+
101
+ return {
102
+ pendingMints: {
103
+ ...state.pendingMints,
104
+ [swapId]: {
105
+ ...mint,
106
+ state: {
107
+ ...mint.state,
108
+ [field]: hash,
109
+ },
110
+ },
111
+ },
112
+ }
113
+ })
114
+ },
115
+
116
+ completeMint: (swapId: string) => {
117
+ set((state) => {
118
+ const mint = state.pendingMints[swapId]
119
+ if (!mint) return state
120
+
121
+ const completedMint: PendingMint = {
122
+ ...mint,
123
+ state: {
124
+ ...mint.state,
125
+ status: 'complete',
126
+ completedAt: Date.now(),
127
+ },
128
+ }
129
+
130
+ const { [swapId]: _, ...remainingPending } = state.pendingMints
131
+ const newRecent = [completedMint, ...state.recentMints].slice(0, state.maxRecentMints)
132
+
133
+ return {
134
+ pendingMints: remainingPending,
135
+ recentMints: newRecent,
136
+ }
137
+ })
138
+ },
139
+
140
+ failMint: (swapId: string, error: string) => {
141
+ set((state) => {
142
+ const mint = state.pendingMints[swapId]
143
+ if (!mint) return state
144
+
145
+ return {
146
+ pendingMints: {
147
+ ...state.pendingMints,
148
+ [swapId]: {
149
+ ...mint,
150
+ state: {
151
+ ...mint.state,
152
+ status: 'failed',
153
+ error,
154
+ completedAt: Date.now(),
155
+ },
156
+ },
157
+ },
158
+ }
159
+ })
160
+ },
161
+
162
+ cancelMint: (swapId: string) => {
163
+ set((state) => {
164
+ const mint = state.pendingMints[swapId]
165
+ if (!mint) return state
166
+
167
+ return {
168
+ pendingMints: {
169
+ ...state.pendingMints,
170
+ [swapId]: {
171
+ ...mint,
172
+ state: {
173
+ ...mint.state,
174
+ status: 'cancelled',
175
+ completedAt: Date.now(),
176
+ },
177
+ },
178
+ },
179
+ }
180
+ })
181
+ },
182
+
183
+ clearPendingMint: (swapId: string) => {
184
+ set((state) => {
185
+ const { [swapId]: _, ...remainingPending } = state.pendingMints
186
+ return { pendingMints: remainingPending }
187
+ })
188
+ },
189
+
190
+ getPendingMint: (swapId: string) => {
191
+ return get().pendingMints[swapId]
192
+ },
193
+
194
+ getActiveMints: () => {
195
+ const { pendingMints } = get()
196
+ return Object.values(pendingMints).filter(
197
+ (m) => m.state.status !== 'failed' && m.state.status !== 'cancelled'
198
+ )
199
+ },
200
+ }),
201
+ {
202
+ name: 'cross-chain-mint-storage',
203
+ partialize: (state) => ({
204
+ recentMints: state.recentMints,
205
+ }),
206
+ }
207
+ ),
208
+ { name: 'CrossChainStore' }
209
+ )
210
+ )
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Cross-chain bridge module for XVM ↔ C-Chain atomic swaps
3
+ *
4
+ * Enables one-click minting of wrapped tokens on C-Chain from X-Chain assets
5
+ * using Warp cross-chain messaging and HTLC atomic swaps.
6
+ *
7
+ * Includes Z-Chain privacy layer for fully shielded cross-chain teleportation:
8
+ * XVM UTXO → ZNote (shielded) → Z-Chain AMM (private swap) → destination
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * // Standard cross-chain mint
13
+ * import { useCrossChainMint } from '@luxfi/exchange/bridge'
14
+ *
15
+ * function MintButton() {
16
+ * const { mint, isLoading } = useCrossChainMint()
17
+ *
18
+ * const handleMint = async () => {
19
+ * const swapId = await mint({
20
+ * sourceAsset: '0x...', // XVM asset ID
21
+ * amount: 1000000n, // 1 token (6 decimals)
22
+ * recipient: '0x...', // C-Chain recipient
23
+ * targetToken: '0x...', // Optional: swap to this token
24
+ * minReceive: 990000n, // Slippage protection
25
+ * })
26
+ * console.log('Mint initiated:', swapId)
27
+ * }
28
+ *
29
+ * return (
30
+ * <button onClick={handleMint} disabled={isLoading}>
31
+ * {isLoading ? 'Minting...' : 'Mint on C-Chain'}
32
+ * </button>
33
+ * )
34
+ * }
35
+ * ```
36
+ *
37
+ * @example
38
+ * ```tsx
39
+ * // Private teleport with Z-Chain
40
+ * import { usePrivateTeleport } from '@luxfi/exchange/bridge'
41
+ *
42
+ * function PrivateTeleportButton() {
43
+ * const { teleport, executeSwap, exportToDestination, isLoading } = usePrivateTeleport()
44
+ *
45
+ * const handlePrivateTeleport = async () => {
46
+ * // 1. Initiate shielded teleport (creates ZNote)
47
+ * const teleportId = await teleport({
48
+ * sourceChain: '0x...', // X-Chain ID
49
+ * destChain: '0x...', // C-Chain ID
50
+ * sourceAsset: '0x...', // Asset to teleport
51
+ * destAsset: '0x...', // Asset to receive (if swapping)
52
+ * amount: 1000000n, // Amount (will be encrypted)
53
+ * recipient: '0x...', // Destination address
54
+ * deadline: Math.floor(Date.now() / 1000) + 3600,
55
+ * privateSwap: true, // Use Z-Chain AMM for private swap
56
+ * })
57
+ *
58
+ * // 2. Execute private swap on Z-Chain (optional)
59
+ * await executeSwap(teleportId, '0x...poolId', 990000n)
60
+ *
61
+ * // 3. Export to destination chain with range proof
62
+ * await exportToDestination(teleportId)
63
+ * }
64
+ *
65
+ * return (
66
+ * <button onClick={handlePrivateTeleport} disabled={isLoading}>
67
+ * Private Teleport
68
+ * </button>
69
+ * )
70
+ * }
71
+ * ```
72
+ */
73
+
74
+ // Standard cross-chain (public)
75
+ export * from './types'
76
+ export * from './cross-chain-store'
77
+ export * from './use-cross-chain-mint'
78
+
79
+ // Private teleport (Z-Chain privacy layer)
80
+ export * from './private-teleport-types'
81
+ export * from './use-private-teleport'