@rabby-wallet/rabby-bridge 0.0.13-alpha.0 → 0.0.13

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 (198) hide show
  1. package/README.md +1 -131
  2. package/dist/chains.d.ts +2 -1
  3. package/dist/chains.js +2 -0
  4. package/dist/data.d.ts +3 -0
  5. package/dist/data.js +3 -0
  6. package/dist/index.d.ts +1 -7
  7. package/dist/index.js +0 -3
  8. package/dist/quote.d.ts +4 -18
  9. package/dist/quote.js +65 -282
  10. package/package.json +3 -13
  11. package/dist/calldata/abi.d.ts +0 -29
  12. package/dist/calldata/abi.js +0 -160
  13. package/dist/calldata/across/deposit.d.ts +0 -2
  14. package/dist/calldata/across/deposit.js +0 -36
  15. package/dist/calldata/across/depositNative.d.ts +0 -2
  16. package/dist/calldata/across/depositNative.js +0 -45
  17. package/dist/calldata/across/depositNow.d.ts +0 -2
  18. package/dist/calldata/across/depositNow.js +0 -35
  19. package/dist/calldata/across/depositV3.d.ts +0 -2
  20. package/dist/calldata/across/depositV3.js +0 -35
  21. package/dist/calldata/across/depositV3Now.d.ts +0 -2
  22. package/dist/calldata/across/depositV3Now.js +0 -34
  23. package/dist/calldata/across/index.d.ts +0 -4
  24. package/dist/calldata/across/index.js +0 -31
  25. package/dist/calldata/across/swapAndBridge.d.ts +0 -2
  26. package/dist/calldata/across/swapAndBridge.js +0 -70
  27. package/dist/calldata/across/validate.d.ts +0 -3
  28. package/dist/calldata/across/validate.js +0 -30
  29. package/dist/calldata/chains.d.ts +0 -2
  30. package/dist/calldata/chains.js +0 -35
  31. package/dist/calldata/destination.d.ts +0 -6
  32. package/dist/calldata/destination.js +0 -148
  33. package/dist/calldata/diagnostics.d.ts +0 -4
  34. package/dist/calldata/diagnostics.js +0 -18
  35. package/dist/calldata/expect.d.ts +0 -25
  36. package/dist/calldata/expect.js +0 -129
  37. package/dist/calldata/hex.d.ts +0 -6
  38. package/dist/calldata/hex.js +0 -46
  39. package/dist/calldata/index.d.ts +0 -20
  40. package/dist/calldata/index.js +0 -85
  41. package/dist/calldata/lifi/across/acrossV4Erc20Min.d.ts +0 -2
  42. package/dist/calldata/lifi/across/acrossV4Erc20Min.js +0 -26
  43. package/dist/calldata/lifi/across/acrossV4NativeMin.d.ts +0 -2
  44. package/dist/calldata/lifi/across/acrossV4NativeMin.js +0 -22
  45. package/dist/calldata/lifi/across/index.d.ts +0 -6
  46. package/dist/calldata/lifi/across/index.js +0 -19
  47. package/dist/calldata/lifi/allbridge/index.d.ts +0 -3
  48. package/dist/calldata/lifi/allbridge/index.js +0 -26
  49. package/dist/calldata/lifi/celer/index.d.ts +0 -4
  50. package/dist/calldata/lifi/celer/index.js +0 -10
  51. package/dist/calldata/lifi/centrifuge/index.d.ts +0 -3
  52. package/dist/calldata/lifi/centrifuge/index.js +0 -22
  53. package/dist/calldata/lifi/frax/index.d.ts +0 -4
  54. package/dist/calldata/lifi/frax/index.js +0 -29
  55. package/dist/calldata/lifi/garden/index.d.ts +0 -3
  56. package/dist/calldata/lifi/garden/index.js +0 -22
  57. package/dist/calldata/lifi/gaszip/index.d.ts +0 -6
  58. package/dist/calldata/lifi/gaszip/index.js +0 -15
  59. package/dist/calldata/lifi/index.d.ts +0 -4
  60. package/dist/calldata/lifi/index.js +0 -60
  61. package/dist/calldata/lifi/intents/index.d.ts +0 -4
  62. package/dist/calldata/lifi/intents/index.js +0 -10
  63. package/dist/calldata/lifi/layerswap/index.d.ts +0 -4
  64. package/dist/calldata/lifi/layerswap/index.js +0 -10
  65. package/dist/calldata/lifi/m0/index.d.ts +0 -3
  66. package/dist/calldata/lifi/m0/index.js +0 -33
  67. package/dist/calldata/lifi/mayan/index.d.ts +0 -4
  68. package/dist/calldata/lifi/mayan/index.js +0 -10
  69. package/dist/calldata/lifi/method.d.ts +0 -6
  70. package/dist/calldata/lifi/method.js +0 -16
  71. package/dist/calldata/lifi/native/index.d.ts +0 -4
  72. package/dist/calldata/lifi/native/index.js +0 -80
  73. package/dist/calldata/lifi/params.d.ts +0 -30
  74. package/dist/calldata/lifi/params.js +0 -370
  75. package/dist/calldata/lifi/paxos/index.d.ts +0 -4
  76. package/dist/calldata/lifi/paxos/index.js +0 -10
  77. package/dist/calldata/lifi/polymer/index.d.ts +0 -4
  78. package/dist/calldata/lifi/polymer/index.js +0 -10
  79. package/dist/calldata/lifi/relay/index.d.ts +0 -6
  80. package/dist/calldata/lifi/relay/index.js +0 -15
  81. package/dist/calldata/lifi/shape.d.ts +0 -4
  82. package/dist/calldata/lifi/shape.js +0 -31
  83. package/dist/calldata/lifi/squid/index.d.ts +0 -6
  84. package/dist/calldata/lifi/squid/index.js +0 -15
  85. package/dist/calldata/lifi/stargate/index.d.ts +0 -5
  86. package/dist/calldata/lifi/stargate/index.js +0 -15
  87. package/dist/calldata/lifi/swap/index.d.ts +0 -5
  88. package/dist/calldata/lifi/swap/index.js +0 -18
  89. package/dist/calldata/lifi/swap/swapMethod.d.ts +0 -2
  90. package/dist/calldata/lifi/swap/swapMethod.js +0 -40
  91. package/dist/calldata/match.d.ts +0 -3
  92. package/dist/calldata/match.js +0 -21
  93. package/dist/calldata/mayan/destination.d.ts +0 -2
  94. package/dist/calldata/mayan/destination.js +0 -13
  95. package/dist/calldata/mayan/fastMctpBridge.d.ts +0 -3
  96. package/dist/calldata/mayan/fastMctpBridge.js +0 -43
  97. package/dist/calldata/mayan/fastMctpCreateOrder.d.ts +0 -3
  98. package/dist/calldata/mayan/fastMctpCreateOrder.js +0 -39
  99. package/dist/calldata/mayan/forward.d.ts +0 -8
  100. package/dist/calldata/mayan/forward.js +0 -35
  101. package/dist/calldata/mayan/forwardERC20.d.ts +0 -2
  102. package/dist/calldata/mayan/forwardERC20.js +0 -19
  103. package/dist/calldata/mayan/forwardEth.d.ts +0 -2
  104. package/dist/calldata/mayan/forwardEth.js +0 -16
  105. package/dist/calldata/mayan/index.d.ts +0 -4
  106. package/dist/calldata/mayan/index.js +0 -21
  107. package/dist/calldata/mayan/mctp.d.ts +0 -5
  108. package/dist/calldata/mayan/mctp.js +0 -41
  109. package/dist/calldata/mayan/readProtocol.d.ts +0 -2
  110. package/dist/calldata/mayan/readProtocol.js +0 -29
  111. package/dist/calldata/mayan/swapAndForwardERC20.d.ts +0 -2
  112. package/dist/calldata/mayan/swapAndForwardERC20.js +0 -24
  113. package/dist/calldata/mayan/swapAndForwardEth.d.ts +0 -2
  114. package/dist/calldata/mayan/swapAndForwardEth.js +0 -23
  115. package/dist/calldata/mayan/swiftCreateOrder.d.ts +0 -3
  116. package/dist/calldata/mayan/swiftCreateOrder.js +0 -49
  117. package/dist/calldata/mayan/validate.d.ts +0 -3
  118. package/dist/calldata/mayan/validate.js +0 -20
  119. package/dist/calldata/protocols.d.ts +0 -9
  120. package/dist/calldata/protocols.js +0 -56
  121. package/dist/calldata/relay/calls.d.ts +0 -13
  122. package/dist/calldata/relay/calls.js +0 -54
  123. package/dist/calldata/relay/depositErc20.d.ts +0 -2
  124. package/dist/calldata/relay/depositErc20.js +0 -22
  125. package/dist/calldata/relay/depositErc20Allowance.d.ts +0 -2
  126. package/dist/calldata/relay/depositErc20Allowance.js +0 -20
  127. package/dist/calldata/relay/depositNative.d.ts +0 -2
  128. package/dist/calldata/relay/depositNative.js +0 -20
  129. package/dist/calldata/relay/index.d.ts +0 -4
  130. package/dist/calldata/relay/index.js +0 -40
  131. package/dist/calldata/relay/multicall.d.ts +0 -2
  132. package/dist/calldata/relay/multicall.js +0 -15
  133. package/dist/calldata/relay/permit2TransferAndMulticall.d.ts +0 -2
  134. package/dist/calldata/relay/permit2TransferAndMulticall.js +0 -42
  135. package/dist/calldata/relay/permit3009TransferAndMulticall.d.ts +0 -2
  136. package/dist/calldata/relay/permit3009TransferAndMulticall.js +0 -41
  137. package/dist/calldata/relay/permit3009TransferAndMulticallSigned.d.ts +0 -2
  138. package/dist/calldata/relay/permit3009TransferAndMulticallSigned.js +0 -40
  139. package/dist/calldata/relay/permitTransferAndMulticall.d.ts +0 -2
  140. package/dist/calldata/relay/permitTransferAndMulticall.js +0 -34
  141. package/dist/calldata/relay/permitTransferAndMulticallLegacy.d.ts +0 -2
  142. package/dist/calldata/relay/permitTransferAndMulticallLegacy.js +0 -35
  143. package/dist/calldata/relay/transferAndMulticall.d.ts +0 -2
  144. package/dist/calldata/relay/transferAndMulticall.js +0 -26
  145. package/dist/calldata/relay/validate.d.ts +0 -3
  146. package/dist/calldata/relay/validate.js +0 -18
  147. package/dist/calldata/resolve.d.ts +0 -2
  148. package/dist/calldata/resolve.js +0 -28
  149. package/dist/calldata/socket/bridge.d.ts +0 -2
  150. package/dist/calldata/socket/bridge.js +0 -28
  151. package/dist/calldata/socket/exec.d.ts +0 -2
  152. package/dist/calldata/socket/exec.js +0 -71
  153. package/dist/calldata/socket/index.d.ts +0 -4
  154. package/dist/calldata/socket/index.js +0 -13
  155. package/dist/calldata/socket/params.d.ts +0 -5
  156. package/dist/calldata/socket/params.js +0 -14
  157. package/dist/calldata/socket/protocols/ccip.d.ts +0 -2
  158. package/dist/calldata/socket/protocols/ccip.js +0 -32
  159. package/dist/calldata/socket/protocols/cctp.d.ts +0 -2
  160. package/dist/calldata/socket/protocols/cctp.js +0 -24
  161. package/dist/calldata/socket/protocols/eco.d.ts +0 -2
  162. package/dist/calldata/socket/protocols/eco.js +0 -20
  163. package/dist/calldata/socket/protocols/index.d.ts +0 -3
  164. package/dist/calldata/socket/protocols/index.js +0 -81
  165. package/dist/calldata/socket/protocols/native.d.ts +0 -2
  166. package/dist/calldata/socket/protocols/native.js +0 -70
  167. package/dist/calldata/socket/protocols/oft.d.ts +0 -2
  168. package/dist/calldata/socket/protocols/oft.js +0 -31
  169. package/dist/calldata/socket/protocols/swapsXYZ.d.ts +0 -2
  170. package/dist/calldata/socket/protocols/swapsXYZ.js +0 -62
  171. package/dist/calldata/socket/swapAndBridge.d.ts +0 -2
  172. package/dist/calldata/socket/swapAndBridge.js +0 -37
  173. package/dist/calldata/socket/validate.d.ts +0 -3
  174. package/dist/calldata/socket/validate.js +0 -21
  175. package/dist/calldata/types.d.ts +0 -82
  176. package/dist/calldata/types.js +0 -20
  177. package/dist/errors/constants.d.ts +0 -876
  178. package/dist/errors/constants.js +0 -883
  179. package/dist/errors/index.d.ts +0 -61
  180. package/dist/errors/index.js +0 -53
  181. package/dist/errors/sanitize.d.ts +0 -3
  182. package/dist/errors/sanitize.js +0 -75
  183. package/dist/providers/data.d.ts +0 -23
  184. package/dist/providers/data.js +0 -116
  185. package/dist/providers/errors.d.ts +0 -7
  186. package/dist/providers/errors.js +0 -10
  187. package/dist/providers/index.d.ts +0 -7
  188. package/dist/providers/index.js +0 -340
  189. package/dist/providers/layerswap.d.ts +0 -9
  190. package/dist/providers/layerswap.js +0 -95
  191. package/dist/providers/relay.d.ts +0 -59
  192. package/dist/providers/relay.js +0 -185
  193. package/dist/providers/request.d.ts +0 -23
  194. package/dist/providers/request.js +0 -69
  195. package/dist/providers/socket.d.ts +0 -5
  196. package/dist/providers/socket.js +0 -57
  197. package/dist/providers/types.d.ts +0 -36
  198. package/dist/providers/types.js +0 -1
@@ -1,10 +0,0 @@
1
- import { knownCompare } from '../../expect.js';
2
- import { bridgeShape } from '../shape.js';
3
- import { lifiBridgeMethod } from '../method.js';
4
- import { applyLayerSwapData, layerSwapDataParam } from '../params.js';
5
- export const methods = [
6
- lifiBridgeMethod('startBridgeTokensViaLayerSwap', '0xee9e98e0', [layerSwapDataParam], false, (parsed, args) => applyLayerSwapData(parsed, args.layerSwapData)),
7
- lifiBridgeMethod('swapAndStartBridgeTokensViaLayerSwap', '0x4c279d6b', [layerSwapDataParam], true, (parsed, args) => applyLayerSwapData(parsed, args.layerSwapData)),
8
- ];
9
- export const compare = knownCompare;
10
- export const check = bridgeShape;
@@ -1,3 +0,0 @@
1
- export declare const methods: import("../../abi.js").CalldataMethod[];
2
- export declare const compare: (parsed: import("../../types.js").ParsedBridgeCall) => import("../../expect.js").CompareMask;
3
- export declare const check: (parsed: import("../../types.js").ParsedBridgeCall) => import("../../../errors/constants.js").BridgeErrorDefinition | undefined;
@@ -1,33 +0,0 @@
1
- import { BRIDGE_ERRORS, BridgeError } from '../../../errors/index.js';
2
- import { asBigint, asRecord, asString } from '../../abi.js';
3
- import { accountFromBytes32 } from '../../hex.js';
4
- import { knownCompare } from '../../expect.js';
5
- import { lifiBridgeMethod } from '../method.js';
6
- import { bridgeShape } from '../shape.js';
7
- const m0Data = { name: 'm0Data', kind: 'tuple', components: [
8
- { name: 'receiverAddress', kind: 'bytes', size: 32 }, { name: 'refundRecipient', kind: 'address' },
9
- { name: 'orderOwner', kind: 'address' }, { name: 'tokenOut', kind: 'bytes', size: 32 },
10
- { name: 'solver', kind: 'bytes', size: 32 }, { name: 'amountOut', kind: 'uint' },
11
- { name: 'fillDeadline', kind: 'uint' },
12
- ] };
13
- const fill = (parsed, args) => {
14
- const data = asRecord(args.m0Data);
15
- if ((parsed.destinationChainId ?? 0n) > 0xffffffffn)
16
- throw new BridgeError(BRIDGE_ERRORS.UNSUPPORTED_NON_EVM_M0_DESTINATION);
17
- const receiver = accountFromBytes32(asString(data.receiverAddress));
18
- if (receiver !== parsed.receiver)
19
- throw new BridgeError(BRIDGE_ERRORS.M0_RECEIVER_MISMATCH);
20
- if (asString(data.refundRecipient) !== receiver || asString(data.orderOwner) !== receiver) {
21
- throw new BridgeError(BRIDGE_ERRORS.M0_REFUND_RECIPIENT_MISMATCH);
22
- }
23
- parsed.receiver = receiver;
24
- parsed.outputToken = accountFromBytes32(asString(data.tokenOut));
25
- // Positive source-swap slippage scales amountOut up; the quoted amount remains its floor.
26
- parsed.minOutputAmount = asBigint(data.amountOut);
27
- };
28
- export const methods = [
29
- lifiBridgeMethod('startBridgeTokensViaM0', '0x65782c4b', [m0Data], false, fill),
30
- lifiBridgeMethod('swapAndStartBridgeTokensViaM0', '0xb9eaf86d', [m0Data], true, fill),
31
- ];
32
- export const compare = knownCompare;
33
- export const check = bridgeShape;
@@ -1,4 +0,0 @@
1
- import type { CalldataMethod } from '../../abi.js';
2
- export declare const methods: CalldataMethod[];
3
- export declare const compare: (parsed: import("../../types.js").ParsedBridgeCall) => import("../../expect.js").CompareMask;
4
- export declare const check: (parsed: import("../../types.js").ParsedBridgeCall) => import("../../../index.js").BridgeErrorDefinition | undefined;
@@ -1,10 +0,0 @@
1
- import { knownCompare } from '../../expect.js';
2
- import { bridgeShape } from '../shape.js';
3
- import { applyMayanData, mayanDataParam } from '../params.js';
4
- import { lifiBridgeMethod } from '../method.js';
5
- export const methods = [
6
- lifiBridgeMethod('startBridgeTokensViaMayan', '0xb4875292', [mayanDataParam], false, (parsed, args) => applyMayanData(parsed, args.mayanData)),
7
- lifiBridgeMethod('swapAndStartBridgeTokensViaMayan', '0x80c65808', [mayanDataParam], true, (parsed, args) => applyMayanData(parsed, args.mayanData)),
8
- ];
9
- export const compare = knownCompare;
10
- export const check = bridgeShape;
@@ -1,6 +0,0 @@
1
- import { type AbiParam, type AbiValue } from '../abi.js';
2
- import type { CalldataMethod } from '../abi.js';
3
- import type { ParsedBridgeCall } from '../types.js';
4
- export declare const lifiBridgeMethod: (name: string, selector: string, tail: AbiParam[], withSwap: boolean, fill?: (parsed: ParsedBridgeCall, args: {
5
- [key: string]: AbiValue;
6
- }) => void) => CalldataMethod;
@@ -1,16 +0,0 @@
1
- import { decodeCall } from '../abi.js';
2
- import { applyBridgeData, applyFirstSwap, bridgeDataParam, swapDataArrayParam } from './params.js';
3
- export const lifiBridgeMethod = (name, selector, tail, withSwap, fill) => ({
4
- name,
5
- selector,
6
- decode(data) {
7
- const params = [bridgeDataParam, ...(withSwap ? [swapDataArrayParam] : []), ...tail];
8
- const args = decodeCall(params, data);
9
- const parsed = applyBridgeData(name, args.bridgeData);
10
- if (withSwap) {
11
- applyFirstSwap(parsed, args.swapData);
12
- }
13
- fill?.(parsed, args);
14
- return parsed;
15
- },
16
- });
@@ -1,4 +0,0 @@
1
- import type { ParsedBridgeCall } from '../../types.js';
2
- export declare const methods: import("../../abi.js").CalldataMethod[];
3
- export declare const compare: (parsed: ParsedBridgeCall) => import("../../expect.js").CompareMask;
4
- export declare const check: (parsed: ParsedBridgeCall) => import("../../../errors/constants.js").BridgeErrorDefinition | undefined;
@@ -1,80 +0,0 @@
1
- import { BRIDGE_ERRORS, BridgeError } from '../../../errors/index.js';
2
- import { asBigint, asRecord, asString } from '../../abi.js';
3
- import { knownCompare } from '../../expect.js';
4
- import { LAYERZERO_CHAINS, NATIVE_TOKEN, isNative } from '../../protocols.js';
5
- import { lifiBridgeMethod } from '../method.js';
6
- import { bridgeShape } from '../shape.js';
7
- const polygon = (parsed) => {
8
- parsed.destinationChainId = 137n;
9
- parsed.minOutputAmount = parsed.bridgeAmount;
10
- if (isNative(parsed.bridgeToken)) {
11
- parsed.outputToken = '0x7ceb23fd6bc0add59e62ac25578270cff1b9f619';
12
- }
13
- else {
14
- parsed.outputTokenReference = { protocol: 'polygon', token: parsed.bridgeToken, destinationChainId: 137n };
15
- }
16
- };
17
- const gnosis = (parsed) => {
18
- parsed.destinationChainId = 100n;
19
- parsed.minOutputAmount = parsed.bridgeAmount;
20
- if (['0x6b175474e89094c44da98b954eedeac495271d0f', '0xdc035d45d973e3ec169d2276ddab16f1e407384f'].includes(parsed.bridgeToken)) {
21
- parsed.outputToken = NATIVE_TOKEN;
22
- }
23
- else if (isNative(parsed.bridgeToken)) {
24
- parsed.outputToken = '0x6a023ccd1ff6f2045c3309768ead9e68f978f6e1';
25
- }
26
- else {
27
- parsed.outputTokenReference = { protocol: 'gnosis', token: parsed.bridgeToken, destinationChainId: 100n };
28
- }
29
- };
30
- const megaETHData = { name: 'megaETHData', kind: 'tuple', components: [
31
- { name: 'assetIdOnL2', kind: 'address' }, { name: 'l2Gas', kind: 'uint' },
32
- { name: 'requiresDepositTo', kind: 'bool' },
33
- ] };
34
- const megaETH = (parsed, args) => {
35
- const data = asRecord(args.megaETHData);
36
- parsed.destinationChainId = 4326n;
37
- parsed.minOutputAmount = parsed.bridgeAmount;
38
- if (isNative(parsed.bridgeToken))
39
- parsed.outputToken = NATIVE_TOKEN;
40
- else if (data.requiresDepositTo === false) {
41
- const token = asString(data.assetIdOnL2);
42
- if (isNative(token))
43
- throw new BridgeError(BRIDGE_ERRORS.MISSING_MEGAETH_DESTINATION_TOKEN);
44
- parsed.outputToken = token;
45
- }
46
- // Custom depositTo bridges choose their remote token outside this calldata.
47
- };
48
- const supersetData = {
49
- name: 'supersetData', kind: 'tuple', components: [
50
- { name: 'path', kind: 'bytes' }, { name: 'amountOutMin', kind: 'uint' },
51
- { name: 'refundAddress', kind: 'address' }, { name: 'fallbackEoA', kind: 'address' },
52
- { name: 'deadline', kind: 'uint' }, { name: 'toEid', kind: 'uint' },
53
- { name: 'options', kind: 'bytes' }, { name: 'lzFee', kind: 'uint' },
54
- ],
55
- };
56
- const superset = (parsed, args) => {
57
- const data = asRecord(args.supersetData);
58
- const path = asString(data.path).slice(2);
59
- if (path.length < 64 || (path.length - 64) % 70 !== 0)
60
- throw new BridgeError(BRIDGE_ERRORS.INVALID_SUPERSET_OMNI_TOKEN_PATH);
61
- parsed.minOutputAmount = asBigint(data.amountOutMin);
62
- parsed.destinationChainRef = `layerzero:${asBigint(data.toEid)}`;
63
- parsed.destinationChainId = LAYERZERO_CHAINS[asBigint(data.toEid).toString()];
64
- parsed.outputTokenReference = {
65
- protocol: 'superset', tokenId: `0x${path.slice(-64)}`,
66
- destinationChainId: parsed.destinationChainId, destinationChainRef: parsed.destinationChainRef,
67
- };
68
- };
69
- export const methods = [
70
- lifiBridgeMethod('startBridgeTokensViaPolygonBridge', '0xaf62c7d6', [], false, polygon),
71
- lifiBridgeMethod('swapAndStartBridgeTokensViaPolygonBridge', '0xb4f37581', [], true, polygon),
72
- lifiBridgeMethod('startBridgeTokensViaGnosisBridge', '0xf66fe519', [], false, gnosis),
73
- lifiBridgeMethod('swapAndStartBridgeTokensViaGnosisBridge', '0x7bf96e0a', [], true, gnosis),
74
- lifiBridgeMethod('startBridgeTokensViaMegaETHBridge', '0x4213dfff', [megaETHData], false, megaETH),
75
- lifiBridgeMethod('swapAndStartBridgeTokensViaMegaETHBridge', '0x22256e89', [megaETHData], true, megaETH),
76
- lifiBridgeMethod('startBridgeTokensViaSuperset', '0x0691ff78', [supersetData], false, superset),
77
- lifiBridgeMethod('swapAndStartBridgeTokensViaSuperset', '0xf26e657f', [supersetData], true, superset),
78
- ];
79
- export const compare = knownCompare;
80
- export const check = bridgeShape;
@@ -1,30 +0,0 @@
1
- import { type AbiParam, type AbiValue } from '../abi.js';
2
- import type { ParsedBridgeCall } from '../types.js';
3
- export declare const bridgeDataParam: AbiParam;
4
- export declare const swapDataArrayParam: AbiParam;
5
- export declare const swapDataParam: AbiParam;
6
- export declare const acrossDataParam: AbiParam;
7
- export declare const stargateDataParam: AbiParam;
8
- export declare const relayDepositoryDataParam: AbiParam;
9
- export declare const mayanDataParam: AbiParam;
10
- export declare const gasZipDataParam: AbiParam;
11
- export declare const squidDataParam: AbiParam;
12
- export declare const acrossPackedParam: AbiParam;
13
- export declare const applyBridgeData: (method: string, raw: AbiValue) => ParsedBridgeCall;
14
- export declare const applyFirstSwap: (parsed: ParsedBridgeCall, raw: AbiValue) => void;
15
- export declare const applyAcrossData: (parsed: ParsedBridgeCall, raw: AbiValue) => void;
16
- export declare const applyStargateData: (parsed: ParsedBridgeCall, raw: AbiValue) => void;
17
- export declare const applyRelayDepositoryData: (parsed: ParsedBridgeCall, raw: AbiValue) => void;
18
- export declare const applyMayanData: (parsed: ParsedBridgeCall, raw: AbiValue) => void;
19
- export declare const applyGasZipData: (parsed: ParsedBridgeCall, raw: AbiValue) => void;
20
- export declare const applySquidData: (parsed: ParsedBridgeCall, raw: AbiValue) => void;
21
- export declare const polymerDataParam: AbiParam;
22
- export declare const lifiIntentDataParam: AbiParam;
23
- export declare const layerSwapDataParam: AbiParam;
24
- export declare const applyPolymerData: (parsed: ParsedBridgeCall, raw: AbiValue) => void;
25
- export declare const applyLifiIntentData: (parsed: ParsedBridgeCall, raw: AbiValue) => void;
26
- export declare const celerCircleDataParam: AbiParam;
27
- export declare const paxosDataParam: AbiParam;
28
- export declare const applyPaxosData: (parsed: ParsedBridgeCall, raw: AbiValue) => void;
29
- export declare const applyLayerSwapData: (parsed: ParsedBridgeCall, raw: AbiValue) => void;
30
- export declare const applyCelerCircleData: (parsed: ParsedBridgeCall, raw: AbiValue) => void;
@@ -1,370 +0,0 @@
1
- import { BRIDGE_ERRORS, BridgeError } from '../../errors/index.js';
2
- import { innerCallDiagnostics } from '../diagnostics.js';
3
- import { asArray, asBigint, asRecord, asString, } from '../abi.js';
4
- import { accountFromBytes32 } from '../hex.js';
5
- import { readMayanProtocol } from '../mayan/readProtocol.js';
6
- import { LAYERZERO_CHAINS, subtractFees } from '../protocols.js';
7
- const swapComponents = [
8
- { name: 'callTo', kind: 'address' },
9
- { name: 'approveTo', kind: 'address' },
10
- { name: 'sendingAssetId', kind: 'address' },
11
- { name: 'receivingAssetId', kind: 'address' },
12
- { name: 'fromAmount', kind: 'uint' },
13
- { name: 'callData', kind: 'bytes' },
14
- { name: 'requiresDeposit', kind: 'bool' },
15
- ];
16
- export const bridgeDataParam = {
17
- name: 'bridgeData',
18
- kind: 'tuple',
19
- components: [
20
- { name: 'transactionId', kind: 'bytes', size: 32 },
21
- { name: 'bridge', kind: 'string' },
22
- { name: 'integrator', kind: 'string' },
23
- { name: 'referrer', kind: 'address' },
24
- { name: 'sendingAssetId', kind: 'address' },
25
- { name: 'receiver', kind: 'address' },
26
- { name: 'minAmount', kind: 'uint' },
27
- { name: 'destinationChainId', kind: 'uint' },
28
- { name: 'hasSourceSwaps', kind: 'bool' },
29
- { name: 'hasDestinationCall', kind: 'bool' },
30
- ],
31
- };
32
- export const swapDataArrayParam = {
33
- name: 'swapData',
34
- kind: 'array',
35
- item: { name: 'swap', kind: 'tuple', components: swapComponents },
36
- };
37
- export const swapDataParam = {
38
- name: 'swapData',
39
- kind: 'tuple',
40
- components: swapComponents,
41
- };
42
- export const acrossDataParam = {
43
- name: 'acrossData',
44
- kind: 'tuple',
45
- components: [
46
- { name: 'receiverAddress', kind: 'bytes', size: 32 },
47
- { name: 'refundAddress', kind: 'bytes', size: 32 },
48
- { name: 'sendingAssetId', kind: 'bytes', size: 32 },
49
- { name: 'receivingAssetId', kind: 'bytes', size: 32 },
50
- { name: 'outputAmount', kind: 'uint' },
51
- { name: 'outputAmountMultiplier', kind: 'uint' },
52
- { name: 'exclusiveRelayer', kind: 'bytes', size: 32 },
53
- { name: 'quoteTimestamp', kind: 'uint' },
54
- { name: 'fillDeadline', kind: 'uint' },
55
- { name: 'exclusivityParameter', kind: 'uint' },
56
- { name: 'message', kind: 'bytes' },
57
- ],
58
- };
59
- export const stargateDataParam = {
60
- name: 'stargateData',
61
- kind: 'tuple',
62
- components: [
63
- { name: 'assetId', kind: 'uint' },
64
- {
65
- name: 'sendParams',
66
- kind: 'tuple',
67
- components: [
68
- { name: 'dstEid', kind: 'uint' },
69
- { name: 'to', kind: 'bytes', size: 32 },
70
- { name: 'amountLD', kind: 'uint' },
71
- { name: 'minAmountLD', kind: 'uint' },
72
- { name: 'extraOptions', kind: 'bytes' },
73
- { name: 'composeMsg', kind: 'bytes' },
74
- { name: 'oftCmd', kind: 'bytes' },
75
- ],
76
- },
77
- {
78
- name: 'fee',
79
- kind: 'tuple',
80
- components: [
81
- { name: 'nativeFee', kind: 'uint' },
82
- { name: 'lzTokenFee', kind: 'uint' },
83
- ],
84
- },
85
- { name: 'refundAddress', kind: 'address' },
86
- ],
87
- };
88
- export const relayDepositoryDataParam = {
89
- name: 'relayDepositoryData',
90
- kind: 'tuple',
91
- components: [
92
- { name: 'orderId', kind: 'bytes', size: 32 },
93
- { name: 'depositorAddress', kind: 'address' },
94
- ],
95
- };
96
- export const mayanDataParam = {
97
- name: 'mayanData',
98
- kind: 'tuple',
99
- components: [
100
- { name: 'nonEVMReceiver', kind: 'bytes', size: 32 },
101
- { name: 'mayanProtocol', kind: 'address' },
102
- { name: 'protocolData', kind: 'bytes' },
103
- { name: 'swapProtocol', kind: 'address' },
104
- { name: 'swapData', kind: 'bytes' },
105
- { name: 'middleToken', kind: 'address' },
106
- { name: 'minMiddleAmount', kind: 'uint' },
107
- { name: 'refundRecipient', kind: 'address' },
108
- { name: 'mayanAmountIn', kind: 'uint' },
109
- ],
110
- };
111
- export const gasZipDataParam = {
112
- name: 'gasZipData',
113
- kind: 'tuple',
114
- components: [
115
- { name: 'receiverAddress', kind: 'bytes', size: 32 },
116
- { name: 'destinationChains', kind: 'uint' },
117
- ],
118
- };
119
- export const squidDataParam = {
120
- name: 'squidData',
121
- kind: 'tuple',
122
- components: [
123
- { name: 'routeType', kind: 'uint' },
124
- { name: 'destinationChain', kind: 'string' },
125
- { name: 'destinationAddress', kind: 'string' },
126
- { name: 'bridgedTokenSymbol', kind: 'string' },
127
- { name: 'depositAssetId', kind: 'address' },
128
- {
129
- name: 'sourceCalls',
130
- kind: 'array',
131
- item: {
132
- name: 'call',
133
- kind: 'tuple',
134
- components: [
135
- { name: 'callType', kind: 'uint' },
136
- { name: 'target', kind: 'address' },
137
- { name: 'value', kind: 'uint' },
138
- { name: 'callData', kind: 'bytes' },
139
- { name: 'payload', kind: 'bytes' },
140
- ],
141
- },
142
- },
143
- { name: 'payload', kind: 'bytes' },
144
- { name: 'fee', kind: 'uint' },
145
- { name: 'enableExpress', kind: 'bool' },
146
- ],
147
- };
148
- export const acrossPackedParam = {
149
- name: 'parameters',
150
- kind: 'tuple',
151
- components: [
152
- { name: 'transactionId', kind: 'bytes', size: 8 },
153
- { name: 'receiver', kind: 'bytes', size: 32 },
154
- { name: 'depositor', kind: 'bytes', size: 32 },
155
- { name: 'destinationChainId', kind: 'uint' },
156
- { name: 'receivingAssetId', kind: 'bytes', size: 32 },
157
- { name: 'outputAmount', kind: 'uint' },
158
- { name: 'exclusiveRelayer', kind: 'bytes', size: 32 },
159
- { name: 'quoteTimestamp', kind: 'uint' },
160
- { name: 'fillDeadline', kind: 'uint' },
161
- { name: 'exclusivityParameter', kind: 'uint' },
162
- { name: 'message', kind: 'bytes' },
163
- ],
164
- };
165
- export const applyBridgeData = (method, raw) => {
166
- const data = asRecord(raw);
167
- return {
168
- aggregatorId: 'lifi',
169
- method,
170
- kind: 'bridge',
171
- sourceToken: asString(data.sendingAssetId),
172
- sourceAmount: asBigint(data.minAmount),
173
- bridgeToken: asString(data.sendingAssetId),
174
- bridgeAmount: asBigint(data.minAmount),
175
- destinationChainId: asBigint(data.destinationChainId),
176
- receiver: asString(data.receiver),
177
- bridgeReceiver: asString(data.receiver),
178
- referrer: asString(data.referrer),
179
- };
180
- };
181
- export const applyFirstSwap = (parsed, raw) => {
182
- const swaps = asArray(raw);
183
- const deposits = swaps.map(asRecord).filter((swap) => swap.requiresDeposit === true);
184
- const first = deposits[0] ?? swaps[0];
185
- if (!first) {
186
- return;
187
- }
188
- const swap = asRecord(first);
189
- parsed.sourceToken = asString(swap.sendingAssetId);
190
- if (deposits.some((deposit) => asString(deposit.sendingAssetId) !== parsed.sourceToken)) {
191
- throw new BridgeError(BRIDGE_ERRORS.MULTIPLE_SOURCE_ASSETS_ARE_NOT_SUPPORTED);
192
- }
193
- parsed.sourceAmount = deposits.length
194
- ? deposits.reduce((sum, deposit) => sum + asBigint(deposit.fromAmount), 0n)
195
- : asBigint(swap.fromAmount);
196
- };
197
- export const applyAcrossData = (parsed, raw) => {
198
- const data = asRecord(raw);
199
- parsed.receiver = accountFromBytes32(asString(data.receiverAddress));
200
- parsed.outputToken = accountFromBytes32(asString(data.receivingAssetId));
201
- parsed.minOutputAmount = asBigint(data.outputAmount);
202
- };
203
- export const applyStargateData = (parsed, raw) => {
204
- const send = asRecord(asRecord(raw).sendParams);
205
- parsed.receiver = accountFromBytes32(asString(send.to));
206
- parsed.minOutputAmount = asBigint(send.minAmountLD);
207
- };
208
- export const applyRelayDepositoryData = (parsed, raw) => {
209
- parsed.orderId = asString(asRecord(raw).orderId);
210
- };
211
- export const applyMayanData = (parsed, raw) => {
212
- const data = asRecord(raw);
213
- const receiver = accountFromBytes32(asString(data.nonEVMReceiver));
214
- if (!/^0x0*$/.test(receiver)) {
215
- parsed.receiver = receiver;
216
- }
217
- parsed.innerTarget = asString(data.mayanProtocol);
218
- parsed.diagnostics = innerCallDiagnostics(asString(data.protocolData), 'protocol');
219
- const protocol = readMayanProtocol(asString(data.protocolData), asBigint(data.minMiddleAmount) > 0n ? asBigint(data.minMiddleAmount) : parsed.bridgeAmount);
220
- if (!protocol)
221
- throw new BridgeError(BRIDGE_ERRORS.UNSUPPORTED_MAYAN_PROTOCOL_CALLDATA, parsed.diagnostics);
222
- const { sourceToken, sourceAmount, aggregatorId, method, kind, ...destination } = protocol;
223
- Object.assign(parsed, destination);
224
- };
225
- export const applyGasZipData = (parsed, raw) => {
226
- const data = asRecord(raw);
227
- parsed.receiver = accountFromBytes32(asString(data.receiverAddress));
228
- parsed.destinationChainRef = asBigint(data.destinationChains).toString();
229
- };
230
- export const applySquidData = (parsed, raw) => {
231
- const data = asRecord(raw);
232
- parsed.destinationChainRef = asString(data.destinationChain);
233
- parsed.receiver = asString(data.destinationAddress);
234
- parsed.sourceToken = asString(data.depositAssetId);
235
- };
236
- export const polymerDataParam = {
237
- name: 'polymerData',
238
- kind: 'tuple',
239
- components: [
240
- { name: 'polymerTokenFee', kind: 'uint' },
241
- { name: 'maxCCTPFee', kind: 'uint' },
242
- { name: 'nonEVMReceiver', kind: 'bytes', size: 32 },
243
- { name: 'solanaReceiverATA', kind: 'bytes', size: 32 },
244
- { name: 'minFinalityThreshold', kind: 'uint' },
245
- { name: 'refundRecipient', kind: 'address' },
246
- { name: 'hookData', kind: 'bytes' },
247
- ],
248
- };
249
- export const lifiIntentDataParam = {
250
- name: 'lifiIntentData',
251
- kind: 'tuple',
252
- components: [
253
- { name: 'dstCallReceiver', kind: 'bytes', size: 32 },
254
- { name: 'recipient', kind: 'bytes', size: 32 },
255
- { name: 'depositAndRefundAddress', kind: 'address' },
256
- { name: 'nonce', kind: 'uint' },
257
- { name: 'expires', kind: 'uint' },
258
- { name: 'fillDeadline', kind: 'uint' },
259
- { name: 'inputOracle', kind: 'address' },
260
- { name: 'outputOracle', kind: 'bytes', size: 32 },
261
- { name: 'outputSettler', kind: 'bytes', size: 32 },
262
- { name: 'outputToken', kind: 'bytes', size: 32 },
263
- { name: 'outputAmountMultiplier', kind: 'uint' },
264
- { name: 'dstCallSwapData', kind: 'array', item: swapDataParam },
265
- { name: 'outputContext', kind: 'bytes' },
266
- ],
267
- };
268
- export const layerSwapDataParam = {
269
- name: 'layerSwapData',
270
- kind: 'tuple',
271
- components: [
272
- { name: 'requestId', kind: 'bytes', size: 32 },
273
- { name: 'depositoryReceiver', kind: 'address' },
274
- { name: 'refundRecipient', kind: 'address' },
275
- { name: 'nonEVMReceiver', kind: 'bytes', size: 32 },
276
- { name: 'signature', kind: 'bytes' },
277
- { name: 'deadline', kind: 'uint' },
278
- ],
279
- };
280
- export const applyPolymerData = (parsed, raw) => {
281
- const data = asRecord(raw);
282
- parsed.outputTokenReference = { protocol: 'cctp', destinationChainId: parsed.destinationChainId };
283
- parsed.minOutputAmount = subtractFees(parsed.bridgeAmount ?? 0n, asBigint(data.polymerTokenFee), asBigint(data.maxCCTPFee));
284
- if (asString(data.hookData) !== '0x') {
285
- parsed.destinationCallData = asString(data.hookData);
286
- delete parsed.receiver;
287
- delete parsed.outputTokenReference;
288
- delete parsed.minOutputAmount;
289
- }
290
- };
291
- export const applyLifiIntentData = (parsed, raw) => {
292
- const data = asRecord(raw);
293
- parsed.receiver = accountFromBytes32(asString(data.recipient));
294
- parsed.outputToken = accountFromBytes32(asString(data.outputToken));
295
- parsed.minOutputAmount = (parsed.bridgeAmount ?? 0n) * asBigint(data.outputAmountMultiplier) / 10n ** 18n;
296
- if (asArray(data.dstCallSwapData).length) {
297
- parsed.hasDestinationCall = true;
298
- parsed.bridgeReceiver = accountFromBytes32(asString(data.dstCallReceiver));
299
- // An arbitrary dstCallReceiver is not proof of a genuine ReceiverOIF execution.
300
- delete parsed.receiver;
301
- delete parsed.outputToken;
302
- delete parsed.minOutputAmount;
303
- }
304
- parsed.orderId = asBigint(data.nonce).toString(16).padStart(64, '0');
305
- parsed.orderId = `0x${parsed.orderId}`;
306
- };
307
- export const celerCircleDataParam = {
308
- name: 'celerCircleData',
309
- kind: 'tuple',
310
- components: [
311
- { name: 'maxFee', kind: 'uint' },
312
- { name: 'minFinalityThreshold', kind: 'uint' },
313
- ],
314
- };
315
- const paxosRouteParam = {
316
- name: 'route',
317
- kind: 'tuple',
318
- components: [
319
- { name: 'destEID', kind: 'uint' },
320
- { name: 'offerAsset', kind: 'address' },
321
- { name: 'wantAsset', kind: 'address' },
322
- ],
323
- };
324
- export const paxosDataParam = {
325
- name: 'paxosData',
326
- kind: 'tuple',
327
- components: [
328
- {
329
- name: 'quote',
330
- kind: 'tuple',
331
- components: [
332
- paxosRouteParam,
333
- { name: 'offerAmount', kind: 'uint' },
334
- { name: 'receiver', kind: 'address' },
335
- { name: 'protocolFee', kind: 'uint' },
336
- { name: 'integratorFee', kind: 'uint' },
337
- { name: 'integratorFeeReceiver', kind: 'address' },
338
- { name: 'distributorCode', kind: 'bytes', size: 32 },
339
- { name: 'deadline', kind: 'uint' },
340
- { name: 'salt', kind: 'bytes', size: 32 },
341
- ],
342
- },
343
- { name: 'signature', kind: 'bytes' },
344
- { name: 'nativeFee', kind: 'uint' },
345
- { name: 'refundRecipient', kind: 'address' },
346
- ],
347
- };
348
- export const applyPaxosData = (parsed, raw) => {
349
- const quote = asRecord(asRecord(raw).quote);
350
- const route = asRecord(quote.route);
351
- parsed.destinationChainRef = `layerzero:${asBigint(route.destEID)}`;
352
- parsed.destinationChainId = LAYERZERO_CHAINS[asBigint(route.destEID).toString()];
353
- parsed.outputToken = asString(route.wantAsset);
354
- const offerAmount = asBigint(quote.offerAmount);
355
- parsed.minOutputAmount = subtractFees(offerAmount, asBigint(quote.protocolFee), asBigint(quote.integratorFee));
356
- const receiver = asString(quote.receiver);
357
- parsed.receiver = receiver;
358
- };
359
- export const applyLayerSwapData = (parsed, raw) => {
360
- const data = asRecord(raw);
361
- parsed.orderId = asString(data.requestId);
362
- // The LayerSwap signature binds bridgeData.receiver to this request ID.
363
- };
364
- export const applyCelerCircleData = (parsed, raw) => {
365
- parsed.outputTokenReference = { protocol: 'cctp', destinationChainId: parsed.destinationChainId };
366
- parsed.outputAmountReference = {
367
- kind: 'fees', amount: parsed.bridgeAmount ?? 0n,
368
- token: parsed.outputTokenReference, maxFee: asBigint(asRecord(raw).maxFee),
369
- };
370
- };
@@ -1,4 +0,0 @@
1
- import type { CalldataMethod } from '../../abi.js';
2
- export declare const methods: CalldataMethod[];
3
- export declare const compare: (parsed: import("../../types.js").ParsedBridgeCall) => import("../../expect.js").CompareMask;
4
- export declare const check: (parsed: import("../../types.js").ParsedBridgeCall) => import("../../../index.js").BridgeErrorDefinition | undefined;
@@ -1,10 +0,0 @@
1
- import { knownCompare } from '../../expect.js';
2
- import { bridgeShape } from '../shape.js';
3
- import { lifiBridgeMethod } from '../method.js';
4
- import { applyPaxosData, paxosDataParam } from '../params.js';
5
- export const methods = [
6
- lifiBridgeMethod('startBridgeTokensViaPaxosTransit', '0x5080ffe2', [paxosDataParam], false, (parsed, args) => applyPaxosData(parsed, args.paxosData)),
7
- lifiBridgeMethod('swapAndStartBridgeTokensViaPaxosTransit', '0x637f1d04', [paxosDataParam], true, (parsed, args) => applyPaxosData(parsed, args.paxosData)),
8
- ];
9
- export const compare = knownCompare;
10
- export const check = bridgeShape;
@@ -1,4 +0,0 @@
1
- import type { CalldataMethod } from '../../abi.js';
2
- export declare const methods: CalldataMethod[];
3
- export declare const compare: (parsed: import("../../types.js").ParsedBridgeCall) => import("../../expect.js").CompareMask;
4
- export declare const check: (parsed: import("../../types.js").ParsedBridgeCall) => import("../../../index.js").BridgeErrorDefinition | undefined;
@@ -1,10 +0,0 @@
1
- import { knownCompare } from '../../expect.js';
2
- import { bridgeShape } from '../shape.js';
3
- import { lifiBridgeMethod } from '../method.js';
4
- import { applyPolymerData, polymerDataParam } from '../params.js';
5
- export const methods = [
6
- lifiBridgeMethod('startBridgeTokensViaPolymerCCTP', '0xf434d6ca', [polymerDataParam], false, (parsed, args) => applyPolymerData(parsed, args.polymerData)),
7
- lifiBridgeMethod('swapAndStartBridgeTokensViaPolymerCCTP', '0x17917a4e', [polymerDataParam], true, (parsed, args) => applyPolymerData(parsed, args.polymerData)),
8
- ];
9
- export const compare = knownCompare;
10
- export const check = bridgeShape;
@@ -1,6 +0,0 @@
1
- import type { CalldataMethod } from '../../abi.js';
2
- import type { CompareMask } from '../../expect.js';
3
- import type { ParsedBridgeCall } from '../../types.js';
4
- export declare const methods: CalldataMethod[];
5
- export declare const compare: (parsed: ParsedBridgeCall) => CompareMask;
6
- export declare const check: (parsed: ParsedBridgeCall) => import("../../../index.js").BridgeErrorDefinition | undefined;
@@ -1,15 +0,0 @@
1
- import { bridgeShape } from '../shape.js';
2
- import { applyRelayDepositoryData, relayDepositoryDataParam } from '../params.js';
3
- import { lifiBridgeMethod } from '../method.js';
4
- export const methods = [
5
- lifiBridgeMethod('startBridgeTokensViaRelayDepository', '0x092e8fa4', [relayDepositoryDataParam], false, (parsed, args) => applyRelayDepositoryData(parsed, args.relayDepositoryData)),
6
- lifiBridgeMethod('swapAndStartBridgeTokensViaRelayDepository', '0xa3443faa', [relayDepositoryDataParam], true, (parsed, args) => applyRelayDepositoryData(parsed, args.relayDepositoryData)),
7
- ];
8
- export const compare = (parsed) => ({
9
- fromToken: parsed.sourceToken !== undefined,
10
- fromAmount: parsed.sourceAmount !== undefined,
11
- toToken: false,
12
- toAmount: false,
13
- receiver: true,
14
- });
15
- export const check = bridgeShape;
@@ -1,4 +0,0 @@
1
- import type { BridgeErrorDefinition } from '../../errors/index.js';
2
- import type { ParsedBridgeCall } from '../types.js';
3
- export declare const bridgeShape: (parsed: ParsedBridgeCall) => BridgeErrorDefinition | undefined;
4
- export declare const swapShape: (parsed: ParsedBridgeCall) => BridgeErrorDefinition | undefined;