@atomiqlabs/base 10.0.0-dev.2 → 10.0.0-dev.21

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 (131) hide show
  1. package/LICENSE +201 -201
  2. package/dist/btc/BitcoinNetwork.d.ts +6 -6
  3. package/dist/btc/BitcoinNetwork.js +10 -10
  4. package/dist/btc/rpc/BitcoinRpc.d.ts +68 -68
  5. package/dist/btc/rpc/BitcoinRpc.js +2 -2
  6. package/dist/btcrelay/BtcRelay.d.ts +61 -61
  7. package/dist/btcrelay/BtcRelay.js +2 -2
  8. package/dist/btcrelay/synchronizer/RelaySynchronizer.d.ts +18 -18
  9. package/dist/btcrelay/synchronizer/RelaySynchronizer.js +2 -2
  10. package/dist/btcrelay/types/BtcBlock.d.ts +13 -13
  11. package/dist/btcrelay/types/BtcBlock.js +2 -2
  12. package/dist/btcrelay/types/BtcHeader.d.ts +10 -10
  13. package/dist/btcrelay/types/BtcHeader.js +2 -2
  14. package/dist/btcrelay/types/BtcStoredHeader.d.ts +11 -11
  15. package/dist/btcrelay/types/BtcStoredHeader.js +2 -2
  16. package/dist/btcrelay/utils/StatePredictorUtils.d.ts +11 -11
  17. package/dist/btcrelay/utils/StatePredictorUtils.js +80 -80
  18. package/dist/chains/ChainData.d.ts +31 -31
  19. package/dist/chains/ChainData.js +2 -2
  20. package/dist/chains/ChainInterface.d.ts +133 -110
  21. package/dist/chains/ChainInterface.js +7 -2
  22. package/dist/chains/ChainType.d.ts +24 -23
  23. package/dist/chains/ChainType.js +2 -2
  24. package/dist/errors/CannotInitializeATAError.d.ts +3 -3
  25. package/dist/errors/CannotInitializeATAError.js +11 -11
  26. package/dist/errors/SignatureVerificationError.d.ts +3 -3
  27. package/dist/errors/SignatureVerificationError.js +11 -11
  28. package/dist/errors/SwapDataVerificationError.d.ts +3 -3
  29. package/dist/errors/SwapDataVerificationError.js +11 -11
  30. package/dist/errors/TransactionRevertedError.d.ts +3 -0
  31. package/dist/errors/TransactionRevertedError.js +11 -0
  32. package/dist/events/ChainEvents.d.ts +9 -9
  33. package/dist/events/ChainEvents.js +2 -2
  34. package/dist/events/types/ChainEvent.d.ts +7 -7
  35. package/dist/events/types/ChainEvent.js +6 -6
  36. package/dist/events/types/spv_vault/SpvVaultClaimEvent.d.ts +12 -12
  37. package/dist/events/types/spv_vault/SpvVaultClaimEvent.js +18 -18
  38. package/dist/events/types/spv_vault/SpvVaultCloseEvent.d.ts +7 -7
  39. package/dist/events/types/spv_vault/SpvVaultCloseEvent.js +13 -13
  40. package/dist/events/types/spv_vault/SpvVaultDepositEvent.d.ts +7 -7
  41. package/dist/events/types/spv_vault/SpvVaultDepositEvent.js +13 -13
  42. package/dist/events/types/spv_vault/SpvVaultEvent.d.ts +15 -15
  43. package/dist/events/types/spv_vault/SpvVaultEvent.js +20 -20
  44. package/dist/events/types/spv_vault/SpvVaultFrontEvent.d.ts +10 -10
  45. package/dist/events/types/spv_vault/SpvVaultFrontEvent.js +16 -16
  46. package/dist/events/types/spv_vault/SpvVaultOpenEvent.d.ts +7 -7
  47. package/dist/events/types/spv_vault/SpvVaultOpenEvent.js +13 -13
  48. package/dist/events/types/swap/ClaimEvent.d.ts +7 -7
  49. package/dist/events/types/swap/ClaimEvent.js +11 -11
  50. package/dist/events/types/swap/InitializeEvent.d.ts +9 -9
  51. package/dist/events/types/swap/InitializeEvent.js +12 -12
  52. package/dist/events/types/swap/RefundEvent.d.ts +5 -5
  53. package/dist/events/types/swap/RefundEvent.js +7 -7
  54. package/dist/events/types/swap/SwapEvent.d.ts +12 -12
  55. package/dist/events/types/swap/SwapEvent.js +17 -17
  56. package/dist/index.d.ts +42 -38
  57. package/dist/index.js +58 -54
  58. package/dist/lockable/Lockable.d.ts +6 -6
  59. package/dist/lockable/Lockable.js +28 -28
  60. package/dist/messaging/Messenger.d.ts +8 -0
  61. package/dist/messaging/Messenger.js +2 -0
  62. package/dist/messaging/messages/Message.d.ts +11 -0
  63. package/dist/messaging/messages/Message.js +22 -0
  64. package/dist/messaging/messages/SwapClaimWitnessMessage.d.ts +10 -0
  65. package/dist/messaging/messages/SwapClaimWitnessMessage.js +28 -0
  66. package/dist/spv_swap/SpvVaultContract.d.ts +258 -199
  67. package/dist/spv_swap/SpvVaultContract.js +2 -2
  68. package/dist/spv_swap/SpvVaultData.d.ts +35 -35
  69. package/dist/spv_swap/SpvVaultData.js +37 -37
  70. package/dist/spv_swap/SpvWithdrawalState.d.ts +31 -31
  71. package/dist/spv_swap/SpvWithdrawalState.js +10 -10
  72. package/dist/spv_swap/SpvWithdrawalTransactionData.d.ts +43 -43
  73. package/dist/spv_swap/SpvWithdrawalTransactionData.js +143 -143
  74. package/dist/storage/IStorageManager.d.ts +15 -15
  75. package/dist/storage/IStorageManager.js +2 -2
  76. package/dist/storage/StorageObject.d.ts +3 -3
  77. package/dist/storage/StorageObject.js +2 -2
  78. package/dist/swaps/ChainSwapType.d.ts +6 -6
  79. package/dist/swaps/ChainSwapType.js +10 -10
  80. package/dist/swaps/SwapCommitState.d.ts +39 -38
  81. package/dist/swaps/SwapCommitState.js +11 -11
  82. package/dist/swaps/SwapContract.d.ts +479 -467
  83. package/dist/swaps/SwapContract.js +2 -2
  84. package/dist/swaps/SwapData.d.ts +37 -36
  85. package/dist/swaps/SwapData.js +17 -14
  86. package/dist/utils/BigIntBufferUtils.d.ts +6 -6
  87. package/dist/utils/BigIntBufferUtils.js +31 -31
  88. package/package.json +31 -31
  89. package/src/btc/BitcoinNetwork.ts +6 -6
  90. package/src/btc/rpc/BitcoinRpc.ts +77 -77
  91. package/src/btcrelay/BtcRelay.ts +70 -70
  92. package/src/btcrelay/synchronizer/RelaySynchronizer.ts +17 -17
  93. package/src/btcrelay/types/BtcBlock.ts +15 -15
  94. package/src/btcrelay/types/BtcHeader.ts +11 -11
  95. package/src/btcrelay/types/BtcStoredHeader.ts +12 -12
  96. package/src/btcrelay/utils/StatePredictorUtils.ts +108 -108
  97. package/src/chains/ChainData.ts +40 -40
  98. package/src/chains/ChainInterface.ts +159 -132
  99. package/src/chains/ChainType.ts +40 -38
  100. package/src/errors/CannotInitializeATAError.ts +11 -11
  101. package/src/errors/SignatureVerificationError.ts +11 -11
  102. package/src/errors/SwapDataVerificationError.ts +11 -11
  103. package/src/errors/TransactionRevertedError.ts +11 -0
  104. package/src/events/ChainEvents.ts +13 -13
  105. package/src/events/types/ChainEvent.ts +10 -10
  106. package/src/events/types/spv_vault/SpvVaultClaimEvent.ts +31 -31
  107. package/src/events/types/spv_vault/SpvVaultCloseEvent.ts +17 -17
  108. package/src/events/types/spv_vault/SpvVaultDepositEvent.ts +17 -17
  109. package/src/events/types/spv_vault/SpvVaultEvent.ts +25 -25
  110. package/src/events/types/spv_vault/SpvVaultFrontEvent.ts +27 -27
  111. package/src/events/types/spv_vault/SpvVaultOpenEvent.ts +16 -16
  112. package/src/events/types/swap/ClaimEvent.ts +15 -15
  113. package/src/events/types/swap/InitializeEvent.ts +18 -18
  114. package/src/events/types/swap/RefundEvent.ts +6 -6
  115. package/src/events/types/swap/SwapEvent.ts +21 -21
  116. package/src/index.ts +51 -46
  117. package/src/lockable/Lockable.ts +30 -30
  118. package/src/messaging/Messenger.ts +11 -0
  119. package/src/messaging/messages/Message.ts +25 -0
  120. package/src/messaging/messages/SwapClaimWitnessMessage.ts +34 -0
  121. package/src/spv_swap/SpvVaultContract.ts +269 -230
  122. package/src/spv_swap/SpvVaultData.ts +70 -70
  123. package/src/spv_swap/SpvWithdrawalState.ts +40 -40
  124. package/src/spv_swap/SpvWithdrawalTransactionData.ts +169 -169
  125. package/src/storage/IStorageManager.ts +16 -16
  126. package/src/storage/StorageObject.ts +6 -6
  127. package/src/swaps/ChainSwapType.ts +6 -6
  128. package/src/swaps/SwapCommitState.ts +40 -39
  129. package/src/swaps/SwapContract.ts +564 -556
  130. package/src/swaps/SwapData.ts +69 -65
  131. package/src/utils/BigIntBufferUtils.ts +31 -31
@@ -1,61 +1,61 @@
1
- /// <reference types="node" />
2
- import { BtcStoredHeader } from "./types/BtcStoredHeader";
3
- import { BtcBlock } from "./types/BtcBlock";
4
- import { Buffer } from "buffer";
5
- import { AbstractSigner } from "../chains/ChainInterface";
6
- export interface BtcRelay<V extends BtcStoredHeader<any>, T, B extends BtcBlock, Signer extends AbstractSigner = AbstractSigner> {
7
- maxHeadersPerTx: number;
8
- maxForkHeadersPerTx: number;
9
- maxShortForkHeadersPerTx?: number;
10
- getTipData(): Promise<{
11
- blockheight: number;
12
- blockhash: string;
13
- commitHash: string;
14
- chainWork: Buffer;
15
- }>;
16
- retrieveLogAndBlockheight(blockData: {
17
- blockhash: string;
18
- height: number;
19
- }, requiredBlockheight?: number): Promise<{
20
- header: V;
21
- height: number;
22
- }>;
23
- retrieveLogByCommitHash(commitHash: string, blockData: {
24
- blockhash: string;
25
- height: number;
26
- }): Promise<V>;
27
- retrieveLatestKnownBlockLog(): Promise<{
28
- resultStoredHeader: V;
29
- resultBitcoinHeader: B;
30
- }>;
31
- saveInitialHeader(signer: string, header: B, epochStart: number, pastBlocksTimestamps: number[], feeRate?: string): Promise<T>;
32
- saveMainHeaders(signer: string, mainHeaders: B[], storedHeader: V, feeRate?: string): Promise<{
33
- forkId: number;
34
- lastStoredHeader: V;
35
- tx: T;
36
- computedCommitedHeaders: V[];
37
- }>;
38
- saveNewForkHeaders(signer: string, forkHeaders: B[], storedHeader: V, tipWork: Buffer, feeRate?: string): Promise<{
39
- forkId: number;
40
- lastStoredHeader: V;
41
- tx: T;
42
- computedCommitedHeaders: V[];
43
- }>;
44
- saveForkHeaders(signer: string, forkHeaders: B[], storedHeader: V, forkId: number, tipWork: Buffer, feeRate?: string): Promise<{
45
- forkId: number;
46
- lastStoredHeader: V;
47
- tx: T;
48
- computedCommitedHeaders: V[];
49
- }>;
50
- saveShortForkHeaders?(signer: string, forkHeaders: B[], storedHeader: V, tipWork: Buffer, feeRate?: string): Promise<{
51
- forkId: number;
52
- lastStoredHeader: V;
53
- tx: T;
54
- computedCommitedHeaders: V[];
55
- }>;
56
- getMainFeeRate?(signer: string): Promise<string>;
57
- getForkFeeRate?(signer: string, forkId: number): Promise<string>;
58
- estimateSynchronizeFee(requiredBlockheight: number, feeRate?: string): Promise<bigint>;
59
- getFeePerBlock(feeRate?: any): Promise<bigint>;
60
- sweepForkData?(signer: Signer, lastSweepTimestamp?: number): Promise<number | null>;
61
- }
1
+ /// <reference types="node" />
2
+ import { BtcStoredHeader } from "./types/BtcStoredHeader";
3
+ import { BtcBlock } from "./types/BtcBlock";
4
+ import { Buffer } from "buffer";
5
+ import { AbstractSigner } from "../chains/ChainInterface";
6
+ export interface BtcRelay<V extends BtcStoredHeader<any>, T, B extends BtcBlock, Signer extends AbstractSigner = AbstractSigner> {
7
+ maxHeadersPerTx: number;
8
+ maxForkHeadersPerTx: number;
9
+ maxShortForkHeadersPerTx?: number;
10
+ getTipData(): Promise<{
11
+ blockheight: number;
12
+ blockhash: string;
13
+ commitHash: string;
14
+ chainWork: Buffer;
15
+ }>;
16
+ retrieveLogAndBlockheight(blockData: {
17
+ blockhash: string;
18
+ height: number;
19
+ }, requiredBlockheight?: number): Promise<{
20
+ header: V;
21
+ height: number;
22
+ }>;
23
+ retrieveLogByCommitHash(commitHash: string, blockData: {
24
+ blockhash: string;
25
+ height: number;
26
+ }): Promise<V>;
27
+ retrieveLatestKnownBlockLog(): Promise<{
28
+ resultStoredHeader: V;
29
+ resultBitcoinHeader: B;
30
+ }>;
31
+ saveInitialHeader(signer: string, header: B, epochStart: number, pastBlocksTimestamps: number[], feeRate?: string): Promise<T>;
32
+ saveMainHeaders(signer: string, mainHeaders: B[], storedHeader: V, feeRate?: string): Promise<{
33
+ forkId: number;
34
+ lastStoredHeader: V;
35
+ tx: T;
36
+ computedCommitedHeaders: V[];
37
+ }>;
38
+ saveNewForkHeaders(signer: string, forkHeaders: B[], storedHeader: V, tipWork: Buffer, feeRate?: string): Promise<{
39
+ forkId: number;
40
+ lastStoredHeader: V;
41
+ tx: T;
42
+ computedCommitedHeaders: V[];
43
+ }>;
44
+ saveForkHeaders(signer: string, forkHeaders: B[], storedHeader: V, forkId: number, tipWork: Buffer, feeRate?: string): Promise<{
45
+ forkId: number;
46
+ lastStoredHeader: V;
47
+ tx: T;
48
+ computedCommitedHeaders: V[];
49
+ }>;
50
+ saveShortForkHeaders?(signer: string, forkHeaders: B[], storedHeader: V, tipWork: Buffer, feeRate?: string): Promise<{
51
+ forkId: number;
52
+ lastStoredHeader: V;
53
+ tx: T;
54
+ computedCommitedHeaders: V[];
55
+ }>;
56
+ getMainFeeRate?(signer: string): Promise<string>;
57
+ getForkFeeRate?(signer: string, forkId: number): Promise<string>;
58
+ estimateSynchronizeFee(requiredBlockheight: number, feeRate?: string): Promise<bigint>;
59
+ getFeePerBlock(feeRate?: any): Promise<bigint>;
60
+ sweepForkData?(signer: Signer, lastSweepTimestamp?: number): Promise<number | null>;
61
+ }
@@ -1,2 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,18 +1,18 @@
1
- import { BtcStoredHeader } from "../types/BtcStoredHeader";
2
- import { BtcBlock } from "../types/BtcBlock";
3
- export interface RelaySynchronizer<V extends BtcStoredHeader<any>, T, B extends BtcBlock> {
4
- syncToLatestTxs(signer: string, feeRate?: string): Promise<{
5
- txs: T[];
6
- targetCommitedHeader: V;
7
- latestBlockHeader: B;
8
- computedHeaderMap: {
9
- [blockheight: number]: V;
10
- };
11
- blockHeaderMap: {
12
- [blockheight: number]: B;
13
- };
14
- btcRelayTipCommitedHeader: V;
15
- btcRelayTipBlockHeader: B;
16
- startForkId?: number;
17
- }>;
18
- }
1
+ import { BtcStoredHeader } from "../types/BtcStoredHeader";
2
+ import { BtcBlock } from "../types/BtcBlock";
3
+ export interface RelaySynchronizer<V extends BtcStoredHeader<any>, T, B extends BtcBlock> {
4
+ syncToLatestTxs(signer: string, feeRate?: string): Promise<{
5
+ txs: T[];
6
+ targetCommitedHeader: V;
7
+ latestBlockHeader: B;
8
+ computedHeaderMap: {
9
+ [blockheight: number]: V;
10
+ };
11
+ blockHeaderMap: {
12
+ [blockheight: number]: B;
13
+ };
14
+ btcRelayTipCommitedHeader: V;
15
+ btcRelayTipBlockHeader: B;
16
+ startForkId?: number;
17
+ }>;
18
+ }
@@ -1,2 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,13 +1,13 @@
1
- /// <reference types="node" />
2
- import { Buffer } from "buffer";
3
- export interface BtcBlock {
4
- getVersion(): number;
5
- getPrevBlockhash(): string;
6
- getMerkleRoot(): string;
7
- getTimestamp(): number;
8
- getNbits(): number;
9
- getNonce(): number;
10
- getHash(): string;
11
- getHeight(): number;
12
- getChainWork(): Buffer;
13
- }
1
+ /// <reference types="node" />
2
+ import { Buffer } from "buffer";
3
+ export interface BtcBlock {
4
+ getVersion(): number;
5
+ getPrevBlockhash(): string;
6
+ getMerkleRoot(): string;
7
+ getTimestamp(): number;
8
+ getNbits(): number;
9
+ getNonce(): number;
10
+ getHash(): string;
11
+ getHeight(): number;
12
+ getChainWork(): Buffer;
13
+ }
@@ -1,2 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,10 +1,10 @@
1
- /// <reference types="node" />
2
- import { Buffer } from "buffer";
3
- export interface BtcHeader {
4
- getVersion(): number;
5
- getReversedPrevBlockhash(): Buffer;
6
- getMerkleRoot(): Buffer;
7
- getTimestamp(): number;
8
- getNbits(): number;
9
- getNonce(): number;
10
- }
1
+ /// <reference types="node" />
2
+ import { Buffer } from "buffer";
3
+ export interface BtcHeader {
4
+ getVersion(): number;
5
+ getReversedPrevBlockhash(): Buffer;
6
+ getMerkleRoot(): Buffer;
7
+ getTimestamp(): number;
8
+ getNbits(): number;
9
+ getNonce(): number;
10
+ }
@@ -1,2 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,11 +1,11 @@
1
- /// <reference types="node" />
2
- import { BtcHeader } from "./BtcHeader";
3
- import { Buffer } from "buffer";
4
- export interface BtcStoredHeader<T extends BtcHeader> {
5
- getChainWork(): Buffer;
6
- getHeader(): T;
7
- getLastDiffAdjustment(): number;
8
- getBlockheight(): number;
9
- getPrevBlockTimestamps(): number[];
10
- computeNext(header: T): BtcStoredHeader<T>;
11
- }
1
+ /// <reference types="node" />
2
+ import { BtcHeader } from "./BtcHeader";
3
+ import { Buffer } from "buffer";
4
+ export interface BtcStoredHeader<T extends BtcHeader> {
5
+ getChainWork(): Buffer;
6
+ getHeader(): T;
7
+ getLastDiffAdjustment(): number;
8
+ getBlockheight(): number;
9
+ getPrevBlockTimestamps(): number[];
10
+ computeNext(header: T): BtcStoredHeader<T>;
11
+ }
@@ -1,2 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,11 +1,11 @@
1
- /// <reference types="node" />
2
- import { Buffer } from "buffer";
3
- export declare class StatePredictorUtils {
4
- static readonly DIFF_ADJUSTMENT_PERIOD = 2016;
5
- static gtBuffer(a: Buffer, b: Buffer): boolean;
6
- static divInPlace(arr: Buffer, divisor: number): void;
7
- static addInPlace(arr: number[], add: number[]): void;
8
- static nbitsToTarget(nbits: number): Buffer;
9
- static getDifficulty(nbits: number): Buffer;
10
- static getChainwork(nbits: number): Buffer;
11
- }
1
+ /// <reference types="node" />
2
+ import { Buffer } from "buffer";
3
+ export declare class StatePredictorUtils {
4
+ static readonly DIFF_ADJUSTMENT_PERIOD = 2016;
5
+ static gtBuffer(a: Buffer, b: Buffer): boolean;
6
+ static divInPlace(arr: Buffer, divisor: number): void;
7
+ static addInPlace(arr: number[], add: number[]): void;
8
+ static nbitsToTarget(nbits: number): Buffer;
9
+ static getDifficulty(nbits: number): Buffer;
10
+ static getChainwork(nbits: number): Buffer;
11
+ }
@@ -1,80 +1,80 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StatePredictorUtils = void 0;
4
- const buffer_1 = require("buffer");
5
- const BigIntBufferUtils_1 = require("../../utils/BigIntBufferUtils");
6
- class StatePredictorUtils {
7
- static gtBuffer(a, b) {
8
- for (let i = 0; i < a.length; i++) {
9
- if (a[i] > b[i])
10
- return true;
11
- if (a[i] < b[i])
12
- return false;
13
- }
14
- return false;
15
- }
16
- static divInPlace(arr, divisor) {
17
- let remainder = 0;
18
- for (let i = 0; i < 32; i++) {
19
- const val = arr[i] + remainder;
20
- const result = Math.floor(val / divisor);
21
- remainder = (val % divisor) * 256;
22
- arr[i] = result;
23
- }
24
- }
25
- static addInPlace(arr, add) {
26
- let remainder = 0;
27
- for (let i = 0; i < 32; i++) {
28
- const pos = 31 - i;
29
- const val = arr[pos] + add[pos] + remainder;
30
- const byte = val & 0xFF;
31
- remainder = val >> 8;
32
- arr[pos] = byte;
33
- }
34
- }
35
- static nbitsToTarget(nbits) {
36
- const target = buffer_1.Buffer.alloc(32, 0);
37
- const nSize = (nbits >> 24) & 0xFF;
38
- const nWord = [
39
- ((nbits >> 16) & 0x7F),
40
- ((nbits >> 8) & 0xFF),
41
- ((nbits) & 0xFF)
42
- ];
43
- const start = 32 - nSize;
44
- for (let i = 0; i < 3; i++) {
45
- if (start + i < 32) {
46
- target[start + i] = nWord[i];
47
- }
48
- }
49
- return target;
50
- }
51
- static getDifficulty(nbits) {
52
- const target = StatePredictorUtils.nbitsToTarget(nbits);
53
- let start = 0;
54
- for (let i = 0; i < 32; i++) {
55
- if (target[i] > 0) {
56
- start = i;
57
- break;
58
- }
59
- }
60
- const shift = 32 - start - 3;
61
- let num = 0;
62
- for (let i = 0; i < 3; i++) {
63
- num |= target[start + i] << ((2 - i) * 8);
64
- }
65
- const arr = buffer_1.Buffer.from("00000000FFFF0000000000000000000000000000000000000000000000000000", "hex");
66
- StatePredictorUtils.divInPlace(arr, num);
67
- const result = buffer_1.Buffer.alloc(32, 0);
68
- for (let i = 0; i < 32 - shift; i++) {
69
- result[i + shift] = arr[i];
70
- }
71
- return result;
72
- }
73
- static getChainwork(nbits) {
74
- const target = StatePredictorUtils.nbitsToTarget(nbits);
75
- const targetBN = BigIntBufferUtils_1.BigIntBufferUtils.fromBuffer(target);
76
- return BigIntBufferUtils_1.BigIntBufferUtils.toBuffer(((~targetBN & 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn) / (targetBN + 1n)) + 1n, "be", 32);
77
- }
78
- }
79
- exports.StatePredictorUtils = StatePredictorUtils;
80
- StatePredictorUtils.DIFF_ADJUSTMENT_PERIOD = 2016;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StatePredictorUtils = void 0;
4
+ const buffer_1 = require("buffer");
5
+ const BigIntBufferUtils_1 = require("../../utils/BigIntBufferUtils");
6
+ class StatePredictorUtils {
7
+ static gtBuffer(a, b) {
8
+ for (let i = 0; i < a.length; i++) {
9
+ if (a[i] > b[i])
10
+ return true;
11
+ if (a[i] < b[i])
12
+ return false;
13
+ }
14
+ return false;
15
+ }
16
+ static divInPlace(arr, divisor) {
17
+ let remainder = 0;
18
+ for (let i = 0; i < 32; i++) {
19
+ const val = arr[i] + remainder;
20
+ const result = Math.floor(val / divisor);
21
+ remainder = (val % divisor) * 256;
22
+ arr[i] = result;
23
+ }
24
+ }
25
+ static addInPlace(arr, add) {
26
+ let remainder = 0;
27
+ for (let i = 0; i < 32; i++) {
28
+ const pos = 31 - i;
29
+ const val = arr[pos] + add[pos] + remainder;
30
+ const byte = val & 0xFF;
31
+ remainder = val >> 8;
32
+ arr[pos] = byte;
33
+ }
34
+ }
35
+ static nbitsToTarget(nbits) {
36
+ const target = buffer_1.Buffer.alloc(32, 0);
37
+ const nSize = (nbits >> 24) & 0xFF;
38
+ const nWord = [
39
+ ((nbits >> 16) & 0x7F),
40
+ ((nbits >> 8) & 0xFF),
41
+ ((nbits) & 0xFF)
42
+ ];
43
+ const start = 32 - nSize;
44
+ for (let i = 0; i < 3; i++) {
45
+ if (start + i < 32) {
46
+ target[start + i] = nWord[i];
47
+ }
48
+ }
49
+ return target;
50
+ }
51
+ static getDifficulty(nbits) {
52
+ const target = StatePredictorUtils.nbitsToTarget(nbits);
53
+ let start = 0;
54
+ for (let i = 0; i < 32; i++) {
55
+ if (target[i] > 0) {
56
+ start = i;
57
+ break;
58
+ }
59
+ }
60
+ const shift = 32 - start - 3;
61
+ let num = 0;
62
+ for (let i = 0; i < 3; i++) {
63
+ num |= target[start + i] << ((2 - i) * 8);
64
+ }
65
+ const arr = buffer_1.Buffer.from("00000000FFFF0000000000000000000000000000000000000000000000000000", "hex");
66
+ StatePredictorUtils.divInPlace(arr, num);
67
+ const result = buffer_1.Buffer.alloc(32, 0);
68
+ for (let i = 0; i < 32 - shift; i++) {
69
+ result[i + shift] = arr[i];
70
+ }
71
+ return result;
72
+ }
73
+ static getChainwork(nbits) {
74
+ const target = StatePredictorUtils.nbitsToTarget(nbits);
75
+ const targetBN = BigIntBufferUtils_1.BigIntBufferUtils.fromBuffer(target);
76
+ return BigIntBufferUtils_1.BigIntBufferUtils.toBuffer(((~targetBN & 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn) / (targetBN + 1n)) + 1n, "be", 32);
77
+ }
78
+ }
79
+ exports.StatePredictorUtils = StatePredictorUtils;
80
+ StatePredictorUtils.DIFF_ADJUSTMENT_PERIOD = 2016;
@@ -1,31 +1,31 @@
1
- import { ChainType } from "./ChainType";
2
- import { BitcoinRpc } from "../btc/rpc/BitcoinRpc";
3
- import { BitcoinNetwork } from "../btc/BitcoinNetwork";
4
- import { IStorageManager } from "../storage/IStorageManager";
5
- import { StorageObject } from "../storage/StorageObject";
6
- export type BaseTokenType<T extends string = string> = {
7
- [ticker in T]: {
8
- address: string;
9
- decimals: number;
10
- displayDecimals?: number;
11
- };
12
- };
13
- export type ChainData<T extends ChainType> = {
14
- chainId: ChainType["ChainId"];
15
- chainInterface: T["ChainInterface"];
16
- btcRelay: T["BtcRelay"];
17
- chainEvents: T["Events"];
18
- swapContract: T["Contract"];
19
- swapDataConstructor: new (data: any) => T["Data"];
20
- spvVaultContract: T["SpvVaultContract"];
21
- spvVaultDataConstructor: new (data: any) => T["SpvVaultData"];
22
- spvVaultWithdrawalDataConstructor: new (data: any) => T["SpvVaultWithdrawalData"];
23
- };
24
- export type ChainInitializerFn<O, C extends ChainType> = (options: O, bitcoinRpc: BitcoinRpc<any>, network: BitcoinNetwork, storageCtor: <T extends StorageObject>(name: string) => IStorageManager<T>) => ChainData<C>;
25
- export type ChainInitializer<O, C extends ChainType, T extends BaseTokenType> = {
26
- chainId: C["ChainId"];
27
- chainType: C;
28
- initializer: ChainInitializerFn<O, C>;
29
- tokens: T;
30
- options: O;
31
- };
1
+ import { ChainType } from "./ChainType";
2
+ import { BitcoinRpc } from "../btc/rpc/BitcoinRpc";
3
+ import { BitcoinNetwork } from "../btc/BitcoinNetwork";
4
+ import { IStorageManager } from "../storage/IStorageManager";
5
+ import { StorageObject } from "../storage/StorageObject";
6
+ export type BaseTokenType<T extends string = string> = {
7
+ [ticker in T]: {
8
+ address: string;
9
+ decimals: number;
10
+ displayDecimals?: number;
11
+ };
12
+ };
13
+ export type ChainData<T extends ChainType> = {
14
+ chainId: ChainType["ChainId"];
15
+ chainInterface: T["ChainInterface"];
16
+ btcRelay: T["BtcRelay"];
17
+ chainEvents: T["Events"];
18
+ swapContract: T["Contract"];
19
+ swapDataConstructor: new (data: any) => T["Data"];
20
+ spvVaultContract: T["SpvVaultContract"];
21
+ spvVaultDataConstructor: new (data: any) => T["SpvVaultData"];
22
+ spvVaultWithdrawalDataConstructor: new (data: any) => T["SpvVaultWithdrawalData"];
23
+ };
24
+ export type ChainInitializerFn<O, C extends ChainType> = (options: O, bitcoinRpc: BitcoinRpc<any>, network: BitcoinNetwork, storageCtor: <T extends StorageObject>(name: string) => IStorageManager<T>) => ChainData<C>;
25
+ export type ChainInitializer<O, C extends ChainType, T extends BaseTokenType> = {
26
+ chainId: C["ChainId"];
27
+ chainType: C;
28
+ initializer: ChainInitializerFn<O, C>;
29
+ tokens: T;
30
+ options: O;
31
+ };
@@ -1,2 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });