@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.
- package/LICENSE +201 -201
- package/dist/btc/BitcoinNetwork.d.ts +6 -6
- package/dist/btc/BitcoinNetwork.js +10 -10
- package/dist/btc/rpc/BitcoinRpc.d.ts +68 -68
- package/dist/btc/rpc/BitcoinRpc.js +2 -2
- package/dist/btcrelay/BtcRelay.d.ts +61 -61
- package/dist/btcrelay/BtcRelay.js +2 -2
- package/dist/btcrelay/synchronizer/RelaySynchronizer.d.ts +18 -18
- package/dist/btcrelay/synchronizer/RelaySynchronizer.js +2 -2
- package/dist/btcrelay/types/BtcBlock.d.ts +13 -13
- package/dist/btcrelay/types/BtcBlock.js +2 -2
- package/dist/btcrelay/types/BtcHeader.d.ts +10 -10
- package/dist/btcrelay/types/BtcHeader.js +2 -2
- package/dist/btcrelay/types/BtcStoredHeader.d.ts +11 -11
- package/dist/btcrelay/types/BtcStoredHeader.js +2 -2
- package/dist/btcrelay/utils/StatePredictorUtils.d.ts +11 -11
- package/dist/btcrelay/utils/StatePredictorUtils.js +80 -80
- package/dist/chains/ChainData.d.ts +31 -31
- package/dist/chains/ChainData.js +2 -2
- package/dist/chains/ChainInterface.d.ts +133 -110
- package/dist/chains/ChainInterface.js +7 -2
- package/dist/chains/ChainType.d.ts +24 -23
- package/dist/chains/ChainType.js +2 -2
- package/dist/errors/CannotInitializeATAError.d.ts +3 -3
- package/dist/errors/CannotInitializeATAError.js +11 -11
- package/dist/errors/SignatureVerificationError.d.ts +3 -3
- package/dist/errors/SignatureVerificationError.js +11 -11
- package/dist/errors/SwapDataVerificationError.d.ts +3 -3
- package/dist/errors/SwapDataVerificationError.js +11 -11
- package/dist/errors/TransactionRevertedError.d.ts +3 -0
- package/dist/errors/TransactionRevertedError.js +11 -0
- package/dist/events/ChainEvents.d.ts +9 -9
- package/dist/events/ChainEvents.js +2 -2
- package/dist/events/types/ChainEvent.d.ts +7 -7
- package/dist/events/types/ChainEvent.js +6 -6
- package/dist/events/types/spv_vault/SpvVaultClaimEvent.d.ts +12 -12
- package/dist/events/types/spv_vault/SpvVaultClaimEvent.js +18 -18
- package/dist/events/types/spv_vault/SpvVaultCloseEvent.d.ts +7 -7
- package/dist/events/types/spv_vault/SpvVaultCloseEvent.js +13 -13
- package/dist/events/types/spv_vault/SpvVaultDepositEvent.d.ts +7 -7
- package/dist/events/types/spv_vault/SpvVaultDepositEvent.js +13 -13
- package/dist/events/types/spv_vault/SpvVaultEvent.d.ts +15 -15
- package/dist/events/types/spv_vault/SpvVaultEvent.js +20 -20
- package/dist/events/types/spv_vault/SpvVaultFrontEvent.d.ts +10 -10
- package/dist/events/types/spv_vault/SpvVaultFrontEvent.js +16 -16
- package/dist/events/types/spv_vault/SpvVaultOpenEvent.d.ts +7 -7
- package/dist/events/types/spv_vault/SpvVaultOpenEvent.js +13 -13
- package/dist/events/types/swap/ClaimEvent.d.ts +7 -7
- package/dist/events/types/swap/ClaimEvent.js +11 -11
- package/dist/events/types/swap/InitializeEvent.d.ts +9 -9
- package/dist/events/types/swap/InitializeEvent.js +12 -12
- package/dist/events/types/swap/RefundEvent.d.ts +5 -5
- package/dist/events/types/swap/RefundEvent.js +7 -7
- package/dist/events/types/swap/SwapEvent.d.ts +12 -12
- package/dist/events/types/swap/SwapEvent.js +17 -17
- package/dist/index.d.ts +42 -38
- package/dist/index.js +58 -54
- package/dist/lockable/Lockable.d.ts +6 -6
- package/dist/lockable/Lockable.js +28 -28
- package/dist/messaging/Messenger.d.ts +8 -0
- package/dist/messaging/Messenger.js +2 -0
- package/dist/messaging/messages/Message.d.ts +11 -0
- package/dist/messaging/messages/Message.js +22 -0
- package/dist/messaging/messages/SwapClaimWitnessMessage.d.ts +10 -0
- package/dist/messaging/messages/SwapClaimWitnessMessage.js +28 -0
- package/dist/spv_swap/SpvVaultContract.d.ts +258 -199
- package/dist/spv_swap/SpvVaultContract.js +2 -2
- package/dist/spv_swap/SpvVaultData.d.ts +35 -35
- package/dist/spv_swap/SpvVaultData.js +37 -37
- package/dist/spv_swap/SpvWithdrawalState.d.ts +31 -31
- package/dist/spv_swap/SpvWithdrawalState.js +10 -10
- package/dist/spv_swap/SpvWithdrawalTransactionData.d.ts +43 -43
- package/dist/spv_swap/SpvWithdrawalTransactionData.js +143 -143
- package/dist/storage/IStorageManager.d.ts +15 -15
- package/dist/storage/IStorageManager.js +2 -2
- package/dist/storage/StorageObject.d.ts +3 -3
- package/dist/storage/StorageObject.js +2 -2
- package/dist/swaps/ChainSwapType.d.ts +6 -6
- package/dist/swaps/ChainSwapType.js +10 -10
- package/dist/swaps/SwapCommitState.d.ts +39 -38
- package/dist/swaps/SwapCommitState.js +11 -11
- package/dist/swaps/SwapContract.d.ts +479 -467
- package/dist/swaps/SwapContract.js +2 -2
- package/dist/swaps/SwapData.d.ts +37 -36
- package/dist/swaps/SwapData.js +17 -14
- package/dist/utils/BigIntBufferUtils.d.ts +6 -6
- package/dist/utils/BigIntBufferUtils.js +31 -31
- package/package.json +31 -31
- package/src/btc/BitcoinNetwork.ts +6 -6
- package/src/btc/rpc/BitcoinRpc.ts +77 -77
- package/src/btcrelay/BtcRelay.ts +70 -70
- package/src/btcrelay/synchronizer/RelaySynchronizer.ts +17 -17
- package/src/btcrelay/types/BtcBlock.ts +15 -15
- package/src/btcrelay/types/BtcHeader.ts +11 -11
- package/src/btcrelay/types/BtcStoredHeader.ts +12 -12
- package/src/btcrelay/utils/StatePredictorUtils.ts +108 -108
- package/src/chains/ChainData.ts +40 -40
- package/src/chains/ChainInterface.ts +159 -132
- package/src/chains/ChainType.ts +40 -38
- package/src/errors/CannotInitializeATAError.ts +11 -11
- package/src/errors/SignatureVerificationError.ts +11 -11
- package/src/errors/SwapDataVerificationError.ts +11 -11
- package/src/errors/TransactionRevertedError.ts +11 -0
- package/src/events/ChainEvents.ts +13 -13
- package/src/events/types/ChainEvent.ts +10 -10
- package/src/events/types/spv_vault/SpvVaultClaimEvent.ts +31 -31
- package/src/events/types/spv_vault/SpvVaultCloseEvent.ts +17 -17
- package/src/events/types/spv_vault/SpvVaultDepositEvent.ts +17 -17
- package/src/events/types/spv_vault/SpvVaultEvent.ts +25 -25
- package/src/events/types/spv_vault/SpvVaultFrontEvent.ts +27 -27
- package/src/events/types/spv_vault/SpvVaultOpenEvent.ts +16 -16
- package/src/events/types/swap/ClaimEvent.ts +15 -15
- package/src/events/types/swap/InitializeEvent.ts +18 -18
- package/src/events/types/swap/RefundEvent.ts +6 -6
- package/src/events/types/swap/SwapEvent.ts +21 -21
- package/src/index.ts +51 -46
- package/src/lockable/Lockable.ts +30 -30
- package/src/messaging/Messenger.ts +11 -0
- package/src/messaging/messages/Message.ts +25 -0
- package/src/messaging/messages/SwapClaimWitnessMessage.ts +34 -0
- package/src/spv_swap/SpvVaultContract.ts +269 -230
- package/src/spv_swap/SpvVaultData.ts +70 -70
- package/src/spv_swap/SpvWithdrawalState.ts +40 -40
- package/src/spv_swap/SpvWithdrawalTransactionData.ts +169 -169
- package/src/storage/IStorageManager.ts +16 -16
- package/src/storage/StorageObject.ts +6 -6
- package/src/swaps/ChainSwapType.ts +6 -6
- package/src/swaps/SwapCommitState.ts +40 -39
- package/src/swaps/SwapContract.ts +564 -556
- package/src/swaps/SwapData.ts +69 -65
- package/src/utils/BigIntBufferUtils.ts +31 -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 });
|
package/dist/swaps/SwapData.d.ts
CHANGED
|
@@ -1,36 +1,37 @@
|
|
|
1
|
-
import { ChainSwapType } from "./ChainSwapType";
|
|
2
|
-
import { StorageObject } from "../storage/StorageObject";
|
|
3
|
-
export declare abstract class SwapData implements StorageObject {
|
|
4
|
-
static deserializers: {
|
|
5
|
-
[type: string]: new (serialized: any) => any;
|
|
6
|
-
};
|
|
7
|
-
static deserialize<T extends SwapData>(data: any): T;
|
|
8
|
-
abstract getOfferer(): string;
|
|
9
|
-
abstract setOfferer(newOfferer: string): void;
|
|
10
|
-
abstract isOfferer(address: string): boolean;
|
|
11
|
-
abstract getClaimer(): string;
|
|
12
|
-
abstract setClaimer(newClaimer: string): void;
|
|
13
|
-
abstract isClaimer(address: string): boolean;
|
|
14
|
-
abstract serialize(): any;
|
|
15
|
-
abstract getType(): ChainSwapType;
|
|
16
|
-
abstract getAmount(): bigint;
|
|
17
|
-
abstract getToken(): string;
|
|
18
|
-
abstract isToken(token: string): boolean;
|
|
19
|
-
abstract getExpiry(): bigint;
|
|
20
|
-
abstract isPayOut(): boolean;
|
|
21
|
-
abstract isPayIn(): boolean;
|
|
22
|
-
abstract getClaimHash(): string;
|
|
23
|
-
abstract getEscrowHash(): string;
|
|
24
|
-
abstract getSequence?(): bigint;
|
|
25
|
-
abstract getExtraData(): string;
|
|
26
|
-
abstract getConfirmationsHint(): number;
|
|
27
|
-
abstract getNonceHint(): bigint;
|
|
28
|
-
abstract getTxoHashHint(): string;
|
|
29
|
-
abstract setExtraData(extraData: string): void;
|
|
30
|
-
abstract getSecurityDeposit(): bigint;
|
|
31
|
-
abstract getClaimerBounty(): bigint;
|
|
32
|
-
abstract getTotalDeposit(): bigint;
|
|
33
|
-
abstract getDepositToken(): string;
|
|
34
|
-
abstract isDepositToken(token: string): boolean;
|
|
35
|
-
abstract equals(other: SwapData): boolean;
|
|
36
|
-
|
|
1
|
+
import { ChainSwapType } from "./ChainSwapType";
|
|
2
|
+
import { StorageObject } from "../storage/StorageObject";
|
|
3
|
+
export declare abstract class SwapData implements StorageObject {
|
|
4
|
+
static deserializers: {
|
|
5
|
+
[type: string]: new (serialized: any) => any;
|
|
6
|
+
};
|
|
7
|
+
static deserialize<T extends SwapData>(data: any): T;
|
|
8
|
+
abstract getOfferer(): string;
|
|
9
|
+
abstract setOfferer(newOfferer: string): void;
|
|
10
|
+
abstract isOfferer(address: string): boolean;
|
|
11
|
+
abstract getClaimer(): string;
|
|
12
|
+
abstract setClaimer(newClaimer: string): void;
|
|
13
|
+
abstract isClaimer(address: string): boolean;
|
|
14
|
+
abstract serialize(): any;
|
|
15
|
+
abstract getType(): ChainSwapType;
|
|
16
|
+
abstract getAmount(): bigint;
|
|
17
|
+
abstract getToken(): string;
|
|
18
|
+
abstract isToken(token: string): boolean;
|
|
19
|
+
abstract getExpiry(): bigint;
|
|
20
|
+
abstract isPayOut(): boolean;
|
|
21
|
+
abstract isPayIn(): boolean;
|
|
22
|
+
abstract getClaimHash(): string;
|
|
23
|
+
abstract getEscrowHash(): string;
|
|
24
|
+
abstract getSequence?(): bigint;
|
|
25
|
+
abstract getExtraData(): string;
|
|
26
|
+
abstract getConfirmationsHint(): number;
|
|
27
|
+
abstract getNonceHint(): bigint;
|
|
28
|
+
abstract getTxoHashHint(): string;
|
|
29
|
+
abstract setExtraData(extraData: string): void;
|
|
30
|
+
abstract getSecurityDeposit(): bigint;
|
|
31
|
+
abstract getClaimerBounty(): bigint;
|
|
32
|
+
abstract getTotalDeposit(): bigint;
|
|
33
|
+
abstract getDepositToken(): string;
|
|
34
|
+
abstract isDepositToken(token: string): boolean;
|
|
35
|
+
abstract equals(other: SwapData): boolean;
|
|
36
|
+
hasSuccessAction(): boolean;
|
|
37
|
+
}
|
package/dist/swaps/SwapData.js
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SwapData = void 0;
|
|
4
|
-
class SwapData {
|
|
5
|
-
static deserialize(data) {
|
|
6
|
-
const deserializer = SwapData.deserializers[data.type];
|
|
7
|
-
if (deserializer != null) {
|
|
8
|
-
return new deserializer(data);
|
|
9
|
-
}
|
|
10
|
-
throw new Error(`No deserializer found for swap data type: ${data.type}`);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SwapData = void 0;
|
|
4
|
+
class SwapData {
|
|
5
|
+
static deserialize(data) {
|
|
6
|
+
const deserializer = SwapData.deserializers[data.type];
|
|
7
|
+
if (deserializer != null) {
|
|
8
|
+
return new deserializer(data);
|
|
9
|
+
}
|
|
10
|
+
throw new Error(`No deserializer found for swap data type: ${data.type}`);
|
|
11
|
+
}
|
|
12
|
+
hasSuccessAction() {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.SwapData = SwapData;
|
|
17
|
+
SwapData.deserializers = {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { Buffer } from "buffer";
|
|
3
|
-
export declare const BigIntBufferUtils: {
|
|
4
|
-
toBuffer: (value: bigint, endianness?: "be" | "le", length?: number) => Buffer;
|
|
5
|
-
fromBuffer: (value: Buffer, endianness?: "be" | "le") => bigint;
|
|
6
|
-
};
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Buffer } from "buffer";
|
|
3
|
+
export declare const BigIntBufferUtils: {
|
|
4
|
+
toBuffer: (value: bigint, endianness?: "be" | "le", length?: number) => Buffer;
|
|
5
|
+
fromBuffer: (value: Buffer, endianness?: "be" | "le") => bigint;
|
|
6
|
+
};
|
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BigIntBufferUtils = void 0;
|
|
4
|
-
const buffer_1 = require("buffer");
|
|
5
|
-
exports.BigIntBufferUtils = {
|
|
6
|
-
toBuffer: (value, endianness = "be", length) => {
|
|
7
|
-
let values = Array(length);
|
|
8
|
-
for (let i = 0; i < length; i++) {
|
|
9
|
-
values[i] = Number(value & 0xffn);
|
|
10
|
-
value >>= 8n;
|
|
11
|
-
}
|
|
12
|
-
const buff = buffer_1.Buffer.from(values);
|
|
13
|
-
if (endianness === "be")
|
|
14
|
-
buff.reverse();
|
|
15
|
-
return buff;
|
|
16
|
-
},
|
|
17
|
-
fromBuffer: (value, endianness = "be") => {
|
|
18
|
-
if (endianness === "le") {
|
|
19
|
-
const dst = buffer_1.Buffer.alloc(value.length);
|
|
20
|
-
value.copy(dst);
|
|
21
|
-
dst.reverse();
|
|
22
|
-
value = dst;
|
|
23
|
-
}
|
|
24
|
-
let accumulator = 0n;
|
|
25
|
-
for (let byte of value) {
|
|
26
|
-
accumulator <<= 8n;
|
|
27
|
-
accumulator |= BigInt(byte);
|
|
28
|
-
}
|
|
29
|
-
return accumulator;
|
|
30
|
-
}
|
|
31
|
-
};
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BigIntBufferUtils = void 0;
|
|
4
|
+
const buffer_1 = require("buffer");
|
|
5
|
+
exports.BigIntBufferUtils = {
|
|
6
|
+
toBuffer: (value, endianness = "be", length) => {
|
|
7
|
+
let values = Array(length);
|
|
8
|
+
for (let i = 0; i < length; i++) {
|
|
9
|
+
values[i] = Number(value & 0xffn);
|
|
10
|
+
value >>= 8n;
|
|
11
|
+
}
|
|
12
|
+
const buff = buffer_1.Buffer.from(values);
|
|
13
|
+
if (endianness === "be")
|
|
14
|
+
buff.reverse();
|
|
15
|
+
return buff;
|
|
16
|
+
},
|
|
17
|
+
fromBuffer: (value, endianness = "be") => {
|
|
18
|
+
if (endianness === "le") {
|
|
19
|
+
const dst = buffer_1.Buffer.alloc(value.length);
|
|
20
|
+
value.copy(dst);
|
|
21
|
+
dst.reverse();
|
|
22
|
+
value = dst;
|
|
23
|
+
}
|
|
24
|
+
let accumulator = 0n;
|
|
25
|
+
for (let byte of value) {
|
|
26
|
+
accumulator <<= 8n;
|
|
27
|
+
accumulator |= BigInt(byte);
|
|
28
|
+
}
|
|
29
|
+
return accumulator;
|
|
30
|
+
}
|
|
31
|
+
};
|
package/package.json
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@atomiqlabs/base",
|
|
3
|
-
"version": "10.0.0-dev.
|
|
4
|
-
"description": "Base classes and interfaces for atomiq protocol",
|
|
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
|
-
"Solana",
|
|
16
|
-
"Bitcoin",
|
|
17
|
-
"Cross-chain",
|
|
18
|
-
"Cryptocurrency",
|
|
19
|
-
"Bridge",
|
|
20
|
-
"Trustless"
|
|
21
|
-
],
|
|
22
|
-
"author": "adambor",
|
|
23
|
-
"license": "ISC",
|
|
24
|
-
"dependencies": {
|
|
25
|
-
"buffer": "6.0.3"
|
|
26
|
-
},
|
|
27
|
-
"devDependencies": {
|
|
28
|
-
"@types/node": "18.15.11",
|
|
29
|
-
"typescript": "4.9.5"
|
|
30
|
-
}
|
|
31
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@atomiqlabs/base",
|
|
3
|
+
"version": "10.0.0-dev.21",
|
|
4
|
+
"description": "Base classes and interfaces for atomiq protocol",
|
|
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
|
+
"Solana",
|
|
16
|
+
"Bitcoin",
|
|
17
|
+
"Cross-chain",
|
|
18
|
+
"Cryptocurrency",
|
|
19
|
+
"Bridge",
|
|
20
|
+
"Trustless"
|
|
21
|
+
],
|
|
22
|
+
"author": "adambor",
|
|
23
|
+
"license": "ISC",
|
|
24
|
+
"dependencies": {
|
|
25
|
+
"buffer": "6.0.3"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/node": "18.15.11",
|
|
29
|
+
"typescript": "4.9.5"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
export enum BitcoinNetwork {
|
|
3
|
-
MAINNET=0,
|
|
4
|
-
TESTNET=1,
|
|
5
|
-
TESTNET4=2,
|
|
6
|
-
REGTEST=3
|
|
1
|
+
|
|
2
|
+
export enum BitcoinNetwork {
|
|
3
|
+
MAINNET=0,
|
|
4
|
+
TESTNET=1,
|
|
5
|
+
TESTNET4=2,
|
|
6
|
+
REGTEST=3
|
|
7
7
|
}
|
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
import {BtcBlock} from "../../btcrelay/types/BtcBlock";
|
|
2
|
-
import {Buffer} from "buffer";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export type BtcVout = {
|
|
6
|
-
value: number,
|
|
7
|
-
n: number,
|
|
8
|
-
scriptPubKey: {
|
|
9
|
-
asm?: string,
|
|
10
|
-
hex: string
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export type BtcVin = {
|
|
15
|
-
txid: string,
|
|
16
|
-
vout: number,
|
|
17
|
-
scriptSig: {
|
|
18
|
-
asm?: string,
|
|
19
|
-
hex: string
|
|
20
|
-
},
|
|
21
|
-
sequence: number,
|
|
22
|
-
txinwitness: string[]
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
export type BtcTx = {
|
|
26
|
-
blockhash: string,
|
|
27
|
-
confirmations: number,
|
|
28
|
-
vsize: number,
|
|
29
|
-
txid: string,
|
|
30
|
-
hex: string,
|
|
31
|
-
raw: string,
|
|
32
|
-
locktime: number,
|
|
33
|
-
version: number,
|
|
34
|
-
|
|
35
|
-
outs: BtcVout[],
|
|
36
|
-
ins: BtcVin[]
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
export type BtcBlockWithTxs = {
|
|
40
|
-
height: number,
|
|
41
|
-
hash: string,
|
|
42
|
-
tx: BtcTx[]
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
export type BtcSyncInfo = {
|
|
46
|
-
ibd: boolean,
|
|
47
|
-
headers: number,
|
|
48
|
-
blocks: number,
|
|
49
|
-
verificationProgress: number
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export interface BitcoinRpc<T extends BtcBlock> {
|
|
53
|
-
|
|
54
|
-
isInMainChain(blockhash: string): Promise<boolean>;
|
|
55
|
-
getBlockHeader(blockhash: string): Promise<T>;
|
|
56
|
-
getMerkleProof(txId: string, blockhash: string): Promise<{
|
|
57
|
-
reversedTxId: Buffer,
|
|
58
|
-
pos: number,
|
|
59
|
-
merkle: Buffer[],
|
|
60
|
-
blockheight: number
|
|
61
|
-
}>;
|
|
62
|
-
getTransaction(txId: string): Promise<BtcTx>;
|
|
63
|
-
getBlockhash(height: number): Promise<string>;
|
|
64
|
-
getBlockWithTransactions(blockhash: string): Promise<BtcBlockWithTxs>;
|
|
65
|
-
|
|
66
|
-
sendRawTransaction(rawTx: string): Promise<string>;
|
|
67
|
-
sendRawPackage(rawTx: string[]): Promise<string[]>;
|
|
68
|
-
|
|
69
|
-
getTipHeight(): Promise<number>;
|
|
70
|
-
|
|
71
|
-
getSyncInfo(): Promise<BtcSyncInfo>;
|
|
72
|
-
|
|
73
|
-
parseTransaction(rawTx: string): Promise<BtcTx>;
|
|
74
|
-
isSpent(utxo: string, confirmed?: boolean): Promise<boolean>;
|
|
75
|
-
|
|
76
|
-
getEffectiveFeeRate(btcTx: BtcTx): Promise<{vsize: number, fee: number, feeRate: number}>;
|
|
77
|
-
|
|
1
|
+
import {BtcBlock} from "../../btcrelay/types/BtcBlock";
|
|
2
|
+
import {Buffer} from "buffer";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
export type BtcVout = {
|
|
6
|
+
value: number,
|
|
7
|
+
n: number,
|
|
8
|
+
scriptPubKey: {
|
|
9
|
+
asm?: string,
|
|
10
|
+
hex: string
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export type BtcVin = {
|
|
15
|
+
txid: string,
|
|
16
|
+
vout: number,
|
|
17
|
+
scriptSig: {
|
|
18
|
+
asm?: string,
|
|
19
|
+
hex: string
|
|
20
|
+
},
|
|
21
|
+
sequence: number,
|
|
22
|
+
txinwitness: string[]
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export type BtcTx = {
|
|
26
|
+
blockhash: string,
|
|
27
|
+
confirmations: number,
|
|
28
|
+
vsize: number,
|
|
29
|
+
txid: string,
|
|
30
|
+
hex: string,
|
|
31
|
+
raw: string,
|
|
32
|
+
locktime: number,
|
|
33
|
+
version: number,
|
|
34
|
+
|
|
35
|
+
outs: BtcVout[],
|
|
36
|
+
ins: BtcVin[]
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export type BtcBlockWithTxs = {
|
|
40
|
+
height: number,
|
|
41
|
+
hash: string,
|
|
42
|
+
tx: BtcTx[]
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export type BtcSyncInfo = {
|
|
46
|
+
ibd: boolean,
|
|
47
|
+
headers: number,
|
|
48
|
+
blocks: number,
|
|
49
|
+
verificationProgress: number
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface BitcoinRpc<T extends BtcBlock> {
|
|
53
|
+
|
|
54
|
+
isInMainChain(blockhash: string): Promise<boolean>;
|
|
55
|
+
getBlockHeader(blockhash: string): Promise<T>;
|
|
56
|
+
getMerkleProof(txId: string, blockhash: string): Promise<{
|
|
57
|
+
reversedTxId: Buffer,
|
|
58
|
+
pos: number,
|
|
59
|
+
merkle: Buffer[],
|
|
60
|
+
blockheight: number
|
|
61
|
+
}>;
|
|
62
|
+
getTransaction(txId: string): Promise<BtcTx>;
|
|
63
|
+
getBlockhash(height: number): Promise<string>;
|
|
64
|
+
getBlockWithTransactions(blockhash: string): Promise<BtcBlockWithTxs>;
|
|
65
|
+
|
|
66
|
+
sendRawTransaction(rawTx: string): Promise<string>;
|
|
67
|
+
sendRawPackage(rawTx: string[]): Promise<string[]>;
|
|
68
|
+
|
|
69
|
+
getTipHeight(): Promise<number>;
|
|
70
|
+
|
|
71
|
+
getSyncInfo(): Promise<BtcSyncInfo>;
|
|
72
|
+
|
|
73
|
+
parseTransaction(rawTx: string): Promise<BtcTx>;
|
|
74
|
+
isSpent(utxo: string, confirmed?: boolean): Promise<boolean>;
|
|
75
|
+
|
|
76
|
+
getEffectiveFeeRate(btcTx: BtcTx): Promise<{vsize: number, fee: number, feeRate: number}>;
|
|
77
|
+
|
|
78
78
|
}
|
package/src/btcrelay/BtcRelay.ts
CHANGED
|
@@ -1,71 +1,71 @@
|
|
|
1
|
-
import {BtcStoredHeader} from "./types/BtcStoredHeader";
|
|
2
|
-
import {BtcBlock} from "./types/BtcBlock";
|
|
3
|
-
import {Buffer} from "buffer";
|
|
4
|
-
import {AbstractSigner} from "../chains/ChainInterface";
|
|
5
|
-
|
|
6
|
-
export interface BtcRelay<
|
|
7
|
-
V extends BtcStoredHeader<any>,
|
|
8
|
-
T,
|
|
9
|
-
B extends BtcBlock,
|
|
10
|
-
Signer extends AbstractSigner = AbstractSigner
|
|
11
|
-
> {
|
|
12
|
-
|
|
13
|
-
maxHeadersPerTx: number;
|
|
14
|
-
maxForkHeadersPerTx: number;
|
|
15
|
-
maxShortForkHeadersPerTx?: number;
|
|
16
|
-
|
|
17
|
-
getTipData(): Promise<{
|
|
18
|
-
blockheight: number,
|
|
19
|
-
blockhash: string,
|
|
20
|
-
commitHash: string,
|
|
21
|
-
chainWork: Buffer
|
|
22
|
-
}>;
|
|
23
|
-
|
|
24
|
-
retrieveLogAndBlockheight(blockData: {blockhash: string, height: number}, requiredBlockheight?: number): Promise<{
|
|
25
|
-
header: V,
|
|
26
|
-
height: number
|
|
27
|
-
}>;
|
|
28
|
-
retrieveLogByCommitHash(commitHash: string, blockData: {blockhash: string, height: number}): Promise<V>;
|
|
29
|
-
|
|
30
|
-
retrieveLatestKnownBlockLog(): Promise<{
|
|
31
|
-
resultStoredHeader: V,
|
|
32
|
-
resultBitcoinHeader: B
|
|
33
|
-
}>;
|
|
34
|
-
//retrieveOnchainTip(): Promise<B>;
|
|
35
|
-
|
|
36
|
-
saveInitialHeader(signer: string, header: B, epochStart: number, pastBlocksTimestamps: number[], feeRate?: string): Promise<T>;
|
|
37
|
-
saveMainHeaders(signer: string, mainHeaders: B[], storedHeader: V, feeRate?: string): Promise<{
|
|
38
|
-
forkId: number,
|
|
39
|
-
lastStoredHeader: V,
|
|
40
|
-
tx: T,
|
|
41
|
-
computedCommitedHeaders: V[]
|
|
42
|
-
}>;
|
|
43
|
-
saveNewForkHeaders(signer: string, forkHeaders: B[], storedHeader: V, tipWork: Buffer, feeRate?: string): Promise<{
|
|
44
|
-
forkId: number,
|
|
45
|
-
lastStoredHeader: V,
|
|
46
|
-
tx: T,
|
|
47
|
-
computedCommitedHeaders: V[]
|
|
48
|
-
}>;
|
|
49
|
-
saveForkHeaders(signer: string, forkHeaders: B[], storedHeader: V, forkId: number, tipWork: Buffer, feeRate?: string): Promise<{
|
|
50
|
-
forkId: number,
|
|
51
|
-
lastStoredHeader: V,
|
|
52
|
-
tx: T,
|
|
53
|
-
computedCommitedHeaders: V[]
|
|
54
|
-
}>;
|
|
55
|
-
saveShortForkHeaders?(signer: string, forkHeaders: B[], storedHeader: V, tipWork: Buffer, feeRate?: string): Promise<{
|
|
56
|
-
forkId: number,
|
|
57
|
-
lastStoredHeader: V,
|
|
58
|
-
tx: T,
|
|
59
|
-
computedCommitedHeaders: V[]
|
|
60
|
-
}>;
|
|
61
|
-
|
|
62
|
-
getMainFeeRate?(signer: string): Promise<string>;
|
|
63
|
-
getForkFeeRate?(signer: string, forkId: number): Promise<string>;
|
|
64
|
-
|
|
65
|
-
estimateSynchronizeFee(requiredBlockheight: number, feeRate?: string): Promise<bigint>;
|
|
66
|
-
|
|
67
|
-
getFeePerBlock(feeRate?: any): Promise<bigint>;
|
|
68
|
-
|
|
69
|
-
sweepForkData?(signer: Signer, lastSweepTimestamp?: number): Promise<number | null>;
|
|
70
|
-
|
|
1
|
+
import {BtcStoredHeader} from "./types/BtcStoredHeader";
|
|
2
|
+
import {BtcBlock} from "./types/BtcBlock";
|
|
3
|
+
import {Buffer} from "buffer";
|
|
4
|
+
import {AbstractSigner} from "../chains/ChainInterface";
|
|
5
|
+
|
|
6
|
+
export interface BtcRelay<
|
|
7
|
+
V extends BtcStoredHeader<any>,
|
|
8
|
+
T,
|
|
9
|
+
B extends BtcBlock,
|
|
10
|
+
Signer extends AbstractSigner = AbstractSigner
|
|
11
|
+
> {
|
|
12
|
+
|
|
13
|
+
maxHeadersPerTx: number;
|
|
14
|
+
maxForkHeadersPerTx: number;
|
|
15
|
+
maxShortForkHeadersPerTx?: number;
|
|
16
|
+
|
|
17
|
+
getTipData(): Promise<{
|
|
18
|
+
blockheight: number,
|
|
19
|
+
blockhash: string,
|
|
20
|
+
commitHash: string,
|
|
21
|
+
chainWork: Buffer
|
|
22
|
+
}>;
|
|
23
|
+
|
|
24
|
+
retrieveLogAndBlockheight(blockData: {blockhash: string, height: number}, requiredBlockheight?: number): Promise<{
|
|
25
|
+
header: V,
|
|
26
|
+
height: number
|
|
27
|
+
}>;
|
|
28
|
+
retrieveLogByCommitHash(commitHash: string, blockData: {blockhash: string, height: number}): Promise<V>;
|
|
29
|
+
|
|
30
|
+
retrieveLatestKnownBlockLog(): Promise<{
|
|
31
|
+
resultStoredHeader: V,
|
|
32
|
+
resultBitcoinHeader: B
|
|
33
|
+
}>;
|
|
34
|
+
//retrieveOnchainTip(): Promise<B>;
|
|
35
|
+
|
|
36
|
+
saveInitialHeader(signer: string, header: B, epochStart: number, pastBlocksTimestamps: number[], feeRate?: string): Promise<T>;
|
|
37
|
+
saveMainHeaders(signer: string, mainHeaders: B[], storedHeader: V, feeRate?: string): Promise<{
|
|
38
|
+
forkId: number,
|
|
39
|
+
lastStoredHeader: V,
|
|
40
|
+
tx: T,
|
|
41
|
+
computedCommitedHeaders: V[]
|
|
42
|
+
}>;
|
|
43
|
+
saveNewForkHeaders(signer: string, forkHeaders: B[], storedHeader: V, tipWork: Buffer, feeRate?: string): Promise<{
|
|
44
|
+
forkId: number,
|
|
45
|
+
lastStoredHeader: V,
|
|
46
|
+
tx: T,
|
|
47
|
+
computedCommitedHeaders: V[]
|
|
48
|
+
}>;
|
|
49
|
+
saveForkHeaders(signer: string, forkHeaders: B[], storedHeader: V, forkId: number, tipWork: Buffer, feeRate?: string): Promise<{
|
|
50
|
+
forkId: number,
|
|
51
|
+
lastStoredHeader: V,
|
|
52
|
+
tx: T,
|
|
53
|
+
computedCommitedHeaders: V[]
|
|
54
|
+
}>;
|
|
55
|
+
saveShortForkHeaders?(signer: string, forkHeaders: B[], storedHeader: V, tipWork: Buffer, feeRate?: string): Promise<{
|
|
56
|
+
forkId: number,
|
|
57
|
+
lastStoredHeader: V,
|
|
58
|
+
tx: T,
|
|
59
|
+
computedCommitedHeaders: V[]
|
|
60
|
+
}>;
|
|
61
|
+
|
|
62
|
+
getMainFeeRate?(signer: string): Promise<string>;
|
|
63
|
+
getForkFeeRate?(signer: string, forkId: number): Promise<string>;
|
|
64
|
+
|
|
65
|
+
estimateSynchronizeFee(requiredBlockheight: number, feeRate?: string): Promise<bigint>;
|
|
66
|
+
|
|
67
|
+
getFeePerBlock(feeRate?: any): Promise<bigint>;
|
|
68
|
+
|
|
69
|
+
sweepForkData?(signer: Signer, lastSweepTimestamp?: number): Promise<number | null>;
|
|
70
|
+
|
|
71
71
|
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import {BtcStoredHeader} from "../types/BtcStoredHeader";
|
|
2
|
-
import {BtcBlock} from "../types/BtcBlock";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export interface RelaySynchronizer<V extends BtcStoredHeader<any>, T, B extends BtcBlock> {
|
|
6
|
-
|
|
7
|
-
syncToLatestTxs(signer: string, feeRate?: string): Promise<{
|
|
8
|
-
txs: T[], //Transactions required to synchronize the btc relay
|
|
9
|
-
targetCommitedHeader: V, //Latest committed header after synchronization
|
|
10
|
-
latestBlockHeader: B, //Latest block header after synchronization
|
|
11
|
-
computedHeaderMap: {[blockheight: number]: V}, //Mapping of synchronized committed headers
|
|
12
|
-
blockHeaderMap: {[blockheight: number]: B}, //Mapping of synchronized block headers
|
|
13
|
-
btcRelayTipCommitedHeader: V, //Tip committed header of the btc relay before synchronization
|
|
14
|
-
btcRelayTipBlockHeader: B, //Tip block header of the btc relay before synchronization
|
|
15
|
-
startForkId?: number
|
|
16
|
-
}>;
|
|
17
|
-
|
|
1
|
+
import {BtcStoredHeader} from "../types/BtcStoredHeader";
|
|
2
|
+
import {BtcBlock} from "../types/BtcBlock";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
export interface RelaySynchronizer<V extends BtcStoredHeader<any>, T, B extends BtcBlock> {
|
|
6
|
+
|
|
7
|
+
syncToLatestTxs(signer: string, feeRate?: string): Promise<{
|
|
8
|
+
txs: T[], //Transactions required to synchronize the btc relay
|
|
9
|
+
targetCommitedHeader: V, //Latest committed header after synchronization
|
|
10
|
+
latestBlockHeader: B, //Latest block header after synchronization
|
|
11
|
+
computedHeaderMap: {[blockheight: number]: V}, //Mapping of synchronized committed headers
|
|
12
|
+
blockHeaderMap: {[blockheight: number]: B}, //Mapping of synchronized block headers
|
|
13
|
+
btcRelayTipCommitedHeader: V, //Tip committed header of the btc relay before synchronization
|
|
14
|
+
btcRelayTipBlockHeader: B, //Tip block header of the btc relay before synchronization
|
|
15
|
+
startForkId?: number
|
|
16
|
+
}>;
|
|
17
|
+
|
|
18
18
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {Buffer} from "buffer";
|
|
2
|
-
|
|
3
|
-
export interface BtcBlock {
|
|
4
|
-
|
|
5
|
-
getVersion(): number;
|
|
6
|
-
getPrevBlockhash(): string;
|
|
7
|
-
getMerkleRoot(): string;
|
|
8
|
-
getTimestamp(): number;
|
|
9
|
-
getNbits(): number;
|
|
10
|
-
getNonce(): number;
|
|
11
|
-
getHash(): string;
|
|
12
|
-
getHeight(): number;
|
|
13
|
-
getChainWork(): Buffer;
|
|
14
|
-
|
|
15
|
-
}
|
|
1
|
+
import {Buffer} from "buffer";
|
|
2
|
+
|
|
3
|
+
export interface BtcBlock {
|
|
4
|
+
|
|
5
|
+
getVersion(): number;
|
|
6
|
+
getPrevBlockhash(): string;
|
|
7
|
+
getMerkleRoot(): string;
|
|
8
|
+
getTimestamp(): number;
|
|
9
|
+
getNbits(): number;
|
|
10
|
+
getNonce(): number;
|
|
11
|
+
getHash(): string;
|
|
12
|
+
getHeight(): number;
|
|
13
|
+
getChainWork(): Buffer;
|
|
14
|
+
|
|
15
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {Buffer} from "buffer";
|
|
2
|
-
|
|
3
|
-
export interface BtcHeader {
|
|
4
|
-
|
|
5
|
-
getVersion(): number,
|
|
6
|
-
getReversedPrevBlockhash(): Buffer,
|
|
7
|
-
getMerkleRoot(): Buffer,
|
|
8
|
-
getTimestamp(): number,
|
|
9
|
-
getNbits(): number,
|
|
10
|
-
getNonce(): number
|
|
11
|
-
|
|
1
|
+
import {Buffer} from "buffer";
|
|
2
|
+
|
|
3
|
+
export interface BtcHeader {
|
|
4
|
+
|
|
5
|
+
getVersion(): number,
|
|
6
|
+
getReversedPrevBlockhash(): Buffer,
|
|
7
|
+
getMerkleRoot(): Buffer,
|
|
8
|
+
getTimestamp(): number,
|
|
9
|
+
getNbits(): number,
|
|
10
|
+
getNonce(): number
|
|
11
|
+
|
|
12
12
|
}
|