@tatumio/bch 2.0.1-alpha.357 → 2.0.1-alpha.358
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +10 -10
- package/src/index.d.ts +6 -1
- package/src/index.js +2 -1
- package/src/index.js.map +1 -1
- package/src/lib/__tests__/mocked.tx.d.ts +31 -0
- package/src/lib/__tests__/mocked.tx.js +50 -0
- package/src/lib/__tests__/mocked.tx.js.map +1 -0
- package/src/lib/bch.sdk.d.ts +42 -26
- package/src/lib/bch.sdk.errors.d.ts +1 -1
- package/src/lib/bch.sdk.errors.js.map +1 -1
- package/src/lib/bch.sdk.js +7 -3
- package/src/lib/bch.sdk.js.map +1 -1
- package/src/lib/{bch.sdk.tx.d.ts → bch.sdk.types.d.ts} +4 -2
- package/src/lib/bch.sdk.types.js +3 -0
- package/src/lib/bch.sdk.types.js.map +1 -0
- package/src/lib/services/bch.sdk.kms.d.ts +9 -0
- package/src/lib/services/bch.sdk.kms.js +33 -0
- package/src/lib/services/bch.sdk.kms.js.map +1 -0
- package/src/lib/services/bch.sdk.offchain.d.ts +9 -0
- package/src/lib/services/bch.sdk.offchain.js +41 -0
- package/src/lib/services/bch.sdk.offchain.js.map +1 -0
- package/src/lib/services/bch.sdk.tx.d.ts +11 -0
- package/src/lib/services/bch.sdk.tx.js +124 -0
- package/src/lib/services/bch.sdk.tx.js.map +1 -0
- package/src/lib/services/bch.sdk.virtualAccount.d.ts +28 -0
- package/src/lib/services/bch.sdk.virtualAccount.js +153 -0
- package/src/lib/services/bch.sdk.virtualAccount.js.map +1 -0
- package/src/lib/utils/bch.address.d.ts +1 -0
- package/src/lib/utils/bch.address.js +2 -1
- package/src/lib/utils/bch.address.js.map +1 -1
- package/src/lib/bch.sdk.tx.js +0 -98
- package/src/lib/bch.sdk.tx.js.map +0 -1
package/package.json
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
{
|
2
2
|
"name": "@tatumio/bch",
|
3
|
-
"version": "2.0.1-alpha.
|
3
|
+
"version": "2.0.1-alpha.358",
|
4
4
|
"license": "MIT",
|
5
5
|
"main": "./src/index.js",
|
6
6
|
"types": "./src/index.d.ts",
|
7
7
|
"dependencies": {
|
8
|
-
"@tatumio/
|
9
|
-
"@tatumio/api-client": "2.0.1-alpha.357",
|
8
|
+
"@tatumio/api-client": "2.0.1-alpha.358",
|
10
9
|
"axios": "^0.26.0",
|
11
10
|
"form-data": "^4.0.0",
|
12
|
-
"@tatumio/shared-testing-
|
13
|
-
"@tatumio/shared-
|
14
|
-
"@tatumio/shared-abstract-sdk": "2.0.1-alpha.357",
|
11
|
+
"@tatumio/shared-testing-common": "2.0.1-alpha.358",
|
12
|
+
"@tatumio/shared-abstract-sdk": "2.0.1-alpha.358",
|
15
13
|
"bignumber.js": "^9.0.2",
|
16
|
-
"@tatumio/shared-core": "2.0.1-alpha.
|
17
|
-
"@tatumio/shared-blockchain-
|
14
|
+
"@tatumio/shared-core": "2.0.1-alpha.358",
|
15
|
+
"@tatumio/shared-blockchain-btc-based": "2.0.1-alpha.358",
|
16
|
+
"@tatumio/shared-blockchain-abstract": "2.0.1-alpha.358",
|
18
17
|
"bip32": "^2.0.5",
|
19
18
|
"bip39": "^3.0.2",
|
20
19
|
"bitcoinjs-lib": "^5.2.0",
|
21
20
|
"hdkey": "^2.0.1",
|
22
21
|
"bitcore-lib": "8.25.8",
|
23
|
-
"coininfo": "^5.1.0",
|
24
22
|
"@tatumio/bitcoincashjs2-lib": "^4.1.2",
|
25
|
-
"lodash": "^4.17.21",
|
26
23
|
"cashaddrjs": "^0.4.4",
|
24
|
+
"coininfo": "^5.1.0",
|
25
|
+
"lodash": "^4.17.21",
|
26
|
+
"bitcore-lib-cash": "^8.25.40",
|
27
27
|
"tslib": "^2.0.0"
|
28
28
|
},
|
29
29
|
"peerDependencies": {}
|
package/src/index.d.ts
CHANGED
@@ -1,4 +1,9 @@
|
|
1
|
+
import { BchTx } from '@tatumio/api-client';
|
2
|
+
export declare type BchApiCallsType = {
|
3
|
+
bchGetRawTransaction: (hash: string) => Promise<BchTx>;
|
4
|
+
};
|
1
5
|
export * from './lib/bch.sdk';
|
2
6
|
export * from './lib/bch.sdk.wallet';
|
3
|
-
export {
|
7
|
+
export { bchTransactions } from './lib/services/bch.sdk.tx';
|
4
8
|
export * from './lib/bch.wallet.utils';
|
9
|
+
export * from './lib/bch.sdk.types';
|
package/src/index.js
CHANGED
@@ -4,7 +4,8 @@ exports.bchTransactions = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
5
5
|
tslib_1.__exportStar(require("./lib/bch.sdk"), exports);
|
6
6
|
tslib_1.__exportStar(require("./lib/bch.sdk.wallet"), exports);
|
7
|
-
var bch_sdk_tx_1 = require("./lib/bch.sdk.tx");
|
7
|
+
var bch_sdk_tx_1 = require("./lib/services/bch.sdk.tx");
|
8
8
|
Object.defineProperty(exports, "bchTransactions", { enumerable: true, get: function () { return bch_sdk_tx_1.bchTransactions; } });
|
9
9
|
tslib_1.__exportStar(require("./lib/bch.wallet.utils"), exports);
|
10
|
+
tslib_1.__exportStar(require("./lib/bch.sdk.types"), exports);
|
10
11
|
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/blockchain/bch/src/index.ts"],"names":[],"mappings":";;;;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/blockchain/bch/src/index.ts"],"names":[],"mappings":";;;;AAMA,wDAA6B;AAC7B,+DAAoC;AACpC,wDAA2D;AAAlD,6GAAA,eAAe,OAAA;AACxB,iEAAsC;AACtC,8DAAmC"}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
export declare const tx1: {
|
2
|
+
hex: string;
|
3
|
+
txid: string;
|
4
|
+
size: number;
|
5
|
+
version: number;
|
6
|
+
locktime: number;
|
7
|
+
vin: {
|
8
|
+
txid: string;
|
9
|
+
vout: number;
|
10
|
+
scriptSig: {
|
11
|
+
asm: string;
|
12
|
+
hex: string;
|
13
|
+
};
|
14
|
+
sequence: number;
|
15
|
+
}[];
|
16
|
+
vout: {
|
17
|
+
value: number;
|
18
|
+
n: number;
|
19
|
+
scriptPubKey: {
|
20
|
+
asm: string;
|
21
|
+
hex: string;
|
22
|
+
reqSigs: number;
|
23
|
+
type: string;
|
24
|
+
addresses: string[];
|
25
|
+
};
|
26
|
+
}[];
|
27
|
+
blockhash: string;
|
28
|
+
confirmations: number;
|
29
|
+
time: number;
|
30
|
+
blocktime: number;
|
31
|
+
};
|
@@ -0,0 +1,50 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.tx1 = void 0;
|
4
|
+
exports.tx1 = {
|
5
|
+
hex: '0200000001be829223456ef71e0a5f2953b0147bf54e91ff2c249c26a5b9adfd4c4de4f9c2010000006441dbfab0bc5eb7540f2d6419347f8dcf869e2220079048c5851f44e6e2066746157a92ad12ea0cc6666a8d80f8856c2680d6f3023d493fe0fc68c51956571f153241210316f66bbc017bc50df20efb0e6bf86fa6dd2c812d0c2da120f69bc0e99f28229bffffffff0240420f00000000001976a914e831bb079ba85eb9013773b7023ee8c482a62f8f88ace0673500000000001976a914ada119a49237d2915c053935a7e00f74e486652a88ac00000000',
|
6
|
+
txid: '3c5c04ce94d1573b63f0d94fd2a2bc8d59e21ac7ae14e49e227ad2e3e2f71ed5',
|
7
|
+
size: 219,
|
8
|
+
version: 2,
|
9
|
+
locktime: 0,
|
10
|
+
vin: [
|
11
|
+
{
|
12
|
+
txid: 'c2f9e44d4cfdad1235269c242cff914ef57b14b053295f0a1ef76e85339282be',
|
13
|
+
vout: 1,
|
14
|
+
scriptSig: {
|
15
|
+
asm: 'dbfab0bc5eb7540f2d6419347f8dcf869e2220079048c5851f44e6e2066746157a92ad12ea0cc6666a8d80f8856c2680d6f3023d493fe0fc68c51956571f153241 0316f66bbc017bc50df20efb0e6bf86fa6dd2c812d0c2da120f69bc0e99f28229b',
|
16
|
+
hex: '41dbfab0bc5eb7540f2d6419347f8dcf869e2220079048c5851f44e6e2066746157a92ad12ea0cc6666a8d80f8856c2680d6f3023d493fe0fc68c51956571f153241210316f66bbc017bc50df20efb0e6bf86fa6dd2c812d0c2da120f69bc0e99f28229b',
|
17
|
+
},
|
18
|
+
sequence: 4294967295,
|
19
|
+
},
|
20
|
+
],
|
21
|
+
vout: [
|
22
|
+
{
|
23
|
+
value: 0.01,
|
24
|
+
n: 0,
|
25
|
+
scriptPubKey: {
|
26
|
+
asm: 'OP_DUP OP_HASH160 e831bb079ba85eb9013773b7023ee8c482a62f8f OP_EQUALVERIFY OP_CHECKSIG',
|
27
|
+
hex: '76a914e831bb079ba85eb9013773b7023ee8c482a62f8f88ac',
|
28
|
+
reqSigs: 1,
|
29
|
+
type: 'pubkeyhash',
|
30
|
+
addresses: ['qr5rrwc8nw59awgpxaemwq37arzg9f303u9fp2ws65'],
|
31
|
+
},
|
32
|
+
},
|
33
|
+
{
|
34
|
+
value: 0.035,
|
35
|
+
n: 1,
|
36
|
+
scriptPubKey: {
|
37
|
+
asm: 'OP_DUP OP_HASH160 ada119a49237d2915c053935a7e00f74e486652a OP_EQUALVERIFY OP_CHECKSIG',
|
38
|
+
hex: '76a914ada119a49237d2915c053935a7e00f74e486652a88ac',
|
39
|
+
reqSigs: 1,
|
40
|
+
type: 'pubkeyhash',
|
41
|
+
addresses: ['qzk6zxdyjgma9y2uq5untflqpa6wfpn99gxh5sdrtl'],
|
42
|
+
},
|
43
|
+
},
|
44
|
+
],
|
45
|
+
blockhash: '0000000008056815cde178647c723234bf33738ee9be483e22fbb5788e38771b',
|
46
|
+
confirmations: 6,
|
47
|
+
time: 1666781723,
|
48
|
+
blocktime: 1666781723,
|
49
|
+
};
|
50
|
+
//# sourceMappingURL=mocked.tx.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"mocked.tx.js","sourceRoot":"","sources":["../../../../../../../packages/blockchain/bch/src/lib/__tests__/mocked.tx.ts"],"names":[],"mappings":";;;AAAa,QAAA,GAAG,GAAG;IACjB,GAAG,EAAE,wbAAwb;IAC7b,IAAI,EAAE,kEAAkE;IACxE,IAAI,EAAE,GAAG;IACT,OAAO,EAAE,CAAC;IACV,QAAQ,EAAE,CAAC;IACX,GAAG,EAAE;QACH;YACE,IAAI,EAAE,kEAAkE;YACxE,IAAI,EAAE,CAAC;YACP,SAAS,EAAE;gBACT,GAAG,EAAE,uMAAuM;gBAC5M,GAAG,EAAE,0MAA0M;aAChN;YACD,QAAQ,EAAE,UAAU;SACrB;KACF;IACD,IAAI,EAAE;QACJ;YACE,KAAK,EAAE,IAAI;YACX,CAAC,EAAE,CAAC;YACJ,YAAY,EAAE;gBACZ,GAAG,EAAE,uFAAuF;gBAC5F,GAAG,EAAE,oDAAoD;gBACzD,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,YAAY;gBAClB,SAAS,EAAE,CAAC,4CAA4C,CAAC;aAC1D;SACF;QACD;YACE,KAAK,EAAE,KAAK;YACZ,CAAC,EAAE,CAAC;YACJ,YAAY,EAAE;gBACZ,GAAG,EAAE,uFAAuF;gBAC5F,GAAG,EAAE,oDAAoD;gBACzD,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,YAAY;gBAClB,SAAS,EAAE,CAAC,4CAA4C,CAAC;aAC1D;SACF;KACF;IACD,SAAS,EAAE,kEAAkE;IAC7E,aAAa,EAAE,CAAC;IAChB,IAAI,EAAE,UAAU;IAChB,SAAS,EAAE,UAAU;CACtB,CAAA"}
|
package/src/lib/bch.sdk.d.ts
CHANGED
@@ -1,6 +1,15 @@
|
|
1
1
|
import { BitcoinCashService } from '@tatumio/api-client';
|
2
2
|
import { SDKArguments } from '@tatumio/shared-abstract-sdk';
|
3
|
-
|
3
|
+
import { BchApiCallsType } from '..';
|
4
|
+
export declare const TatumBchSDK: (args: SDKArguments, apiCalls?: BchApiCallsType) => {
|
5
|
+
kms: {
|
6
|
+
signBitcoinCashKMSTransaction: (tx: import("@tatumio/api-client").PendingTransaction, privateKeys: string[], testnet: boolean) => Promise<any>;
|
7
|
+
sign(tx: import("@tatumio/api-client").PendingTransaction, privateKeys: string[]): Promise<string>;
|
8
|
+
getAllPending(signatures?: string): import("@tatumio/api-client").CancelablePromise<import("@tatumio/api-client").PendingTransaction[]>;
|
9
|
+
get: typeof import("@tatumio/api-client").KeyManagementSystemService.getPendingTransactionToSign;
|
10
|
+
complete: typeof import("@tatumio/api-client").KeyManagementSystemService.completePendingSignature;
|
11
|
+
delete: typeof import("@tatumio/api-client").KeyManagementSystemService.deletePendingTransactionToSign;
|
12
|
+
};
|
4
13
|
wallet: {
|
5
14
|
generateAddressFromXPub(xpub: string, i: number, options?: {
|
6
15
|
testnet: boolean;
|
@@ -15,7 +24,38 @@ export declare const TatumBchSDK: (args: SDKArguments) => {
|
|
15
24
|
testnet: boolean;
|
16
25
|
}): Promise<import("@tatumio/api-client").TronWallet>;
|
17
26
|
};
|
18
|
-
transaction:
|
27
|
+
transaction: {
|
28
|
+
sendTransaction: (body: import("./bch.sdk.types").BchTransactionTypes, args: {
|
29
|
+
testnet?: boolean;
|
30
|
+
}) => Promise<import("@tatumio/api-client").TransactionHash>;
|
31
|
+
prepareSignedTransaction: (body: import("./bch.sdk.types").BchTransactionTypes, args: {
|
32
|
+
testnet?: boolean;
|
33
|
+
}) => Promise<string>;
|
34
|
+
};
|
35
|
+
virtualAccount: {
|
36
|
+
send: (isTestnet: boolean, body: import("@tatumio/api-client").TransferBchMnemonic | import("@tatumio/api-client").TransferBchKeyPair | import("@tatumio/api-client").TransferBchKMS) => Promise<{
|
37
|
+
completed?: boolean;
|
38
|
+
txId?: string;
|
39
|
+
id?: undefined;
|
40
|
+
} | {
|
41
|
+
id: string;
|
42
|
+
} | import("@tatumio/api-client").OffchainTransactionSignatureResult>;
|
43
|
+
depositAddress: {
|
44
|
+
checkExists: (address: string, index?: number) => Promise<any>;
|
45
|
+
create: any;
|
46
|
+
createMultiple: any;
|
47
|
+
assign: any;
|
48
|
+
remove: any;
|
49
|
+
getByAccount: any;
|
50
|
+
};
|
51
|
+
withdrawal: {
|
52
|
+
getAll: (status?: "InProgress" | "Done" | "Cancelled", pageSize?: number, offset?: number) => Promise<any[]>;
|
53
|
+
broadcast: any;
|
54
|
+
create: any;
|
55
|
+
complete: any;
|
56
|
+
};
|
57
|
+
storeTokenAddress: any;
|
58
|
+
};
|
19
59
|
blockchain: {
|
20
60
|
info: typeof BitcoinCashService.bchGetBlockChainInfo;
|
21
61
|
broadcast: typeof BitcoinCashService.bchBroadcast;
|
@@ -25,30 +65,6 @@ export declare const TatumBchSDK: (args: SDKArguments) => {
|
|
25
65
|
getTransaction: typeof BitcoinCashService.bchGetRawTransaction;
|
26
66
|
send: typeof BitcoinCashService.bchTransferBlockchain;
|
27
67
|
};
|
28
|
-
kms: {
|
29
|
-
sign(tx: import("@tatumio/api-client").PendingTransaction, privateKeys: string[]): Promise<string>;
|
30
|
-
getAllPending(signatures?: string): import("@tatumio/api-client").CancelablePromise<import("@tatumio/api-client").PendingTransaction[]>;
|
31
|
-
get: typeof import("@tatumio/api-client").KeyManagementSystemService.getPendingTransactionToSign;
|
32
|
-
complete: typeof import("@tatumio/api-client").KeyManagementSystemService.completePendingSignature;
|
33
|
-
delete: typeof import("@tatumio/api-client").KeyManagementSystemService.deletePendingTransactionToSign;
|
34
|
-
};
|
35
|
-
virtualAccount: {
|
36
|
-
depositAddress: {
|
37
|
-
checkExists: (address: string, index?: number) => Promise<import("@tatumio/api-client").Account>;
|
38
|
-
create: typeof import("@tatumio/api-client").BlockchainAddressesService.generateDepositAddress;
|
39
|
-
createMultiple: typeof import("@tatumio/api-client").BlockchainAddressesService.generateDepositAddressesBatch;
|
40
|
-
assign: typeof import("@tatumio/api-client").BlockchainAddressesService.assignAddress;
|
41
|
-
remove: typeof import("@tatumio/api-client").BlockchainAddressesService.removeAddress;
|
42
|
-
getByAccount: typeof import("@tatumio/api-client").BlockchainAddressesService.getAllDepositAddresses;
|
43
|
-
};
|
44
|
-
withdrawal: {
|
45
|
-
getAll: (status?: "InProgress" | "Done" | "Cancelled", pageSize?: number, offset?: number) => Promise<import("@tatumio/api-client").WithdrawalObject[]>;
|
46
|
-
broadcast: typeof import("@tatumio/api-client").WithdrawalService.broadcastBlockchainTransaction;
|
47
|
-
create: typeof import("@tatumio/api-client").WithdrawalService.storeWithdrawal;
|
48
|
-
complete: typeof import("@tatumio/api-client").WithdrawalService.completeWithdrawal;
|
49
|
-
};
|
50
|
-
storeTokenAddress: typeof import("@tatumio/api-client").BlockchainOperationsService.storeTokenAddress;
|
51
|
-
};
|
52
68
|
getExchangeRate(basePair?: import("@tatumio/api-client").Fiat): import("@tatumio/api-client").CancelablePromise<import("@tatumio/api-client").ExchangeRate>;
|
53
69
|
storage: {
|
54
70
|
upload: typeof import("@tatumio/api-client").IpfsService.storeIpfs;
|
@@ -2,7 +2,7 @@ import { SdkError, SdkErrorCode } from '@tatumio/shared-abstract-sdk';
|
|
2
2
|
export declare const BCH_ERRORS_MAPPING: {
|
3
3
|
'Transaction has absurd fees': SdkErrorCode;
|
4
4
|
};
|
5
|
-
export declare type BchSdkErrorCode = SdkErrorCode.BTC_BASED_FEE_TOO_SMALL | SdkErrorCode.BTC_BASED_UTXO_NOT_FOUND | SdkErrorCode.BTC_BASED_NOT_ENOUGH_BALANCE;
|
5
|
+
export declare type BchSdkErrorCode = SdkErrorCode.BTC_BASED_FEE_TOO_SMALL | SdkErrorCode.BTC_BASED_UTXO_NOT_FOUND | SdkErrorCode.BTC_BASED_NOT_ENOUGH_BALANCE | SdkErrorCode.BTC_BASED_WRONG_BODY | SdkErrorCode.UNSUPPORTED_CHAIN | SdkErrorCode.BTC_BASED_TX_PREPARATION_UTXO | SdkErrorCode.BTC_BASED_DESTINATION_LESS_THAN_ZERO | SdkErrorCode.BTC_BASED_MNEMONIC_OR_KEYPAIR_EXPECTED | SdkErrorCode.BTC_BASED_TX_FAILED | SdkErrorCode.BTC_BASED_BLOCKCHAIN_ERROR;
|
6
6
|
export declare class BchSdkError extends SdkError {
|
7
7
|
constructor(error: Error | BchSdkErrorCode);
|
8
8
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"bch.sdk.errors.js","sourceRoot":"","sources":["../../../../../../packages/blockchain/bch/src/lib/bch.sdk.errors.ts"],"names":[],"mappings":";;;AAAA,sEAAqE;AAExD,QAAA,kBAAkB,GAAG;IAChC,6BAA6B,EAAE,kCAAY,CAAC,oBAAoB;CACjE,CAAA;
|
1
|
+
{"version":3,"file":"bch.sdk.errors.js","sourceRoot":"","sources":["../../../../../../packages/blockchain/bch/src/lib/bch.sdk.errors.ts"],"names":[],"mappings":";;;AAAA,sEAAqE;AAExD,QAAA,kBAAkB,GAAG;IAChC,6BAA6B,EAAE,kCAAY,CAAC,oBAAoB;CACjE,CAAA;AAcD,MAAa,WAAY,SAAQ,8BAAQ;IACvC,YAAY,KAA8B;QACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,KAAK,CAAC;gBACJ,IAAI,EAAE,KAAK;aACZ,CAAC,CAAA;SACH;aAAM;YACL,KAAK,CAAC;gBACJ,aAAa,EAAE,KAAK;gBACpB,qBAAqB,EAAE,0BAAkB;aAC1C,CAAC,CAAA;SACH;IACH,CAAC;CACF;AAbD,kCAaC"}
|
package/src/lib/bch.sdk.js
CHANGED
@@ -4,11 +4,15 @@ exports.TatumBchSDK = void 0;
|
|
4
4
|
const shared_core_1 = require("@tatumio/shared-core");
|
5
5
|
const shared_blockchain_btc_based_1 = require("@tatumio/shared-blockchain-btc-based");
|
6
6
|
const api_client_1 = require("@tatumio/api-client");
|
7
|
-
const bch_sdk_tx_1 = require("./bch.sdk.tx");
|
7
|
+
const bch_sdk_tx_1 = require("./services/bch.sdk.tx");
|
8
8
|
const bch_sdk_wallet_1 = require("./bch.sdk.wallet");
|
9
|
+
const bch_sdk_virtualAccount_1 = require("./services/bch.sdk.virtualAccount");
|
10
|
+
const bch_sdk_kms_1 = require("./services/bch.sdk.kms");
|
9
11
|
const blockchain = shared_core_1.Blockchain.BCH;
|
10
|
-
const TatumBchSDK = (args
|
11
|
-
|
12
|
+
const TatumBchSDK = (args, apiCalls = {
|
13
|
+
bchGetRawTransaction: api_client_1.ApiServices.blockchain.bcash.bchGetRawTransaction,
|
14
|
+
}) => {
|
15
|
+
return Object.assign(Object.assign({}, (0, shared_blockchain_btc_based_1.btcBasedSdk)(Object.assign(Object.assign({}, args), { blockchain }))), { kms: Object.assign(Object.assign({}, (0, shared_blockchain_btc_based_1.btcBasedSdk)(Object.assign(Object.assign({}, args), { blockchain })).kms), { signBitcoinCashKMSTransaction: bch_sdk_kms_1.signBitcoinCashKMSTransaction }), wallet: (0, bch_sdk_wallet_1.bchWallet)(), transaction: (0, bch_sdk_tx_1.bchTransactions)(apiCalls), virtualAccount: Object.assign(Object.assign({}, (0, shared_blockchain_btc_based_1.btcBasedSdk)(Object.assign(Object.assign({}, args), { blockchain })).virtualAccount), (0, bch_sdk_virtualAccount_1.virtualAccountService)({ blockchain })), blockchain: {
|
12
16
|
info: api_client_1.BitcoinCashService.bchGetBlockChainInfo,
|
13
17
|
broadcast: api_client_1.BitcoinCashService.bchBroadcast,
|
14
18
|
getBlockHash: api_client_1.BitcoinCashService.bchGetBlockHash,
|
package/src/lib/bch.sdk.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"bch.sdk.js","sourceRoot":"","sources":["../../../../../../packages/blockchain/bch/src/lib/bch.sdk.ts"],"names":[],"mappings":";;;AAAA,sDAAiD;AACjD,sFAAkE;AAClE,
|
1
|
+
{"version":3,"file":"bch.sdk.js","sourceRoot":"","sources":["../../../../../../packages/blockchain/bch/src/lib/bch.sdk.ts"],"names":[],"mappings":";;;AAAA,sDAAiD;AACjD,sFAAkE;AAClE,oDAAqE;AAErE,sDAAuD;AACvD,qDAA4C;AAE5C,8EAAyE;AACzE,wDAAsE;AAEtE,MAAM,UAAU,GAAG,wBAAU,CAAC,GAAG,CAAA;AAE1B,MAAM,WAAW,GAAG,CACzB,IAAkB,EAClB,WAA4B;IAC1B,oBAAoB,EAAE,wBAAW,CAAC,UAAU,CAAC,KAAK,CAAC,oBAAoB;CACxE,EACD,EAAE;IACF,uCACK,IAAA,yCAAW,kCAAM,IAAI,KAAE,UAAU,IAAG,KACvC,GAAG,kCACE,IAAA,yCAAW,kCAAM,IAAI,KAAE,UAAU,IAAG,CAAC,GAAG,KAC3C,6BAA6B,EAA7B,2CAA6B,KAE/B,MAAM,EAAE,IAAA,0BAAS,GAAE,EACnB,WAAW,EAAE,IAAA,4BAAe,EAAC,QAAQ,CAAC,EACtC,cAAc,kCACT,IAAA,yCAAW,kCAAM,IAAI,KAAE,UAAU,IAAG,CAAC,cAAc,GACnD,IAAA,8CAAqB,EAAC,EAAE,UAAU,EAAE,CAAC,GAE1C,UAAU,EAAE;YACV,IAAI,EAAE,+BAAkB,CAAC,oBAAoB;YAC7C,SAAS,EAAE,+BAAkB,CAAC,YAAY;YAC1C,YAAY,EAAE,+BAAkB,CAAC,eAAe;YAChD,QAAQ,EAAE,+BAAkB,CAAC,WAAW;YACxC,eAAe,EAAE,+BAAkB,CAAC,iBAAiB;YACrD,cAAc,EAAE,+BAAkB,CAAC,oBAAoB;YACvD,IAAI,EAAE,+BAAkB,CAAC,qBAAqB;SAC/C,IACF;AACH,CAAC,CAAA;AA5BY,QAAA,WAAW,eA4BvB"}
|
@@ -1,4 +1,6 @@
|
|
1
1
|
import { BchTransaction, BchTransactionKMS } from '@tatumio/api-client';
|
2
|
-
import { BtcBasedTx } from '@tatumio/shared-blockchain-btc-based';
|
3
2
|
export declare type BchTransactionTypes = BchTransaction | BchTransactionKMS;
|
4
|
-
export
|
3
|
+
export interface Signature {
|
4
|
+
id: string;
|
5
|
+
index?: number;
|
6
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"bch.sdk.types.js","sourceRoot":"","sources":["../../../../../../packages/blockchain/bch/src/lib/bch.sdk.types.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { PendingTransaction } from '@tatumio/api-client';
|
2
|
+
/**
|
3
|
+
* Sign Bitcoin Cash pending transaction from Tatum KMS
|
4
|
+
* @param tx pending transaction from KMS
|
5
|
+
* @param privateKeys private keys to sign transaction with.
|
6
|
+
* @param testnet mainnet or testnet version
|
7
|
+
* @returns transaction data to be broadcast to blockchain.
|
8
|
+
*/
|
9
|
+
export declare const signBitcoinCashKMSTransaction: (tx: PendingTransaction, privateKeys: string[], testnet: boolean) => Promise<any>;
|
@@ -0,0 +1,33 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.signBitcoinCashKMSTransaction = void 0;
|
4
|
+
const tslib_1 = require("tslib");
|
5
|
+
// @ts-ignore
|
6
|
+
const coininfo = tslib_1.__importStar(require("coininfo"));
|
7
|
+
// @ts-ignore
|
8
|
+
const BitcoinCashJS = tslib_1.__importStar(require("@tatumio/bitcoincashjs2-lib"));
|
9
|
+
const api_client_1 = require("@tatumio/api-client");
|
10
|
+
/**
|
11
|
+
* Sign Bitcoin Cash pending transaction from Tatum KMS
|
12
|
+
* @param tx pending transaction from KMS
|
13
|
+
* @param privateKeys private keys to sign transaction with.
|
14
|
+
* @param testnet mainnet or testnet version
|
15
|
+
* @returns transaction data to be broadcast to blockchain.
|
16
|
+
*/
|
17
|
+
const signBitcoinCashKMSTransaction = (tx, privateKeys, testnet) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
18
|
+
if (tx.chain !== api_client_1.Currency.BCH) {
|
19
|
+
throw Error('Unsupported chain.');
|
20
|
+
}
|
21
|
+
const [data, amountsToDecode] = tx.serializedTransaction.split(':');
|
22
|
+
const transaction = BitcoinCashJS.Transaction.fromHex(data);
|
23
|
+
const amountsToSign = JSON.parse(amountsToDecode);
|
24
|
+
const network = testnet ? coininfo.bitcoincash.test.toBitcoinJS() : coininfo.bitcoincash.main.toBitcoinJS();
|
25
|
+
const builder = BitcoinCashJS.TransactionBuilder.fromTransaction(transaction, network);
|
26
|
+
for (const [i, privateKey] of privateKeys.entries()) {
|
27
|
+
const ecPair = BitcoinCashJS.ECPair.fromWIF(privateKey, network);
|
28
|
+
builder.sign(i, ecPair, undefined, 0x01, amountsToSign[i], undefined, BitcoinCashJS.ECSignature.SCHNORR);
|
29
|
+
}
|
30
|
+
return builder.build().toHex();
|
31
|
+
});
|
32
|
+
exports.signBitcoinCashKMSTransaction = signBitcoinCashKMSTransaction;
|
33
|
+
//# sourceMappingURL=bch.sdk.kms.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"bch.sdk.kms.js","sourceRoot":"","sources":["../../../../../../../packages/blockchain/bch/src/lib/services/bch.sdk.kms.ts"],"names":[],"mappings":";;;;AACA,aAAa;AACb,2DAAoC;AACpC,aAAa;AACb,mFAA4D;AAC5D,oDAA8C;AAE9C;;;;;;GAMG;AACI,MAAM,6BAA6B,GAAG,CAC3C,EAAsB,EACtB,WAAqB,EACrB,OAAgB,EAChB,EAAE;IACF,IAAI,EAAE,CAAC,KAAK,KAAK,qBAAQ,CAAC,GAAG,EAAE;QAC7B,MAAM,KAAK,CAAC,oBAAoB,CAAC,CAAA;KAClC;IACD,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACnE,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;IACjD,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;IAC3G,MAAM,OAAO,GAAG,aAAa,CAAC,kBAAkB,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IACtF,KAAK,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE;QACnD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;KACzG;IACD,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAA;AAChC,CAAC,CAAA,CAAA;AAlBY,QAAA,6BAA6B,iCAkBzC"}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { PendingTransaction } from '@tatumio/api-client';
|
2
|
+
/**
|
3
|
+
* Sign Bitcoin Cash pending transaction from Tatum KMS
|
4
|
+
* @param tx pending transaction from KMS
|
5
|
+
* @param mnemonic mnemonic to generate private keys to sign transaction with.
|
6
|
+
* @param testnet mainnet or testnet version
|
7
|
+
* @returns transaction data to be broadcast to blockchain.
|
8
|
+
*/
|
9
|
+
export declare const signKmsTransactionFromVirtualAccount: (tx: PendingTransaction, mnemonic: string, testnet: boolean) => Promise<any>;
|
@@ -0,0 +1,41 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.signKmsTransactionFromVirtualAccount = void 0;
|
4
|
+
const tslib_1 = require("tslib");
|
5
|
+
// @ts-ignore
|
6
|
+
const coininfo = tslib_1.__importStar(require("coininfo"));
|
7
|
+
const api_client_1 = require("@tatumio/api-client");
|
8
|
+
const bch_sdk_wallet_1 = require("../bch.sdk.wallet");
|
9
|
+
// @ts-ignore
|
10
|
+
const bitcoincashjs2_lib_1 = require("@tatumio/bitcoincashjs2-lib");
|
11
|
+
/**
|
12
|
+
* Sign Bitcoin Cash pending transaction from Tatum KMS
|
13
|
+
* @param tx pending transaction from KMS
|
14
|
+
* @param mnemonic mnemonic to generate private keys to sign transaction with.
|
15
|
+
* @param testnet mainnet or testnet version
|
16
|
+
* @returns transaction data to be broadcast to blockchain.
|
17
|
+
*/
|
18
|
+
const signKmsTransactionFromVirtualAccount = (tx, mnemonic, testnet) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
19
|
+
var _a;
|
20
|
+
if (tx.chain !== api_client_1.Currency.BCH || !tx.withdrawalResponses) {
|
21
|
+
throw Error('Unsupported chain.');
|
22
|
+
}
|
23
|
+
const [data, amountsToDecode] = tx.serializedTransaction.split(':');
|
24
|
+
const transaction = bitcoincashjs2_lib_1.Transaction.fromHex(data);
|
25
|
+
const amountsToSign = JSON.parse(amountsToDecode);
|
26
|
+
const network = testnet ? coininfo.bitcoincash.test.toBitcoinJS() : coininfo.bitcoincash.main.toBitcoinJS();
|
27
|
+
const builder = bitcoincashjs2_lib_1.TransactionBuilder.fromTransaction(transaction, network);
|
28
|
+
for (const [i, response] of tx.withdrawalResponses.entries()) {
|
29
|
+
if (response.vIn === '-1') {
|
30
|
+
continue;
|
31
|
+
}
|
32
|
+
const wallet = (0, bch_sdk_wallet_1.bchWallet)();
|
33
|
+
const ecPair = new bitcoincashjs2_lib_1.ECPair().fromWIF(yield wallet.generatePrivateKeyFromMnemonic(mnemonic, ((_a = response.address) === null || _a === void 0 ? void 0 : _a.derivationKey) || 0, {
|
34
|
+
testnet,
|
35
|
+
}), network);
|
36
|
+
builder.sign(i, ecPair, undefined, 0x01, amountsToSign[i], undefined, bitcoincashjs2_lib_1.ECSignature.SCHNORR);
|
37
|
+
}
|
38
|
+
return builder.build().toHex();
|
39
|
+
});
|
40
|
+
exports.signKmsTransactionFromVirtualAccount = signKmsTransactionFromVirtualAccount;
|
41
|
+
//# sourceMappingURL=bch.sdk.offchain.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"bch.sdk.offchain.js","sourceRoot":"","sources":["../../../../../../../packages/blockchain/bch/src/lib/services/bch.sdk.offchain.ts"],"names":[],"mappings":";;;;AACA,aAAa;AACb,2DAAoC;AACpC,oDAA8C;AAC9C,sDAA6C;AAC7C,aAAa;AACb,oEAAkG;AAElG;;;;;;GAMG;AACI,MAAM,oCAAoC,GAAG,CAClD,EAAsB,EACtB,QAAgB,EAChB,OAAgB,EAChB,EAAE;;IACF,IAAI,EAAE,CAAC,KAAK,KAAK,qBAAQ,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,mBAAmB,EAAE;QACxD,MAAM,KAAK,CAAC,oBAAoB,CAAC,CAAA;KAClC;IACD,MAAM,CAAC,IAAI,EAAE,eAAe,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACnE,MAAM,WAAW,GAAG,gCAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAa,CAAA;IAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;IAC3G,MAAM,OAAO,GAAG,uCAAkB,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IACxE,KAAK,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,EAAE;QAC5D,IAAI,QAAQ,CAAC,GAAG,KAAK,IAAI,EAAE;YACzB,SAAQ;SACT;QACD,MAAM,MAAM,GAAG,IAAA,0BAAS,GAAE,CAAA;QAC1B,MAAM,MAAM,GAAG,IAAI,2BAAM,EAAE,CAAC,OAAO,CACjC,MAAM,MAAM,CAAC,8BAA8B,CAAC,QAAQ,EAAE,CAAA,MAAA,QAAQ,CAAC,OAAO,0CAAE,aAAa,KAAI,CAAC,EAAE;YAC1F,OAAO;SACR,CAAC,EACF,OAAO,CACR,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,gCAAW,CAAC,OAAO,CAAC,CAAA;KAC3F;IACD,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAA;AAChC,CAAC,CAAA,CAAA;AA3BY,QAAA,oCAAoC,wCA2BhD"}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { TransactionHash } from '@tatumio/api-client';
|
2
|
+
import { BchApiCallsType } from '../..';
|
3
|
+
import { BchTransactionTypes } from '../bch.sdk.types';
|
4
|
+
export declare const bchTransactions: (apiCalls: BchApiCallsType) => {
|
5
|
+
sendTransaction: (body: BchTransactionTypes, args: {
|
6
|
+
testnet?: boolean;
|
7
|
+
}) => Promise<TransactionHash>;
|
8
|
+
prepareSignedTransaction: (body: BchTransactionTypes, args: {
|
9
|
+
testnet?: boolean;
|
10
|
+
}) => Promise<string>;
|
11
|
+
};
|
@@ -0,0 +1,124 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.bchTransactions = void 0;
|
4
|
+
const tslib_1 = require("tslib");
|
5
|
+
const api_client_1 = require("@tatumio/api-client");
|
6
|
+
const bch_address_1 = require("../utils/bch.address");
|
7
|
+
const bch_sdk_errors_1 = require("../bch.sdk.errors");
|
8
|
+
const shared_abstract_sdk_1 = require("@tatumio/shared-abstract-sdk");
|
9
|
+
// @ts-ignore
|
10
|
+
const coininfo = tslib_1.__importStar(require("coininfo"));
|
11
|
+
// @ts-ignore
|
12
|
+
const BitcoinCashJS = tslib_1.__importStar(require("@tatumio/bitcoincashjs2-lib"));
|
13
|
+
const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
|
14
|
+
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
15
|
+
// @ts-ignore
|
16
|
+
const bitcoreLibCash = tslib_1.__importStar(require("bitcore-lib-cash"));
|
17
|
+
const bchTransactions = (apiCalls) => {
|
18
|
+
const sendTransaction = (body, args) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
19
|
+
return api_client_1.ApiServices.blockchain.bcash.bchBroadcast({
|
20
|
+
txData: yield prepareSignedTransaction(body, args),
|
21
|
+
});
|
22
|
+
});
|
23
|
+
// @TODO add support - by address
|
24
|
+
const prepareSignedTransaction = (body, args) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
25
|
+
var _a, _b, _c;
|
26
|
+
try {
|
27
|
+
const network = args.testnet
|
28
|
+
? coininfo.bitcoincash.test.toBitcoinJS()
|
29
|
+
: coininfo.bitcoincash.main.toBitcoinJS();
|
30
|
+
const transactionBuilder = new BitcoinCashJS.TransactionBuilder(network);
|
31
|
+
const privateKeysToSign = [];
|
32
|
+
const signaturesToSign = [];
|
33
|
+
const amountToSign = [];
|
34
|
+
const outputs = [];
|
35
|
+
const txs = yield getTransactions(apiCalls, body.fromUTXO.map((u) => u.txHash));
|
36
|
+
for (const [i, item] of body.fromUTXO.entries()) {
|
37
|
+
transactionBuilder.addInput(item.txHash, item.index, 0xffffffff, null);
|
38
|
+
if ('signatureId' in item) {
|
39
|
+
privateKeysToSign.push(item.signatureId);
|
40
|
+
signaturesToSign.push({ id: item.signatureId, index: item.signatureIdIndex });
|
41
|
+
}
|
42
|
+
else if ('privateKey' in item)
|
43
|
+
privateKeysToSign.push(item.privateKey);
|
44
|
+
const vout = (_b = (_a = txs === null || txs === void 0 ? void 0 : txs[i]) === null || _a === void 0 ? void 0 : _a.vout) === null || _b === void 0 ? void 0 : _b[item.index];
|
45
|
+
if (!vout || !vout.value)
|
46
|
+
throw new bch_sdk_errors_1.BchSdkError(shared_abstract_sdk_1.SdkErrorCode.BTC_BASED_UTXO_NOT_FOUND);
|
47
|
+
amountToSign.push(shared_abstract_sdk_1.amountUtils.toSatoshis(vout.value));
|
48
|
+
}
|
49
|
+
for (const item of body.to) {
|
50
|
+
const value = shared_abstract_sdk_1.amountUtils.toSatoshis(item.value);
|
51
|
+
try {
|
52
|
+
const address = bch_address_1.bcashAddressHelper.getAddress(item.address);
|
53
|
+
transactionBuilder.addOutput(address, value);
|
54
|
+
outputs.push(value);
|
55
|
+
}
|
56
|
+
catch (e) {
|
57
|
+
const address = new bitcoreLibCash.Address.fromString(item.address);
|
58
|
+
transactionBuilder.addOutput(address.toLegacyAddress(), value);
|
59
|
+
outputs.push(value);
|
60
|
+
}
|
61
|
+
}
|
62
|
+
// send the change to change address
|
63
|
+
if (body.changeAddress) {
|
64
|
+
const sumOfInputs = lodash_1.default.sum(amountToSign);
|
65
|
+
const sumOfOutputs = lodash_1.default.sum(outputs);
|
66
|
+
const defaultFee = 0.00001;
|
67
|
+
const txFee = shared_abstract_sdk_1.amountUtils.toSatoshis((_c = body.fee) !== null && _c !== void 0 ? _c : defaultFee);
|
68
|
+
const change = Number(new bignumber_js_1.default(sumOfInputs).minus(sumOfOutputs).minus(txFee));
|
69
|
+
transactionBuilder.addOutput(bch_address_1.bcashAddressHelper.getAddress(body.changeAddress), change);
|
70
|
+
}
|
71
|
+
verifyAmounts(amountToSign, body);
|
72
|
+
// Validate if all from entries are signatureId or non signatureId
|
73
|
+
if (privateKeysToSign.length !== 0 && body.fromUTXO.length !== privateKeysToSign.length) {
|
74
|
+
throw new bch_sdk_errors_1.BchSdkError(shared_abstract_sdk_1.SdkErrorCode.BTC_BASED_WRONG_BODY);
|
75
|
+
}
|
76
|
+
if (signaturesToSign.length !== 0 && body.fromUTXO.length !== signaturesToSign.length) {
|
77
|
+
throw new bch_sdk_errors_1.BchSdkError(shared_abstract_sdk_1.SdkErrorCode.BTC_BASED_WRONG_BODY);
|
78
|
+
}
|
79
|
+
if ('signatureId' in body.fromUTXO[0]) {
|
80
|
+
return JSON.stringify({
|
81
|
+
txData: `${transactionBuilder.buildIncomplete().toHex()}:${JSON.stringify(amountToSign)}`,
|
82
|
+
privateKeysToSign,
|
83
|
+
signaturesToSign,
|
84
|
+
amountToSign,
|
85
|
+
});
|
86
|
+
}
|
87
|
+
for (let i = 0; i < privateKeysToSign.length; i++) {
|
88
|
+
const ecPair = BitcoinCashJS.ECPair.fromWIF(privateKeysToSign[i]);
|
89
|
+
transactionBuilder.sign(i, ecPair, undefined, transactionBuilder.hashTypes.SIGHASH_ALL, amountToSign[i], transactionBuilder.signatureAlgorithms.SCHNORR);
|
90
|
+
}
|
91
|
+
return transactionBuilder.build().toHex();
|
92
|
+
}
|
93
|
+
catch (e) {
|
94
|
+
throw new bch_sdk_errors_1.BchSdkError(e);
|
95
|
+
}
|
96
|
+
});
|
97
|
+
function verifyAmounts(amountToSign, body) {
|
98
|
+
const outputsSum = body.to
|
99
|
+
.map((to) => shared_abstract_sdk_1.amountUtils.toSatoshis(to.value))
|
100
|
+
.reduce((e, acc) => e.plus(acc), new bignumber_js_1.default(0));
|
101
|
+
const inputsSum = amountToSign
|
102
|
+
.map((i) => new bignumber_js_1.default(i))
|
103
|
+
.reduce((v, acc) => v.plus(acc), new bignumber_js_1.default(0));
|
104
|
+
if (outputsSum.eq(inputsSum)) {
|
105
|
+
throw new bch_sdk_errors_1.BchSdkError(shared_abstract_sdk_1.SdkErrorCode.BTC_BASED_FEE_TOO_SMALL);
|
106
|
+
}
|
107
|
+
if (outputsSum.gt(inputsSum)) {
|
108
|
+
throw new bch_sdk_errors_1.BchSdkError(shared_abstract_sdk_1.SdkErrorCode.BTC_BASED_NOT_ENOUGH_BALANCE);
|
109
|
+
}
|
110
|
+
}
|
111
|
+
const getTransactions = (apiCalls, txHash) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
112
|
+
const result = [];
|
113
|
+
for (const tx of txHash) {
|
114
|
+
result.push(apiCalls.bchGetRawTransaction(tx));
|
115
|
+
}
|
116
|
+
return Promise.all(result);
|
117
|
+
});
|
118
|
+
return {
|
119
|
+
sendTransaction,
|
120
|
+
prepareSignedTransaction,
|
121
|
+
};
|
122
|
+
};
|
123
|
+
exports.bchTransactions = bchTransactions;
|
124
|
+
//# sourceMappingURL=bch.sdk.tx.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"bch.sdk.tx.js","sourceRoot":"","sources":["../../../../../../../packages/blockchain/bch/src/lib/services/bch.sdk.tx.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import { TransferBchKeyPair, TransferBchKMS, TransferBchMnemonic } from '@tatumio/api-client';
|
2
|
+
import { Blockchain } from '@tatumio/shared-core';
|
3
|
+
export declare const virtualAccountService: (args: {
|
4
|
+
blockchain: Blockchain;
|
5
|
+
}) => {
|
6
|
+
send: (isTestnet: boolean, body: TransferBchMnemonic | TransferBchKeyPair | TransferBchKMS) => Promise<{
|
7
|
+
completed?: boolean;
|
8
|
+
txId?: string;
|
9
|
+
id?: undefined;
|
10
|
+
} | {
|
11
|
+
id: string;
|
12
|
+
} | import("@tatumio/api-client").OffchainTransactionSignatureResult>;
|
13
|
+
depositAddress: {
|
14
|
+
checkExists: (address: string, index?: number) => Promise<any>;
|
15
|
+
create: any;
|
16
|
+
createMultiple: any;
|
17
|
+
assign: any;
|
18
|
+
remove: any;
|
19
|
+
getByAccount: any;
|
20
|
+
};
|
21
|
+
withdrawal: {
|
22
|
+
getAll: (status?: "InProgress" | "Done" | "Cancelled", pageSize?: number, offset?: number) => Promise<any[]>;
|
23
|
+
broadcast: any;
|
24
|
+
create: any;
|
25
|
+
complete: any;
|
26
|
+
};
|
27
|
+
storeTokenAddress: any;
|
28
|
+
};
|
@@ -0,0 +1,153 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.virtualAccountService = void 0;
|
4
|
+
const tslib_1 = require("tslib");
|
5
|
+
const api_client_1 = require("@tatumio/api-client");
|
6
|
+
const shared_abstract_sdk_1 = require("@tatumio/shared-abstract-sdk");
|
7
|
+
const shared_blockchain_abstract_1 = require("@tatumio/shared-blockchain-abstract");
|
8
|
+
const shared_core_1 = require("@tatumio/shared-core");
|
9
|
+
const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
|
10
|
+
const bch_sdk_errors_1 = require("../bch.sdk.errors");
|
11
|
+
const shared_blockchain_btc_based_1 = require("@tatumio/shared-blockchain-btc-based");
|
12
|
+
// @ts-ignore
|
13
|
+
const BitcoinCashJS = tslib_1.__importStar(require("@tatumio/bitcoincashjs2-lib"));
|
14
|
+
// @ts-ignore
|
15
|
+
const bitcoreLibCash = tslib_1.__importStar(require("bitcore-lib-cash"));
|
16
|
+
// @ts-ignore
|
17
|
+
const coininfo = tslib_1.__importStar(require("coininfo"));
|
18
|
+
const addOutputAddressValue = (transactionBuilder, address, value) => {
|
19
|
+
try {
|
20
|
+
transactionBuilder.addOutput(address, value);
|
21
|
+
}
|
22
|
+
catch (_) {
|
23
|
+
const addressFromString = new bitcoreLibCash.Address.fromString(address);
|
24
|
+
transactionBuilder.addOutput(addressFromString.toLegacyAddress(), value);
|
25
|
+
}
|
26
|
+
};
|
27
|
+
const prepareTransaction = (data, out, amount, credentials, isTestnet, multipleAmounts) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
28
|
+
const { mnemonic, keyPair, xpub, attr: changeAddress } = credentials;
|
29
|
+
const network = isTestnet
|
30
|
+
? coininfo.bitcoincash.test.toBitcoinJS()
|
31
|
+
: coininfo.bitcoincash.main.toBitcoinJS();
|
32
|
+
const transactionBuilder = new BitcoinCashJS.TransactionBuilder(network);
|
33
|
+
for (const input of data) {
|
34
|
+
if (input.vIn !== '-1') {
|
35
|
+
transactionBuilder.addInput(input.vIn, input.vInIndex);
|
36
|
+
}
|
37
|
+
}
|
38
|
+
const lastVin = data.find((d) => d.vIn === '-1');
|
39
|
+
if (multipleAmounts === null || multipleAmounts === void 0 ? void 0 : multipleAmounts.length) {
|
40
|
+
for (const [i, multipleAmount] of multipleAmounts.entries()) {
|
41
|
+
addOutputAddressValue(transactionBuilder, out.split(',')[i], Number(new bignumber_js_1.default(multipleAmount).multipliedBy(100000000).toFixed(8, bignumber_js_1.default.ROUND_FLOOR)));
|
42
|
+
}
|
43
|
+
}
|
44
|
+
else {
|
45
|
+
addOutputAddressValue(transactionBuilder, out, Number(new bignumber_js_1.default(amount).multipliedBy(100000000).toFixed(0, bignumber_js_1.default.ROUND_FLOOR)));
|
46
|
+
}
|
47
|
+
if (!lastVin) {
|
48
|
+
throw new bch_sdk_errors_1.BchSdkError(shared_abstract_sdk_1.SdkErrorCode.BTC_BASED_TX_PREPARATION_UTXO);
|
49
|
+
}
|
50
|
+
const value = Number(new bignumber_js_1.default(lastVin.amount || -1).multipliedBy(100000000).toFixed(0, bignumber_js_1.default.ROUND_FLOOR));
|
51
|
+
try {
|
52
|
+
if (xpub) {
|
53
|
+
addOutputAddressValue(transactionBuilder, (0, shared_blockchain_btc_based_1.btcBasedWalletUtils)(shared_core_1.Blockchain.BCH).generateAddressFromXPub(xpub, 0, { testnet: isTestnet }), value);
|
54
|
+
}
|
55
|
+
else if (changeAddress) {
|
56
|
+
addOutputAddressValue(transactionBuilder, changeAddress, value);
|
57
|
+
}
|
58
|
+
else {
|
59
|
+
throw new bch_sdk_errors_1.BchSdkError(shared_abstract_sdk_1.SdkErrorCode.BTC_BASED_MNEMONIC_OR_KEYPAIR_EXPECTED);
|
60
|
+
}
|
61
|
+
}
|
62
|
+
catch (e) {
|
63
|
+
throw new bch_sdk_errors_1.BchSdkError(shared_abstract_sdk_1.SdkErrorCode.BTC_BASED_TX_FAILED);
|
64
|
+
}
|
65
|
+
if (value < 0) {
|
66
|
+
console.log(`Wrong amount for BCH offchain amount.`);
|
67
|
+
throw new bch_sdk_errors_1.BchSdkError(shared_abstract_sdk_1.SdkErrorCode.BTC_BASED_DESTINATION_LESS_THAN_ZERO);
|
68
|
+
}
|
69
|
+
try {
|
70
|
+
for (const [i, input] of data.entries()) {
|
71
|
+
// when there is no address field present, input is pool transfer to 0
|
72
|
+
if (input.vIn === '-1') {
|
73
|
+
continue;
|
74
|
+
}
|
75
|
+
if (!input.amount) {
|
76
|
+
console.log(`Missing amount preparing BCH offchain transaction.`);
|
77
|
+
throw new bch_sdk_errors_1.BchSdkError(shared_abstract_sdk_1.SdkErrorCode.BTC_BASED_TX_FAILED);
|
78
|
+
}
|
79
|
+
const value = Number(new bignumber_js_1.default(input.amount).multipliedBy(100000000).toFixed(0, bignumber_js_1.default.ROUND_FLOOR));
|
80
|
+
if (mnemonic) {
|
81
|
+
const privateKey = yield (0, shared_blockchain_btc_based_1.btcBasedWalletUtils)(shared_core_1.Blockchain.BCH).generatePrivateKeyFromMnemonic(mnemonic, input.address && input.address.derivationKey ? input.address.derivationKey : 0, { testnet: isTestnet });
|
82
|
+
const ecPair = BitcoinCashJS.ECPair.fromWIF(privateKey, network);
|
83
|
+
transactionBuilder.sign(i, ecPair, undefined, 0x01, value, undefined, BitcoinCashJS.ECSignature.SCHNORR);
|
84
|
+
}
|
85
|
+
else if (keyPair) {
|
86
|
+
// @ts-ignore
|
87
|
+
const privateKey = keyPair.find((k) => k.address === input.address.address);
|
88
|
+
if (privateKey) {
|
89
|
+
const ecPair = BitcoinCashJS.ECPair.fromWIF(privateKey.privateKey, network);
|
90
|
+
transactionBuilder.sign(i, ecPair, undefined, 0x01, value, undefined, BitcoinCashJS.ECSignature.SCHNORR);
|
91
|
+
}
|
92
|
+
}
|
93
|
+
}
|
94
|
+
return transactionBuilder.build().toHex();
|
95
|
+
}
|
96
|
+
catch (e) {
|
97
|
+
throw new bch_sdk_errors_1.BchSdkError(shared_abstract_sdk_1.SdkErrorCode.BTC_BASED_BLOCKCHAIN_ERROR);
|
98
|
+
}
|
99
|
+
});
|
100
|
+
const sendBchVirtualAccountTransaction = (body, isTestnet) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
101
|
+
const withdrawal = body;
|
102
|
+
if (!withdrawal.fee) {
|
103
|
+
withdrawal.fee = '0.00005';
|
104
|
+
}
|
105
|
+
const { id, data } = yield api_client_1.ApiServices.offChain.withdrawal.storeWithdrawal(withdrawal);
|
106
|
+
if (!data) {
|
107
|
+
throw new bch_sdk_errors_1.BchSdkError(shared_abstract_sdk_1.SdkErrorCode.BTC_BASED_TX_FAILED);
|
108
|
+
}
|
109
|
+
const { amount, address } = withdrawal;
|
110
|
+
const prepareTx = () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
111
|
+
return yield prepareTransaction(data, address, amount, {
|
112
|
+
mnemonic: 'mnemonic' in body ? body.mnemonic : undefined,
|
113
|
+
xpub: 'xpub' in body ? body.xpub : undefined,
|
114
|
+
keyPair: 'keyPair' in body ? Object.assign(body.keyPair, []) : undefined,
|
115
|
+
attr: body.attr,
|
116
|
+
}, isTestnet, body.multipleAmounts);
|
117
|
+
});
|
118
|
+
try {
|
119
|
+
const txPrepared = yield prepareTx();
|
120
|
+
return Object.assign({}, (yield api_client_1.ApiServices.offChain.withdrawal.broadcastBlockchainTransaction({
|
121
|
+
txData: txPrepared,
|
122
|
+
withdrawalId: id,
|
123
|
+
currency: api_client_1.Currency.BCH,
|
124
|
+
})));
|
125
|
+
}
|
126
|
+
catch (e) {
|
127
|
+
console.error(e);
|
128
|
+
try {
|
129
|
+
if (typeof id !== 'string') {
|
130
|
+
console.log('Missing withdrawal ID');
|
131
|
+
throw e;
|
132
|
+
}
|
133
|
+
yield api_client_1.ApiServices.offChain.withdrawal.cancelInProgressWithdrawal(id);
|
134
|
+
}
|
135
|
+
catch (e1) {
|
136
|
+
console.log(e);
|
137
|
+
return { id };
|
138
|
+
}
|
139
|
+
throw e;
|
140
|
+
}
|
141
|
+
});
|
142
|
+
const virtualAccountService = (args) => {
|
143
|
+
return Object.assign(Object.assign({}, (0, shared_blockchain_abstract_1.abstractBlockchainVirtualAccount)(args)), { send: (isTestnet, body) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
144
|
+
if ('signatureId' in body) {
|
145
|
+
return api_client_1.ApiServices.offChain.blockchain.bchTransfer(body);
|
146
|
+
}
|
147
|
+
else {
|
148
|
+
return yield sendBchVirtualAccountTransaction(body, isTestnet);
|
149
|
+
}
|
150
|
+
}) });
|
151
|
+
};
|
152
|
+
exports.virtualAccountService = virtualAccountService;
|
153
|
+
//# sourceMappingURL=bch.sdk.virtualAccount.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"bch.sdk.virtualAccount.js","sourceRoot":"","sources":["../../../../../../../packages/blockchain/bch/src/lib/services/bch.sdk.virtualAccount.ts"],"names":[],"mappings":";;;;AAAA,oDAQ4B;AAC5B,sEAA2D;AAC3D,oFAAsF;AACtF,sDAAiD;AACjD,wEAAoC;AACpC,sDAA+C;AAE/C,sFAA0E;AAC1E,aAAa;AACb,mFAA4D;AAE5D,aAAa;AACb,yEAAkD;AAClD,aAAa;AACb,2DAAoC;AAOpC,MAAM,qBAAqB,GAAG,CAAC,kBAAsC,EAAE,OAAe,EAAE,KAAa,EAAE,EAAE;IACvG,IAAI;QACF,kBAAkB,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;KAC7C;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,iBAAiB,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;QACxE,kBAAkB,CAAC,SAAS,CAAC,iBAAiB,CAAC,eAAe,EAAE,EAAE,KAAK,CAAC,CAAA;KACzE;AACH,CAAC,CAAA;AAED,MAAM,kBAAkB,GAAG,CACzB,IAAoB,EACpB,GAAW,EACX,MAAc,EACd,WAKC,EACD,SAAkB,EAClB,eAA0B,EACT,EAAE;IACnB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,WAAW,CAAA;IACpE,MAAM,OAAO,GAAG,SAAS;QACvB,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE;QACzC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;IAC3C,MAAM,kBAAkB,GAAG,IAAI,aAAa,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAExE,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE;QACxB,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE;YACtB,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;SACvD;KACF;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAA;IAChD,IAAI,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,MAAM,EAAE;QAC3B,KAAK,MAAM,CAAC,CAAC,EAAE,cAAc,CAAC,IAAI,eAAe,CAAC,OAAO,EAAE,EAAE;YAC3D,qBAAqB,CACnB,kBAAkB,EAClB,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACjB,MAAM,CAAC,IAAI,sBAAS,CAAC,cAAc,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,sBAAS,CAAC,WAAW,CAAC,CAAC,CAChG,CAAA;SACF;KACF;SAAM;QACL,qBAAqB,CACnB,kBAAkB,EAClB,GAAG,EACH,MAAM,CAAC,IAAI,sBAAS,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,sBAAS,CAAC,WAAW,CAAC,CAAC,CACxF,CAAA;KACF;IAED,IAAI,CAAC,OAAO,EAAE;QACZ,MAAM,IAAI,4BAAW,CAAC,kCAAY,CAAC,6BAA6B,CAAC,CAAA;KAClE;IACD,MAAM,KAAK,GAAG,MAAM,CAClB,IAAI,sBAAS,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,sBAAS,CAAC,WAAW,CAAC,CAC9F,CAAA;IAED,IAAI;QACF,IAAI,IAAI,EAAE;YACR,qBAAqB,CACnB,kBAAkB,EAClB,IAAA,iDAAmB,EAAC,wBAAU,CAAC,GAAG,CAAC,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAC5F,KAAK,CACN,CAAA;SACF;aAAM,IAAI,aAAa,EAAE;YACxB,qBAAqB,CAAC,kBAAkB,EAAE,aAAa,EAAE,KAAK,CAAC,CAAA;SAChE;aAAM;YACL,MAAM,IAAI,4BAAW,CAAC,kCAAY,CAAC,sCAAsC,CAAC,CAAA;SAC3E;KACF;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,IAAI,4BAAW,CAAC,kCAAY,CAAC,mBAAmB,CAAC,CAAA;KACxD;IAED,IAAI,KAAK,GAAG,CAAC,EAAE;QACb,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAA;QACpD,MAAM,IAAI,4BAAW,CAAC,kCAAY,CAAC,oCAAoC,CAAC,CAAA;KACzE;IAED,IAAI;QACF,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YACvC,sEAAsE;YACtE,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE;gBACtB,SAAQ;aACT;YACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBACjB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAA;gBACjE,MAAM,IAAI,4BAAW,CAAC,kCAAY,CAAC,mBAAmB,CAAC,CAAA;aACxD;YACD,MAAM,KAAK,GAAG,MAAM,CAClB,IAAI,sBAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,sBAAS,CAAC,WAAW,CAAC,CACtF,CAAA;YACD,IAAI,QAAQ,EAAE;gBACZ,MAAM,UAAU,GAAG,MAAM,IAAA,iDAAmB,EAAC,wBAAU,CAAC,GAAG,CAAC,CAAC,8BAA8B,CACzF,QAAQ,EACR,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAC9E,EAAE,OAAO,EAAE,SAAS,EAAE,CACvB,CAAA;gBACD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;gBAChE,kBAAkB,CAAC,IAAI,CACrB,CAAC,EACD,MAAM,EACN,SAAS,EACT,IAAI,EACJ,KAAK,EACL,SAAS,EACT,aAAa,CAAC,WAAW,CAAC,OAAO,CAClC,CAAA;aACF;iBAAM,IAAI,OAAO,EAAE;gBAClB,aAAa;gBACb,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;gBAC3E,IAAI,UAAU,EAAE;oBACd,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;oBAE3E,kBAAkB,CAAC,IAAI,CACrB,CAAC,EACD,MAAM,EACN,SAAS,EACT,IAAI,EACJ,KAAK,EACL,SAAS,EACT,aAAa,CAAC,WAAW,CAAC,OAAO,CAClC,CAAA;iBACF;aACF;SACF;QAED,OAAO,kBAAkB,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAA;KAC1C;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,IAAI,4BAAW,CAAC,kCAAY,CAAC,0BAA0B,CAAC,CAAA;KAC/D;AACH,CAAC,CAAA,CAAA;AAED,MAAM,gCAAgC,GAAG,CACvC,IAA8C,EAC9C,SAAkB,EAClB,EAAE;IACF,MAAM,UAAU,GAAe,IAAkB,CAAA;IACjD,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE;QACnB,UAAU,CAAC,GAAG,GAAG,SAAS,CAAA;KAC3B;IAED,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,MAAM,wBAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;IAEtF,IAAI,CAAC,IAAI,EAAE;QACT,MAAM,IAAI,4BAAW,CAAC,kCAAY,CAAC,mBAAmB,CAAC,CAAA;KACxD;IAED,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAA;IAEtC,MAAM,SAAS,GAAG,GAAS,EAAE;QAC3B,OAAA,MAAM,kBAAkB,CACtB,IAAI,EACJ,OAAO,EACP,MAAM,EACN;YACE,QAAQ,EAAE,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACxD,IAAI,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YAC5C,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAe,CAAC,CAAC,CAAC,CAAC,SAAS;YACrF,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,EACD,SAAS,EACT,IAAI,CAAC,eAAe,CACrB,CAAA;MAAA,CAAA;IACH,IAAI;QACF,MAAM,UAAU,GAAG,MAAM,SAAS,EAAE,CAAA;QACpC,yBACK,CAAC,MAAM,wBAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,8BAA8B,CAAC;YACvE,MAAM,EAAE,UAAU;YAClB,YAAY,EAAE,EAAE;YAChB,QAAQ,EAAE,qBAAQ,CAAC,GAAG;SACvB,CAAC,CAAC,EACJ;KACF;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAChB,IAAI;YACF,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;gBAC1B,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;gBACpC,MAAM,CAAC,CAAA;aACR;YACD,MAAM,wBAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAA;SACrE;QAAC,OAAO,EAAE,EAAE;YACX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YACd,OAAO,EAAE,EAAE,EAAE,CAAA;SACd;QACD,MAAM,CAAC,CAAA;KACR;AACH,CAAC,CAAA,CAAA;AAEM,MAAM,qBAAqB,GAAG,CAAC,IAAgC,EAAE,EAAE;IACxE,uCACK,IAAA,6DAAgC,EAAC,IAAI,CAAC,KACzC,IAAI,EAAE,CAAO,SAAkB,EAAE,IAA+D,EAAE,EAAE;YAClG,IAAI,aAAa,IAAI,IAAI,EAAE;gBACzB,OAAO,wBAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;aACzD;iBAAM;gBACL,OAAO,MAAM,gCAAgC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;aAC/D;QACH,CAAC,CAAA,IACF;AACH,CAAC,CAAA;AAXY,QAAA,qBAAqB,yBAWjC"}
|
@@ -7,6 +7,7 @@ const coininfo_1 = tslib_1.__importDefault(require("coininfo"));
|
|
7
7
|
// @ts-ignore
|
8
8
|
const bitcoincashjs2_lib_1 = tslib_1.__importDefault(require("@tatumio/bitcoincashjs2-lib"));
|
9
9
|
const bitcoinjs_lib_1 = require("bitcoinjs-lib");
|
10
|
+
const buffer_1 = require("buffer");
|
10
11
|
exports.bcashAddressHelper = {
|
11
12
|
getAddress: (address) => {
|
12
13
|
try {
|
@@ -36,7 +37,7 @@ exports.bcashAddressHelper = {
|
|
36
37
|
version = bitcoincash.versions.scripthash;
|
37
38
|
break;
|
38
39
|
}
|
39
|
-
const hashBuf = Buffer.from(hash);
|
40
|
+
const hashBuf = buffer_1.Buffer.from(hash);
|
40
41
|
return bitcoincashjs2_lib_1.default.address.toBase58Check(hashBuf, version);
|
41
42
|
},
|
42
43
|
decode: (address) => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"bch.address.js","sourceRoot":"","sources":["../../../../../../../packages/blockchain/bch/src/lib/utils/bch.address.ts"],"names":[],"mappings":";;;;AAAA,aAAa;AACb,gEAA+B;AAC/B,aAAa;AACb,6FAA+C;AAC/C,iDAAwC;
|
1
|
+
{"version":3,"file":"bch.address.js","sourceRoot":"","sources":["../../../../../../../packages/blockchain/bch/src/lib/utils/bch.address.ts"],"names":[],"mappings":";;;;AAAA,aAAa;AACb,gEAA+B;AAC/B,aAAa;AACb,6FAA+C;AAC/C,iDAAwC;AACxC,mCAA+B;AAgBlB,QAAA,kBAAkB,GAAG;IAChC,UAAU,EAAE,CAAC,OAAe,EAAE,EAAE;QAC9B,IAAI;YACF,OAAO,0BAAkB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;SACnD;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,OAAO,CAAA;SACf;IACH,CAAC;IACD,eAAe,EAAE,CAAC,OAAe,EAAE,EAAE;QACnC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAY,0BAAkB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC1E,IAAI,WAAW,GAAG,kBAAQ,CAAC,WAAW,CAAC,IAAI,CAAA;QAC3C,QAAQ,MAAM,EAAE;YACd,KAAK,aAAa;gBAChB,WAAW,GAAG,kBAAQ,CAAC,WAAW,CAAC,IAAI,CAAA;gBACvC,MAAK;YACP,KAAK,SAAS;gBACZ,WAAW,GAAG,kBAAQ,CAAC,WAAW,CAAC,IAAI,CAAA;gBACvC,MAAK;SACR;QAED,IAAI,OAAO,GAAW,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAA;QACjD,QAAQ,IAAI,EAAE;YACZ,KAAK,OAAO;gBACV,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAA;gBACrC,MAAK;YACP,KAAK,MAAM;gBACT,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAA;gBACzC,MAAK;SACR;QAED,MAAM,OAAO,GAAW,eAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEzC,OAAO,4BAAK,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACtD,CAAC;IACD,MAAM,EAAE,CAAC,OAAe,EAAW,EAAE;QACnC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAU,4BAAK,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;QAEvE,IAAI,OAAO,GAAY;YACrB,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,EAAE;YACR,IAAI;YACJ,MAAM,EAAE,EAAE;SACX,CAAA;QACD,QAAQ,OAAO,EAAE;YACf,KAAK,wBAAQ,CAAC,OAAO,CAAC,UAAU;gBAC9B,OAAO,GAAG;oBACR,MAAM,EAAE,aAAa;oBACrB,IAAI,EAAE,OAAO;oBACb,IAAI;oBACJ,MAAM,EAAE,QAAQ;iBACjB,CAAA;gBACD,MAAK;YACP,KAAK,wBAAQ,CAAC,OAAO,CAAC,UAAU;gBAC9B,OAAO,GAAG;oBACR,MAAM,EAAE,aAAa;oBACrB,IAAI,EAAE,MAAM;oBACZ,IAAI;oBACJ,MAAM,EAAE,QAAQ;iBACjB,CAAA;gBACD,MAAK;YACP,KAAK,wBAAQ,CAAC,OAAO,CAAC,UAAU;gBAC9B,OAAO,GAAG;oBACR,MAAM,EAAE,SAAS;oBACjB,IAAI,EAAE,OAAO;oBACb,IAAI;oBACJ,MAAM,EAAE,QAAQ;iBACjB,CAAA;gBACD,MAAK;YACP,KAAK,wBAAQ,CAAC,OAAO,CAAC,UAAU;gBAC9B,OAAO,GAAG;oBACR,MAAM,EAAE,SAAS;oBACjB,IAAI,EAAE,MAAM;oBACZ,IAAI;oBACJ,MAAM,EAAE,QAAQ;iBACjB,CAAA;gBACD,MAAK;SACR;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;CACF,CAAA"}
|
package/src/lib/bch.sdk.tx.js
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.bchTransactions = void 0;
|
4
|
-
const tslib_1 = require("tslib");
|
5
|
-
const api_client_1 = require("@tatumio/api-client");
|
6
|
-
const bch_address_1 = require("./utils/bch.address");
|
7
|
-
const bch_sdk_errors_1 = require("./bch.sdk.errors");
|
8
|
-
const shared_abstract_sdk_1 = require("@tatumio/shared-abstract-sdk");
|
9
|
-
// @ts-ignore
|
10
|
-
const coininfo = tslib_1.__importStar(require("coininfo"));
|
11
|
-
// @ts-ignore
|
12
|
-
const BitcoinCashJS = tslib_1.__importStar(require("@tatumio/bitcoincashjs2-lib"));
|
13
|
-
const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
|
14
|
-
const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
15
|
-
const sendTransaction = (body, args) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
16
|
-
return api_client_1.ApiServices.blockchain.bcash.bchBroadcast({
|
17
|
-
txData: yield prepareSignedTransaction(body, args),
|
18
|
-
});
|
19
|
-
});
|
20
|
-
// @TODO add support - by address
|
21
|
-
const prepareSignedTransaction = (body, args) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
22
|
-
var _a, _b, _c;
|
23
|
-
try {
|
24
|
-
const network = args.testnet
|
25
|
-
? coininfo.bitcoincash.test.toBitcoinJS()
|
26
|
-
: coininfo.bitcoincash.main.toBitcoinJS();
|
27
|
-
const transactionBuilder = new BitcoinCashJS.TransactionBuilder(network);
|
28
|
-
const privateKeysToSign = [];
|
29
|
-
const amountToSign = [];
|
30
|
-
const outputs = [];
|
31
|
-
const txs = yield getTransactions(body.fromUTXO.map((u) => u.txHash));
|
32
|
-
for (const [i, item] of body.fromUTXO.entries()) {
|
33
|
-
transactionBuilder.addInput(item.txHash, item.index, 0xffffffff, null);
|
34
|
-
if ('signatureId' in item)
|
35
|
-
privateKeysToSign.push(item.signatureId);
|
36
|
-
else if ('privateKey' in item)
|
37
|
-
privateKeysToSign.push(item.privateKey);
|
38
|
-
const vout = (_b = (_a = txs === null || txs === void 0 ? void 0 : txs[i]) === null || _a === void 0 ? void 0 : _a.vout) === null || _b === void 0 ? void 0 : _b[item.index];
|
39
|
-
if (!vout || !vout.value)
|
40
|
-
throw new bch_sdk_errors_1.BchSdkError(shared_abstract_sdk_1.SdkErrorCode.BTC_BASED_UTXO_NOT_FOUND);
|
41
|
-
amountToSign.push(shared_abstract_sdk_1.amountUtils.toSatoshis(vout.value));
|
42
|
-
const fromUTXO = body.fromUTXO;
|
43
|
-
if (fromUTXO && 'signatureId' in fromUTXO[0] && fromUTXO[0].signatureId) {
|
44
|
-
return JSON.stringify({ txData: JSON.stringify(txs[i]), privateKeysToSign });
|
45
|
-
}
|
46
|
-
}
|
47
|
-
body.to.forEach((item) => {
|
48
|
-
const value = shared_abstract_sdk_1.amountUtils.toSatoshis(item.value);
|
49
|
-
transactionBuilder.addOutput(bch_address_1.bcashAddressHelper.getAddress(item.address), value);
|
50
|
-
outputs.push(value);
|
51
|
-
});
|
52
|
-
// send the change to change address
|
53
|
-
if (body.changeAddress) {
|
54
|
-
const sumOfInputs = lodash_1.default.sum(amountToSign);
|
55
|
-
const sumOfOutputs = lodash_1.default.sum(outputs);
|
56
|
-
const defaultFee = 0.00001;
|
57
|
-
const txFee = shared_abstract_sdk_1.amountUtils.toSatoshis((_c = body.fee) !== null && _c !== void 0 ? _c : defaultFee);
|
58
|
-
const change = Number(new bignumber_js_1.default(sumOfInputs).minus(sumOfOutputs).minus(txFee));
|
59
|
-
transactionBuilder.addOutput(body.changeAddress, change);
|
60
|
-
}
|
61
|
-
verifyAmounts(amountToSign, body);
|
62
|
-
for (let i = 0; i < privateKeysToSign.length; i++) {
|
63
|
-
const ecPair = BitcoinCashJS.ECPair.fromWIF(privateKeysToSign[i], network);
|
64
|
-
transactionBuilder.sign(i, ecPair, undefined, 0x01, amountToSign[i], undefined, BitcoinCashJS.ECSignature.SCHNORR);
|
65
|
-
}
|
66
|
-
return transactionBuilder.build().toHex();
|
67
|
-
}
|
68
|
-
catch (e) {
|
69
|
-
throw new bch_sdk_errors_1.BchSdkError(e);
|
70
|
-
}
|
71
|
-
});
|
72
|
-
function verifyAmounts(amountToSign, body) {
|
73
|
-
const outputsSum = body.to
|
74
|
-
.map((to) => shared_abstract_sdk_1.amountUtils.toSatoshis(to.value))
|
75
|
-
.reduce((e, acc) => e.plus(acc), new bignumber_js_1.default(0));
|
76
|
-
const inputsSum = amountToSign
|
77
|
-
.map((i) => new bignumber_js_1.default(i))
|
78
|
-
.reduce((v, acc) => v.plus(acc), new bignumber_js_1.default(0));
|
79
|
-
if (outputsSum.eq(inputsSum)) {
|
80
|
-
throw new bch_sdk_errors_1.BchSdkError(shared_abstract_sdk_1.SdkErrorCode.BTC_BASED_FEE_TOO_SMALL);
|
81
|
-
}
|
82
|
-
if (outputsSum.gt(inputsSum)) {
|
83
|
-
throw new bch_sdk_errors_1.BchSdkError(shared_abstract_sdk_1.SdkErrorCode.BTC_BASED_NOT_ENOUGH_BALANCE);
|
84
|
-
}
|
85
|
-
}
|
86
|
-
const getTransactions = (txHash) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
87
|
-
const result = [];
|
88
|
-
for (const tx of txHash) {
|
89
|
-
result.push(api_client_1.ApiServices.blockchain.bcash.bchGetRawTransaction(tx));
|
90
|
-
}
|
91
|
-
return Promise.all(result);
|
92
|
-
});
|
93
|
-
const bchTransactions = () => ({
|
94
|
-
sendTransaction,
|
95
|
-
prepareSignedTransaction,
|
96
|
-
});
|
97
|
-
exports.bchTransactions = bchTransactions;
|
98
|
-
//# sourceMappingURL=bch.sdk.tx.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"bch.sdk.tx.js","sourceRoot":"","sources":["../../../../../../packages/blockchain/bch/src/lib/bch.sdk.tx.ts"],"names":[],"mappings":";;;;AAAA,oDAA4G;AAC5G,qDAAwD;AACxD,qDAA8C;AAC9C,sEAAwE;AACxE,aAAa;AACb,2DAAoC;AACpC,aAAa;AACb,mFAA4D;AAE5D,wEAAoC;AACpC,4DAAsB;AAItB,MAAM,eAAe,GAAG,CACtB,IAAyB,EACzB,IAA2B,EACD,EAAE;IAC5B,OAAO,wBAAW,CAAC,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC;QAC/C,MAAM,EAAE,MAAM,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC;KACnD,CAAC,CAAA;AACJ,CAAC,CAAA,CAAA;AAED,iCAAiC;AACjC,MAAM,wBAAwB,GAAG,CAC/B,IAAyB,EACzB,IAA2B,EACV,EAAE;;IACnB,IAAI;QACF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;YAC1B,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE;YACzC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA;QAE3C,MAAM,kBAAkB,GAAG,IAAI,aAAa,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAA;QACxE,MAAM,iBAAiB,GAAG,EAAE,CAAA;QAC5B,MAAM,YAAY,GAAa,EAAE,CAAA;QACjC,MAAM,OAAO,GAAa,EAAE,CAAA;QAE5B,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;QAErE,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE;YAC/C,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;YACtE,IAAI,aAAa,IAAI,IAAI;gBAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;iBAC9D,IAAI,YAAY,IAAI,IAAI;gBAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAEtE,MAAM,IAAI,GAAG,MAAA,MAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAG,CAAC,CAAC,0CAAE,IAAI,0CAAG,IAAI,CAAC,KAAK,CAAC,CAAA;YACzC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,4BAAW,CAAC,kCAAY,CAAC,wBAAwB,CAAC,CAAA;YAEtF,YAAY,CAAC,IAAI,CAAC,iCAAW,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;YAErD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;YAC9B,IAAI,QAAQ,IAAI,aAAa,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;gBACvE,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAA;aAC7E;SACF;QAED,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACvB,MAAM,KAAK,GAAG,iCAAW,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAChD,kBAAkB,CAAC,SAAS,CAAC,gCAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAA;YAChF,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC,CAAC,CAAA;QAEF,oCAAoC;QACpC,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,MAAM,WAAW,GAAG,gBAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;YACvC,MAAM,YAAY,GAAG,gBAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YACnC,MAAM,UAAU,GAAG,OAAO,CAAA;YAC1B,MAAM,KAAK,GAAG,iCAAW,CAAC,UAAU,CAAC,MAAA,IAAI,CAAC,GAAG,mCAAI,UAAU,CAAC,CAAA;YAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,sBAAS,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;YAClF,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;SACzD;QAED,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;QAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;YAC1E,kBAAkB,CAAC,IAAI,CACrB,CAAC,EACD,MAAM,EACN,SAAS,EACT,IAAI,EACJ,YAAY,CAAC,CAAC,CAAC,EACf,SAAS,EACT,aAAa,CAAC,WAAW,CAAC,OAAO,CAClC,CAAA;SACF;QAED,OAAO,kBAAkB,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAA;KAC1C;IAAC,OAAO,CAAM,EAAE;QACf,MAAM,IAAI,4BAAW,CAAC,CAAC,CAAC,CAAA;KACzB;AACH,CAAC,CAAA,CAAA;AAED,SAAS,aAAa,CAAC,YAAsB,EAAE,IAAyB;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE;SACvB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,iCAAW,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;SAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,sBAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IAEpD,MAAM,SAAS,GAAG,YAAY;SAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,sBAAS,CAAC,CAAC,CAAC,CAAC;SAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,sBAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IAEpD,IAAI,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;QAC5B,MAAM,IAAI,4BAAW,CAAC,kCAAY,CAAC,uBAAuB,CAAC,CAAA;KAC5D;IAED,IAAI,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE;QAC5B,MAAM,IAAI,4BAAW,CAAC,kCAAY,CAAC,4BAA4B,CAAC,CAAA;KACjE;AACH,CAAC;AAED,MAAM,eAAe,GAAG,CAAO,MAAgB,EAAoB,EAAE;IACnE,MAAM,MAAM,GAAG,EAAE,CAAA;IACjB,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE;QACvB,MAAM,CAAC,IAAI,CAAC,wBAAW,CAAC,UAAU,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAA;KACnE;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;AAC5B,CAAC,CAAA,CAAA;AAEM,MAAM,eAAe,GAAG,GAAoC,EAAE,CAAC,CAAC;IACrE,eAAe;IACf,wBAAwB;CACzB,CAAC,CAAA;AAHW,QAAA,eAAe,mBAG1B"}
|