@atomiqlabs/chain-evm 1.0.0-dev.22

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 (146) hide show
  1. package/LICENSE +201 -0
  2. package/dist/chains/citrea/CitreaChainType.d.ts +13 -0
  3. package/dist/chains/citrea/CitreaChainType.js +2 -0
  4. package/dist/chains/citrea/CitreaInitializer.d.ts +30 -0
  5. package/dist/chains/citrea/CitreaInitializer.js +120 -0
  6. package/dist/evm/btcrelay/BtcRelayAbi.d.ts +198 -0
  7. package/dist/evm/btcrelay/BtcRelayAbi.js +261 -0
  8. package/dist/evm/btcrelay/BtcRelayTypechain.d.ts +172 -0
  9. package/dist/evm/btcrelay/BtcRelayTypechain.js +2 -0
  10. package/dist/evm/btcrelay/EVMBtcRelay.d.ts +188 -0
  11. package/dist/evm/btcrelay/EVMBtcRelay.js +419 -0
  12. package/dist/evm/btcrelay/headers/EVMBtcHeader.d.ts +33 -0
  13. package/dist/evm/btcrelay/headers/EVMBtcHeader.js +84 -0
  14. package/dist/evm/btcrelay/headers/EVMBtcStoredHeader.d.ts +56 -0
  15. package/dist/evm/btcrelay/headers/EVMBtcStoredHeader.js +123 -0
  16. package/dist/evm/chain/EVMChainInterface.d.ts +51 -0
  17. package/dist/evm/chain/EVMChainInterface.js +90 -0
  18. package/dist/evm/chain/EVMModule.d.ts +9 -0
  19. package/dist/evm/chain/EVMModule.js +13 -0
  20. package/dist/evm/chain/modules/ERC20Abi.d.ts +168 -0
  21. package/dist/evm/chain/modules/ERC20Abi.js +225 -0
  22. package/dist/evm/chain/modules/EVMAddresses.d.ts +9 -0
  23. package/dist/evm/chain/modules/EVMAddresses.js +26 -0
  24. package/dist/evm/chain/modules/EVMBlocks.d.ts +20 -0
  25. package/dist/evm/chain/modules/EVMBlocks.js +64 -0
  26. package/dist/evm/chain/modules/EVMEvents.d.ts +36 -0
  27. package/dist/evm/chain/modules/EVMEvents.js +122 -0
  28. package/dist/evm/chain/modules/EVMFees.d.ts +35 -0
  29. package/dist/evm/chain/modules/EVMFees.js +73 -0
  30. package/dist/evm/chain/modules/EVMSignatures.d.ts +29 -0
  31. package/dist/evm/chain/modules/EVMSignatures.js +68 -0
  32. package/dist/evm/chain/modules/EVMTokens.d.ts +49 -0
  33. package/dist/evm/chain/modules/EVMTokens.js +105 -0
  34. package/dist/evm/chain/modules/EVMTransactions.d.ts +89 -0
  35. package/dist/evm/chain/modules/EVMTransactions.js +216 -0
  36. package/dist/evm/contract/EVMContractBase.d.ts +22 -0
  37. package/dist/evm/contract/EVMContractBase.js +34 -0
  38. package/dist/evm/contract/EVMContractModule.d.ts +8 -0
  39. package/dist/evm/contract/EVMContractModule.js +11 -0
  40. package/dist/evm/contract/modules/EVMContractEvents.d.ts +42 -0
  41. package/dist/evm/contract/modules/EVMContractEvents.js +75 -0
  42. package/dist/evm/events/EVMChainEvents.d.ts +22 -0
  43. package/dist/evm/events/EVMChainEvents.js +67 -0
  44. package/dist/evm/events/EVMChainEventsBrowser.d.ts +86 -0
  45. package/dist/evm/events/EVMChainEventsBrowser.js +294 -0
  46. package/dist/evm/spv_swap/EVMSpvVaultContract.d.ts +64 -0
  47. package/dist/evm/spv_swap/EVMSpvVaultContract.js +410 -0
  48. package/dist/evm/spv_swap/EVMSpvVaultData.d.ts +38 -0
  49. package/dist/evm/spv_swap/EVMSpvVaultData.js +159 -0
  50. package/dist/evm/spv_swap/EVMSpvWithdrawalData.d.ts +19 -0
  51. package/dist/evm/spv_swap/EVMSpvWithdrawalData.js +55 -0
  52. package/dist/evm/spv_swap/SpvVaultContractAbi.d.ts +91 -0
  53. package/dist/evm/spv_swap/SpvVaultContractAbi.js +849 -0
  54. package/dist/evm/spv_swap/SpvVaultContractTypechain.d.ts +450 -0
  55. package/dist/evm/spv_swap/SpvVaultContractTypechain.js +2 -0
  56. package/dist/evm/swaps/EVMSwapContract.d.ts +192 -0
  57. package/dist/evm/swaps/EVMSwapContract.js +373 -0
  58. package/dist/evm/swaps/EVMSwapData.d.ts +64 -0
  59. package/dist/evm/swaps/EVMSwapData.js +254 -0
  60. package/dist/evm/swaps/EVMSwapModule.d.ts +9 -0
  61. package/dist/evm/swaps/EVMSwapModule.js +11 -0
  62. package/dist/evm/swaps/EscrowManagerAbi.d.ts +120 -0
  63. package/dist/evm/swaps/EscrowManagerAbi.js +985 -0
  64. package/dist/evm/swaps/EscrowManagerTypechain.d.ts +475 -0
  65. package/dist/evm/swaps/EscrowManagerTypechain.js +2 -0
  66. package/dist/evm/swaps/handlers/IHandler.d.ts +13 -0
  67. package/dist/evm/swaps/handlers/IHandler.js +2 -0
  68. package/dist/evm/swaps/handlers/claim/ClaimHandlers.d.ts +10 -0
  69. package/dist/evm/swaps/handlers/claim/ClaimHandlers.js +13 -0
  70. package/dist/evm/swaps/handlers/claim/HashlockClaimHandler.d.ts +20 -0
  71. package/dist/evm/swaps/handlers/claim/HashlockClaimHandler.js +39 -0
  72. package/dist/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +24 -0
  73. package/dist/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +59 -0
  74. package/dist/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +25 -0
  75. package/dist/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +51 -0
  76. package/dist/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +21 -0
  77. package/dist/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +28 -0
  78. package/dist/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +48 -0
  79. package/dist/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +63 -0
  80. package/dist/evm/swaps/handlers/refund/TimelockRefundHandler.d.ts +17 -0
  81. package/dist/evm/swaps/handlers/refund/TimelockRefundHandler.js +28 -0
  82. package/dist/evm/swaps/modules/EVMLpVault.d.ts +69 -0
  83. package/dist/evm/swaps/modules/EVMLpVault.js +131 -0
  84. package/dist/evm/swaps/modules/EVMSwapClaim.d.ts +53 -0
  85. package/dist/evm/swaps/modules/EVMSwapClaim.js +101 -0
  86. package/dist/evm/swaps/modules/EVMSwapInit.d.ts +88 -0
  87. package/dist/evm/swaps/modules/EVMSwapInit.js +241 -0
  88. package/dist/evm/swaps/modules/EVMSwapRefund.d.ts +62 -0
  89. package/dist/evm/swaps/modules/EVMSwapRefund.js +132 -0
  90. package/dist/evm/typechain/common.d.ts +50 -0
  91. package/dist/evm/typechain/common.js +2 -0
  92. package/dist/evm/wallet/EVMSigner.d.ts +9 -0
  93. package/dist/evm/wallet/EVMSigner.js +16 -0
  94. package/dist/index.d.ts +37 -0
  95. package/dist/index.js +53 -0
  96. package/dist/utils/Utils.d.ts +15 -0
  97. package/dist/utils/Utils.js +71 -0
  98. package/package.json +37 -0
  99. package/src/chains/citrea/CitreaChainType.ts +28 -0
  100. package/src/chains/citrea/CitreaInitializer.ts +167 -0
  101. package/src/evm/btcrelay/BtcRelayAbi.ts +258 -0
  102. package/src/evm/btcrelay/BtcRelayTypechain.ts +371 -0
  103. package/src/evm/btcrelay/EVMBtcRelay.ts +517 -0
  104. package/src/evm/btcrelay/headers/EVMBtcHeader.ts +110 -0
  105. package/src/evm/btcrelay/headers/EVMBtcStoredHeader.ts +153 -0
  106. package/src/evm/chain/EVMChainInterface.ts +157 -0
  107. package/src/evm/chain/EVMModule.ts +21 -0
  108. package/src/evm/chain/modules/ERC20Abi.ts +222 -0
  109. package/src/evm/chain/modules/EVMAddresses.ts +24 -0
  110. package/src/evm/chain/modules/EVMBlocks.ts +75 -0
  111. package/src/evm/chain/modules/EVMEvents.ts +139 -0
  112. package/src/evm/chain/modules/EVMFees.ts +105 -0
  113. package/src/evm/chain/modules/EVMSignatures.ts +76 -0
  114. package/src/evm/chain/modules/EVMTokens.ts +115 -0
  115. package/src/evm/chain/modules/EVMTransactions.ts +246 -0
  116. package/src/evm/contract/EVMContractBase.ts +63 -0
  117. package/src/evm/contract/EVMContractModule.ts +16 -0
  118. package/src/evm/contract/modules/EVMContractEvents.ts +102 -0
  119. package/src/evm/events/EVMChainEvents.ts +81 -0
  120. package/src/evm/events/EVMChainEventsBrowser.ts +390 -0
  121. package/src/evm/spv_swap/EVMSpvVaultContract.ts +533 -0
  122. package/src/evm/spv_swap/EVMSpvVaultData.ts +201 -0
  123. package/src/evm/spv_swap/EVMSpvWithdrawalData.ts +70 -0
  124. package/src/evm/spv_swap/SpvVaultContractAbi.ts +846 -0
  125. package/src/evm/spv_swap/SpvVaultContractTypechain.ts +685 -0
  126. package/src/evm/swaps/EVMSwapContract.ts +590 -0
  127. package/src/evm/swaps/EVMSwapData.ts +367 -0
  128. package/src/evm/swaps/EVMSwapModule.ts +16 -0
  129. package/src/evm/swaps/EscrowManagerAbi.ts +982 -0
  130. package/src/evm/swaps/EscrowManagerTypechain.ts +723 -0
  131. package/src/evm/swaps/handlers/IHandler.ts +17 -0
  132. package/src/evm/swaps/handlers/claim/ClaimHandlers.ts +20 -0
  133. package/src/evm/swaps/handlers/claim/HashlockClaimHandler.ts +47 -0
  134. package/src/evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +82 -0
  135. package/src/evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +76 -0
  136. package/src/evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +46 -0
  137. package/src/evm/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +115 -0
  138. package/src/evm/swaps/handlers/refund/TimelockRefundHandler.ts +38 -0
  139. package/src/evm/swaps/modules/EVMLpVault.ts +153 -0
  140. package/src/evm/swaps/modules/EVMSwapClaim.ts +141 -0
  141. package/src/evm/swaps/modules/EVMSwapInit.ts +292 -0
  142. package/src/evm/swaps/modules/EVMSwapRefund.ts +198 -0
  143. package/src/evm/typechain/common.ts +131 -0
  144. package/src/evm/wallet/EVMSigner.ts +23 -0
  145. package/src/index.ts +44 -0
  146. package/src/utils/Utils.ts +81 -0
package/dist/index.js ADDED
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./evm/btcrelay/headers/EVMBtcHeader"), exports);
18
+ __exportStar(require("./evm/btcrelay/headers/EVMBtcStoredHeader"), exports);
19
+ __exportStar(require("./evm/btcrelay/EVMBtcRelay"), exports);
20
+ __exportStar(require("./evm/chain/EVMChainInterface"), exports);
21
+ __exportStar(require("./evm/chain/EVMModule"), exports);
22
+ __exportStar(require("./evm/chain/modules/EVMAddresses"), exports);
23
+ __exportStar(require("./evm/chain/modules/EVMBlocks"), exports);
24
+ __exportStar(require("./evm/chain/modules/EVMEvents"), exports);
25
+ __exportStar(require("./evm/chain/modules/EVMFees"), exports);
26
+ __exportStar(require("./evm/chain/modules/EVMSignatures"), exports);
27
+ __exportStar(require("./evm/chain/modules/EVMTokens"), exports);
28
+ __exportStar(require("./evm/chain/modules/EVMTransactions"), exports);
29
+ __exportStar(require("./evm/contract/modules/EVMContractEvents"), exports);
30
+ __exportStar(require("./evm/contract/EVMContractBase"), exports);
31
+ __exportStar(require("./evm/contract/EVMContractModule"), exports);
32
+ __exportStar(require("./evm/events/EVMChainEventsBrowser"), exports);
33
+ __exportStar(require("./evm/spv_swap/EVMSpvVaultContract"), exports);
34
+ __exportStar(require("./evm/spv_swap/EVMSpvWithdrawalData"), exports);
35
+ __exportStar(require("./evm/spv_swap/EVMSpvVaultData"), exports);
36
+ __exportStar(require("./evm/swaps/EVMSwapContract"), exports);
37
+ __exportStar(require("./evm/swaps/EVMSwapData"), exports);
38
+ __exportStar(require("./evm/swaps/EVMSwapModule"), exports);
39
+ __exportStar(require("./evm/swaps/modules/EVMLpVault"), exports);
40
+ __exportStar(require("./evm/swaps/modules/EVMSwapInit"), exports);
41
+ __exportStar(require("./evm/swaps/modules/EVMSwapClaim"), exports);
42
+ __exportStar(require("./evm/swaps/modules/EVMSwapRefund"), exports);
43
+ __exportStar(require("./evm/swaps/handlers/IHandler"), exports);
44
+ __exportStar(require("./evm/swaps/handlers/refund/TimelockRefundHandler"), exports);
45
+ __exportStar(require("./evm/swaps/handlers/claim/ClaimHandlers"), exports);
46
+ __exportStar(require("./evm/swaps/handlers/claim/HashlockClaimHandler"), exports);
47
+ __exportStar(require("./evm/swaps/handlers/claim/btc/IBitcoinClaimHandler"), exports);
48
+ __exportStar(require("./evm/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler"), exports);
49
+ __exportStar(require("./evm/swaps/handlers/claim/btc/BitcoinOutputClaimHandler"), exports);
50
+ __exportStar(require("./evm/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler"), exports);
51
+ __exportStar(require("./evm/wallet/EVMSigner"), exports);
52
+ __exportStar(require("./chains/citrea/CitreaInitializer"), exports);
53
+ __exportStar(require("./chains/citrea/CitreaChainType"), exports);
@@ -0,0 +1,15 @@
1
+ export type LoggerType = {
2
+ debug: (msg: string, ...args: any[]) => void;
3
+ info: (msg: string, ...args: any[]) => void;
4
+ warn: (msg: string, ...args: any[]) => void;
5
+ error: (msg: string, ...args: any[]) => void;
6
+ };
7
+ export declare function timeoutPromise(timeoutMillis: number, abortSignal?: AbortSignal): Promise<void>;
8
+ export declare function onceAsync<T>(executor: () => Promise<T>): () => Promise<T>;
9
+ export declare function getLogger(prefix: string): LoggerType;
10
+ export declare function tryWithRetries<T>(func: () => Promise<T>, retryPolicy?: {
11
+ maxRetries?: number;
12
+ delay?: number;
13
+ exponential?: boolean;
14
+ }, errorAllowed?: (e: any) => boolean, abortSignal?: AbortSignal): Promise<T>;
15
+ export declare function uint32ReverseEndianness(value: number): number;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.uint32ReverseEndianness = exports.tryWithRetries = exports.getLogger = exports.onceAsync = exports.timeoutPromise = void 0;
4
+ function timeoutPromise(timeoutMillis, abortSignal) {
5
+ return new Promise((resolve, reject) => {
6
+ const timeout = setTimeout(resolve, timeoutMillis);
7
+ if (abortSignal != null)
8
+ abortSignal.addEventListener("abort", () => {
9
+ clearTimeout(timeout);
10
+ reject(new Error("Aborted"));
11
+ });
12
+ });
13
+ }
14
+ exports.timeoutPromise = timeoutPromise;
15
+ function onceAsync(executor) {
16
+ let promise;
17
+ return () => {
18
+ if (promise == null) {
19
+ promise = executor();
20
+ return promise;
21
+ }
22
+ else {
23
+ return promise.catch(() => promise = executor());
24
+ }
25
+ };
26
+ }
27
+ exports.onceAsync = onceAsync;
28
+ function getLogger(prefix) {
29
+ return {
30
+ debug: (msg, ...args) => global.atomiqLogLevel >= 3 && console.debug(prefix + msg, ...args),
31
+ info: (msg, ...args) => global.atomiqLogLevel >= 2 && console.info(prefix + msg, ...args),
32
+ warn: (msg, ...args) => (global.atomiqLogLevel == null || global.atomiqLogLevel >= 1) && console.warn(prefix + msg, ...args),
33
+ error: (msg, ...args) => (global.atomiqLogLevel == null || global.atomiqLogLevel >= 0) && console.error(prefix + msg, ...args)
34
+ };
35
+ }
36
+ exports.getLogger = getLogger;
37
+ const logger = getLogger("Utils: ");
38
+ async function tryWithRetries(func, retryPolicy, errorAllowed, abortSignal) {
39
+ retryPolicy = retryPolicy || {};
40
+ retryPolicy.maxRetries = retryPolicy.maxRetries || 5;
41
+ retryPolicy.delay = retryPolicy.delay || 500;
42
+ retryPolicy.exponential = retryPolicy.exponential == null ? true : retryPolicy.exponential;
43
+ let err = null;
44
+ for (let i = 0; i < retryPolicy.maxRetries; i++) {
45
+ try {
46
+ const resp = await func();
47
+ return resp;
48
+ }
49
+ catch (e) {
50
+ if (errorAllowed != null && errorAllowed(e))
51
+ throw e;
52
+ err = e;
53
+ logger.error("tryWithRetries(): error on try number: " + i, e);
54
+ }
55
+ if (abortSignal != null && abortSignal.aborted)
56
+ throw new Error("Aborted");
57
+ if (i !== retryPolicy.maxRetries - 1) {
58
+ await timeoutPromise(retryPolicy.exponential ? retryPolicy.delay * Math.pow(2, i) : retryPolicy.delay, abortSignal);
59
+ }
60
+ }
61
+ throw err;
62
+ }
63
+ exports.tryWithRetries = tryWithRetries;
64
+ function uint32ReverseEndianness(value) {
65
+ const valueBN = BigInt(value);
66
+ return Number(((valueBN & 0xffn) << 24n) |
67
+ ((valueBN & 0xff00n) << 8n) |
68
+ ((valueBN >> 8n) & 0xff00n) |
69
+ ((valueBN >> 24n) & 0xffn));
70
+ }
71
+ exports.uint32ReverseEndianness = uint32ReverseEndianness;
package/package.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "name": "@atomiqlabs/chain-evm",
3
+ "version": "1.0.0-dev.22",
4
+ "description": "EVM specific base implementation",
5
+ "main": "./dist/index.js",
6
+ "types:": "./dist/index.d.ts",
7
+ "scripts": {
8
+ "test": "echo \"Error: no test specified\" && exit 1"
9
+ },
10
+ "files": [
11
+ "/dist",
12
+ "/src"
13
+ ],
14
+ "keywords": [
15
+ "EVM",
16
+ "Ethereum",
17
+ "Bitcoin",
18
+ "Cross-chain",
19
+ "Cryptocurrency",
20
+ "Bridge",
21
+ "Trustless"
22
+ ],
23
+ "author": "adambor",
24
+ "license": "Apache-2.0",
25
+ "dependencies": {
26
+ "@atomiqlabs/base": "^10.0.0-dev.1",
27
+ "@noble/hashes": "^1.8.0",
28
+ "@scure/btc-signer": "1.6.0",
29
+ "buffer": "6.0.3"
30
+ },
31
+ "peerDependencies": {
32
+ "ethers": "^6.15.0"
33
+ },
34
+ "devDependencies": {
35
+ "typescript": "^5.8.3"
36
+ }
37
+ }
@@ -0,0 +1,28 @@
1
+ import {ChainType} from "@atomiqlabs/base";
2
+ import {EVMPreFetchVerification} from "../../evm/swaps/modules/EVMSwapInit";
3
+ import {EVMTx} from "../../evm/chain/modules/EVMTransactions";
4
+ import {EVMSigner} from "../../evm/wallet/EVMSigner";
5
+ import {EVMSwapData} from "../../evm/swaps/EVMSwapData";
6
+ import {EVMSwapContract} from "../../evm/swaps/EVMSwapContract";
7
+ import {EVMChainInterface} from "../../evm/chain/EVMChainInterface";
8
+ import {EVMChainEventsBrowser} from "../../evm/events/EVMChainEventsBrowser";
9
+ import {EVMBtcRelay} from "../../evm/btcrelay/EVMBtcRelay";
10
+ import { EVMSpvVaultData } from "../../evm/spv_swap/EVMSpvVaultData";
11
+ import { EVMSpvWithdrawalData } from "../../evm/spv_swap/EVMSpvWithdrawalData";
12
+ import {EVMSpvVaultContract} from "../../evm/spv_swap/EVMSpvVaultContract";
13
+
14
+ export type CitreaChainType = ChainType<
15
+ "CITREA",
16
+ never,
17
+ EVMPreFetchVerification,
18
+ EVMTx,
19
+ EVMSigner,
20
+ EVMSwapData,
21
+ EVMSwapContract<"CITREA">,
22
+ EVMChainInterface<"CITREA", 5115>,
23
+ EVMChainEventsBrowser,
24
+ EVMBtcRelay<any>,
25
+ EVMSpvVaultData,
26
+ EVMSpvWithdrawalData,
27
+ EVMSpvVaultContract<"CITREA">
28
+ >;
@@ -0,0 +1,167 @@
1
+ import {BaseTokenType, BitcoinNetwork, BitcoinRpc, ChainData, ChainInitializer, ChainSwapType} from "@atomiqlabs/base";
2
+ import {JsonRpcApiProvider, JsonRpcProvider} from "ethers";
3
+ import {EVMChainInterface, EVMRetryPolicy} from "../../evm/chain/EVMChainInterface";
4
+ import {EVMFees} from "../../evm/chain/modules/EVMFees";
5
+ import {CitreaChainType} from "./CitreaChainType";
6
+ import {EVMBtcRelay} from "../../evm/btcrelay/EVMBtcRelay";
7
+ import {EVMSwapContract} from "../../evm/swaps/EVMSwapContract";
8
+ import {EVMSpvVaultContract} from "../../evm/spv_swap/EVMSpvVaultContract";
9
+ import {EVMChainEventsBrowser} from "../../evm/events/EVMChainEventsBrowser";
10
+ import {EVMSwapData} from "../../evm/swaps/EVMSwapData";
11
+ import {EVMSpvVaultData} from "../../evm/spv_swap/EVMSpvVaultData";
12
+ import {EVMSpvWithdrawalData} from "../../evm/spv_swap/EVMSpvWithdrawalData";
13
+
14
+ const CitreaChainIds = {
15
+ MAINNET: null,
16
+ TESTNET4: 5115
17
+ };
18
+
19
+ const CitreaContractAddresses = {
20
+ MAINNET: {
21
+ executionContract: "",
22
+ swapContract: "",
23
+ btcRelayContract: "",
24
+ btcRelayDeploymentHeight: 0,
25
+ spvVaultContract: "",
26
+ spvVaultDeploymentHeight: 0,
27
+ handlerContracts: {
28
+ refund: {
29
+ timelock: ""
30
+ },
31
+ claim: {
32
+ [ChainSwapType.HTLC]: "",
33
+ [ChainSwapType.CHAIN_TXID]: "",
34
+ [ChainSwapType.CHAIN]: "",
35
+ [ChainSwapType.CHAIN_NONCED]: ""
36
+ }
37
+ }
38
+ },
39
+ TESTNET4: {
40
+ executionContract: "0x9e289512965A0842b342A6BB3F3c41F22a555Cfe",
41
+ swapContract: "0xBbf7755b674dD107d59F0650D1A3fA9C60bf6Fe6",
42
+ btcRelayContract: "0xfd0FbA128244f502678251b07dEa0fb4EcE959F3",
43
+ btcRelayDeploymentHeight: 12346223,
44
+ spvVaultContract: "0x9Bf990C6088F716279797a602b05941c40591533",
45
+ spvVaultDeploymentHeight: 12346223,
46
+ handlerContracts: {
47
+ refund: {
48
+ timelock: "0x4699450973c21d6Fe09e36A8A475EaE4D78a3137"
49
+ },
50
+ claim: {
51
+ [ChainSwapType.HTLC]: "0x1120e1Eb3049148AeBEe497331774BfE1f6c174D",
52
+ [ChainSwapType.CHAIN_TXID]: "0xf61D1da542111216337FeEA5586022130D468842",
53
+ [ChainSwapType.CHAIN]: "0xBe8C784b03F0c6d54aC35a4D41bd6CF2EDb6e012",
54
+ [ChainSwapType.CHAIN_NONCED]: "0x65faec5DC334bf2005eC2DFcf012da87a832f1F0"
55
+ }
56
+ }
57
+ }
58
+ };
59
+
60
+ export type CitreaAssetsType = BaseTokenType<"CBTC">;
61
+ export const CitreaAssets: CitreaAssetsType = {
62
+ CBTC: {
63
+ address: "0x0000000000000000000000000000000000000000",
64
+ decimals: 18,
65
+ displayDecimals: 8
66
+ }
67
+ } as const;
68
+
69
+ export type CitreaOptions = {
70
+ rpcUrl: string | JsonRpcApiProvider,
71
+ retryPolicy?: EVMRetryPolicy,
72
+ chainType?: "MAINNET" | "TESTNET4",
73
+ maxLogsBlockRange?: number,
74
+
75
+ swapContract?: string,
76
+ btcRelayContract?: string,
77
+ btcRelayDeploymentHeight?: number,
78
+ spvVaultContract?: string,
79
+ spvVaultDeploymentHeight?: number,
80
+ handlerContracts?: {
81
+ refund?: {
82
+ timelock?: string
83
+ },
84
+ claim?: {
85
+ [type in ChainSwapType]?: string
86
+ }
87
+ }
88
+
89
+ fees?: EVMFees
90
+ }
91
+
92
+ export function initializeCitrea(
93
+ options: CitreaOptions,
94
+ bitcoinRpc: BitcoinRpc<any>,
95
+ network: BitcoinNetwork
96
+ ): ChainData<CitreaChainType> {
97
+ if(options.chainType==null) {
98
+ switch (network) {
99
+ case BitcoinNetwork.TESTNET4:
100
+ options.chainType = "TESTNET4";
101
+ break;
102
+ case BitcoinNetwork.MAINNET:
103
+ options.chainType = "MAINNET";
104
+ break;
105
+ }
106
+ }
107
+
108
+ const defaultContractAddresses = CitreaContractAddresses[options.chainType];
109
+ const chainId = CitreaChainIds[options.chainType];
110
+
111
+ const provider = typeof(options.rpcUrl)==="string" ?
112
+ new JsonRpcProvider(options.rpcUrl, {name: "Citrea", chainId}) :
113
+ options.rpcUrl;
114
+
115
+ const Fees = options.fees ?? new EVMFees(provider, 2n * 1_000_000_000n, 1_000_000n);
116
+
117
+ const chainInterface = new EVMChainInterface("CITREA", chainId, provider, {
118
+ safeBlockTag: "latest",
119
+ maxLogsBlockRange: options.maxLogsBlockRange ?? 500
120
+ }, options.retryPolicy, Fees);
121
+
122
+ const btcRelay = new EVMBtcRelay(
123
+ chainInterface, bitcoinRpc, network, options.btcRelayContract ?? defaultContractAddresses.btcRelayContract,
124
+ options.btcRelayDeploymentHeight ?? defaultContractAddresses.btcRelayDeploymentHeight
125
+ );
126
+
127
+ const swapContract = new EVMSwapContract(
128
+ chainInterface, btcRelay, options.swapContract ?? defaultContractAddresses.swapContract, {
129
+ refund: {
130
+ ...defaultContractAddresses.handlerContracts.refund,
131
+ ...options?.handlerContracts?.refund
132
+ },
133
+ claim: {
134
+ ...defaultContractAddresses.handlerContracts.claim,
135
+ ...options?.handlerContracts?.claim
136
+ }
137
+ }
138
+ );
139
+
140
+ const spvVaultContract = new EVMSpvVaultContract(
141
+ chainInterface, btcRelay, bitcoinRpc, options.spvVaultContract ?? defaultContractAddresses.spvVaultContract,
142
+ options.spvVaultDeploymentHeight ?? defaultContractAddresses.spvVaultDeploymentHeight
143
+ )
144
+
145
+ const chainEvents = new EVMChainEventsBrowser(chainInterface, swapContract, spvVaultContract);
146
+
147
+ return {
148
+ chainId: "CITREA",
149
+ btcRelay,
150
+ chainInterface,
151
+ swapContract,
152
+ chainEvents,
153
+ swapDataConstructor: EVMSwapData,
154
+ spvVaultContract,
155
+ spvVaultDataConstructor: EVMSpvVaultData,
156
+ spvVaultWithdrawalDataConstructor: EVMSpvWithdrawalData
157
+ }
158
+ };
159
+
160
+ export type CitreaInitializerType = ChainInitializer<CitreaOptions, CitreaChainType, CitreaAssetsType>;
161
+ export const CitreaInitializer: CitreaInitializerType = {
162
+ chainId: "CITREA",
163
+ chainType: null as CitreaChainType,
164
+ initializer: initializeCitrea,
165
+ tokens: CitreaAssets,
166
+ options: null as CitreaOptions
167
+ } as const;
@@ -0,0 +1,258 @@
1
+ export const BtcRelayAbi = [
2
+ {
3
+ "inputs": [
4
+ {
5
+ "components": [
6
+ {
7
+ "internalType": "bytes32[5]",
8
+ "name": "data",
9
+ "type": "bytes32[5]"
10
+ }
11
+ ],
12
+ "internalType": "struct StoredBlockHeader",
13
+ "name": "storedHeader",
14
+ "type": "tuple"
15
+ },
16
+ {
17
+ "internalType": "bool",
18
+ "name": "clampBlockTarget",
19
+ "type": "bool"
20
+ }
21
+ ],
22
+ "stateMutability": "nonpayable",
23
+ "type": "constructor"
24
+ },
25
+ {
26
+ "anonymous": false,
27
+ "inputs": [
28
+ {
29
+ "indexed": true,
30
+ "internalType": "bytes32",
31
+ "name": "commitHash",
32
+ "type": "bytes32"
33
+ },
34
+ {
35
+ "indexed": true,
36
+ "internalType": "bytes32",
37
+ "name": "blockHash",
38
+ "type": "bytes32"
39
+ },
40
+ {
41
+ "indexed": true,
42
+ "internalType": "uint256",
43
+ "name": "forkId",
44
+ "type": "uint256"
45
+ },
46
+ {
47
+ "indexed": false,
48
+ "internalType": "address",
49
+ "name": "submitter",
50
+ "type": "address"
51
+ },
52
+ {
53
+ "indexed": false,
54
+ "internalType": "uint256",
55
+ "name": "startHeight",
56
+ "type": "uint256"
57
+ }
58
+ ],
59
+ "name": "ChainReorg",
60
+ "type": "event"
61
+ },
62
+ {
63
+ "anonymous": false,
64
+ "inputs": [
65
+ {
66
+ "indexed": true,
67
+ "internalType": "bytes32",
68
+ "name": "commitHash",
69
+ "type": "bytes32"
70
+ },
71
+ {
72
+ "indexed": true,
73
+ "internalType": "bytes32",
74
+ "name": "blockHash",
75
+ "type": "bytes32"
76
+ },
77
+ {
78
+ "indexed": true,
79
+ "internalType": "uint256",
80
+ "name": "forkId",
81
+ "type": "uint256"
82
+ }
83
+ ],
84
+ "name": "StoreForkHeader",
85
+ "type": "event"
86
+ },
87
+ {
88
+ "anonymous": false,
89
+ "inputs": [
90
+ {
91
+ "indexed": true,
92
+ "internalType": "bytes32",
93
+ "name": "commitHash",
94
+ "type": "bytes32"
95
+ },
96
+ {
97
+ "indexed": true,
98
+ "internalType": "bytes32",
99
+ "name": "blockHash",
100
+ "type": "bytes32"
101
+ }
102
+ ],
103
+ "name": "StoreHeader",
104
+ "type": "event"
105
+ },
106
+ {
107
+ "inputs": [],
108
+ "name": "getBlockheight",
109
+ "outputs": [
110
+ {
111
+ "internalType": "uint32",
112
+ "name": "blockheight",
113
+ "type": "uint32"
114
+ }
115
+ ],
116
+ "stateMutability": "view",
117
+ "type": "function"
118
+ },
119
+ {
120
+ "inputs": [],
121
+ "name": "getChainwork",
122
+ "outputs": [
123
+ {
124
+ "internalType": "uint224",
125
+ "name": "chainWork",
126
+ "type": "uint224"
127
+ }
128
+ ],
129
+ "stateMutability": "view",
130
+ "type": "function"
131
+ },
132
+ {
133
+ "inputs": [
134
+ {
135
+ "internalType": "uint256",
136
+ "name": "height",
137
+ "type": "uint256"
138
+ }
139
+ ],
140
+ "name": "getCommitHash",
141
+ "outputs": [
142
+ {
143
+ "internalType": "bytes32",
144
+ "name": "",
145
+ "type": "bytes32"
146
+ }
147
+ ],
148
+ "stateMutability": "view",
149
+ "type": "function"
150
+ },
151
+ {
152
+ "inputs": [],
153
+ "name": "getTipCommitHash",
154
+ "outputs": [
155
+ {
156
+ "internalType": "bytes32",
157
+ "name": "",
158
+ "type": "bytes32"
159
+ }
160
+ ],
161
+ "stateMutability": "view",
162
+ "type": "function"
163
+ },
164
+ {
165
+ "inputs": [
166
+ {
167
+ "internalType": "uint256",
168
+ "name": "forkId",
169
+ "type": "uint256"
170
+ },
171
+ {
172
+ "internalType": "bytes",
173
+ "name": "data",
174
+ "type": "bytes"
175
+ }
176
+ ],
177
+ "name": "submitForkBlockheaders",
178
+ "outputs": [],
179
+ "stateMutability": "nonpayable",
180
+ "type": "function"
181
+ },
182
+ {
183
+ "inputs": [
184
+ {
185
+ "internalType": "bytes",
186
+ "name": "data",
187
+ "type": "bytes"
188
+ }
189
+ ],
190
+ "name": "submitMainBlockheaders",
191
+ "outputs": [],
192
+ "stateMutability": "nonpayable",
193
+ "type": "function"
194
+ },
195
+ {
196
+ "inputs": [
197
+ {
198
+ "internalType": "bytes",
199
+ "name": "data",
200
+ "type": "bytes"
201
+ }
202
+ ],
203
+ "name": "submitShortForkBlockheaders",
204
+ "outputs": [],
205
+ "stateMutability": "nonpayable",
206
+ "type": "function"
207
+ },
208
+ {
209
+ "inputs": [
210
+ {
211
+ "components": [
212
+ {
213
+ "internalType": "bytes32[5]",
214
+ "name": "data",
215
+ "type": "bytes32[5]"
216
+ }
217
+ ],
218
+ "internalType": "struct StoredBlockHeader",
219
+ "name": "storedHeader",
220
+ "type": "tuple"
221
+ }
222
+ ],
223
+ "name": "verifyBlockheader",
224
+ "outputs": [
225
+ {
226
+ "internalType": "uint256",
227
+ "name": "confirmations",
228
+ "type": "uint256"
229
+ }
230
+ ],
231
+ "stateMutability": "view",
232
+ "type": "function"
233
+ },
234
+ {
235
+ "inputs": [
236
+ {
237
+ "internalType": "uint256",
238
+ "name": "height",
239
+ "type": "uint256"
240
+ },
241
+ {
242
+ "internalType": "bytes32",
243
+ "name": "commitmentHash",
244
+ "type": "bytes32"
245
+ }
246
+ ],
247
+ "name": "verifyBlockheaderHash",
248
+ "outputs": [
249
+ {
250
+ "internalType": "uint256",
251
+ "name": "confirmations",
252
+ "type": "uint256"
253
+ }
254
+ ],
255
+ "stateMutability": "view",
256
+ "type": "function"
257
+ }
258
+ ] as const;