@bitgo-beta/sdk-coin-polygon 1.3.3-alpha.90 → 1.3.3-alpha.92
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/CHANGELOG.md +125 -0
- package/dist/src/lib/index.d.ts +1 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +5 -1
- package/dist/src/lib/transactionBuilder.d.ts +2 -9
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +4 -20
- package/dist/src/polygon.d.ts +8 -63
- package/dist/src/polygon.d.ts.map +1 -1
- package/dist/src/polygon.js +8 -379
- package/dist/src/polygonToken.d.ts +10 -25
- package/dist/src/polygonToken.d.ts.map +1 -1
- package/dist/src/polygonToken.js +21 -60
- package/dist/src/tpolygon.d.ts +0 -1
- package/dist/src/tpolygon.d.ts.map +1 -1
- package/dist/src/tpolygon.js +1 -4
- package/package.json +10 -15
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,131 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [5.0.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-polygon@1.7.0...@bitgo/sdk-coin-polygon@5.0.0) (2023-11-17)
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
- **sdk-coin-eth:** fix issue related to ethtxbuilder ([286ccfd](https://github.com/BitGo/BitGoJS/commit/286ccfd4bc89075fd2d8c59d3770dc3b8cd78c79))
|
|
11
|
+
- **sdk-coin-polygon:** fix issues ([85e9396](https://github.com/BitGo/BitGoJS/commit/85e93967abd056f5054198f385a1b109246a281f))
|
|
12
|
+
|
|
13
|
+
### Code Refactoring
|
|
14
|
+
|
|
15
|
+
- **abstract-eth:** add common method to abstract-eth ([df6eea5](https://github.com/BitGo/BitGoJS/commit/df6eea5d299c415b30263d1713335c14e5abef4a))
|
|
16
|
+
- **abstract-eth:** move methods to abstract-eth ([af8bd10](https://github.com/BitGo/BitGoJS/commit/af8bd10e24c8d58fc227494de6a614098265580a))
|
|
17
|
+
|
|
18
|
+
### Features
|
|
19
|
+
|
|
20
|
+
- update secp256k1 to 5.0.0 and keccak to 3.0.3 ([e2c37e6](https://github.com/BitGo/BitGoJS/commit/e2c37e6b0139c9f6948a22d8921bc3e1f88bed4c))
|
|
21
|
+
|
|
22
|
+
### BREAKING CHANGES
|
|
23
|
+
|
|
24
|
+
- **abstract-eth:** Type of nextContractSequenceId field in TransactionPrebuild
|
|
25
|
+
interface is changed from string to number in AbstractEthLikeCoin and AbstractEthLikeNewCoins classes.
|
|
26
|
+
getCustomChainName method is removed from Polygon class because a common
|
|
27
|
+
method getCustomChainCommon has been added to AbstractEthLikeNewCoins
|
|
28
|
+
class for all EthLike coins. replayProtectionOptions is not optional in buildTransaction method in AbstractEthLikeNewCoins
|
|
29
|
+
and needs to be passed to derive the Eth common object from the chainId.
|
|
30
|
+
signFinalPolygon method name from Polygon class is updated to signFinalEthLike so that
|
|
31
|
+
it can be used for other EthLike coins. getBaseFactor method in Eth
|
|
32
|
+
and Polygon class returns number instead of string just to align with
|
|
33
|
+
AbstractEthLikeCoin
|
|
34
|
+
Ticket: WIN-1012
|
|
35
|
+
- **abstract-eth:** Type of nextContractSequenceId field in TransactionPrebuild
|
|
36
|
+
interface is changed from string to number in AbstractEthLikeCoin and AbstractEthLikeNewCoins classes.
|
|
37
|
+
getCustomChainName method is removed from Polygon class because a common
|
|
38
|
+
method getCustomChainCommon has been added to AbstractEthLikeNewCoins
|
|
39
|
+
class for all EthLike coins. replayProtectionOptions is not optional in buildTransaction method in AbstractEthLikeNewCoins
|
|
40
|
+
and needs to be passed to derive the Eth common object from the chainId.
|
|
41
|
+
signFinalPolygon method name from Polygon class is updated to signFinalEthLike so that
|
|
42
|
+
it can be used for other EthLike coins. getBaseFactor method in Eth
|
|
43
|
+
and Polygon class returns number instead of string just to align with
|
|
44
|
+
AbstractEthLikeCoin
|
|
45
|
+
Ticket: WIN-1012
|
|
46
|
+
|
|
47
|
+
# [4.0.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-polygon@1.7.0...@bitgo/sdk-coin-polygon@4.0.0) (2023-11-13)
|
|
48
|
+
|
|
49
|
+
### Bug Fixes
|
|
50
|
+
|
|
51
|
+
- **sdk-coin-eth:** fix issue related to ethtxbuilder ([286ccfd](https://github.com/BitGo/BitGoJS/commit/286ccfd4bc89075fd2d8c59d3770dc3b8cd78c79))
|
|
52
|
+
|
|
53
|
+
### Code Refactoring
|
|
54
|
+
|
|
55
|
+
- **abstract-eth:** move methods to abstract-eth ([af8bd10](https://github.com/BitGo/BitGoJS/commit/af8bd10e24c8d58fc227494de6a614098265580a))
|
|
56
|
+
|
|
57
|
+
### Features
|
|
58
|
+
|
|
59
|
+
- update secp256k1 to 5.0.0 and keccak to 3.0.3 ([e2c37e6](https://github.com/BitGo/BitGoJS/commit/e2c37e6b0139c9f6948a22d8921bc3e1f88bed4c))
|
|
60
|
+
|
|
61
|
+
### BREAKING CHANGES
|
|
62
|
+
|
|
63
|
+
- **abstract-eth:** Type of nextContractSequenceId field in TransactionPrebuild
|
|
64
|
+
interface is changed from string to number in AbstractEthLikeCoin and AbstractEthLikeNewCoins classes.
|
|
65
|
+
getCustomChainName method is removed from Polygon class because a common
|
|
66
|
+
method getCustomChainCommon has been added to AbstractEthLikeNewCoins
|
|
67
|
+
class for all EthLike coins. replayProtectionOptions is not optional in buildTransaction method in AbstractEthLikeNewCoins
|
|
68
|
+
and needs to be passed to derive the Eth common object from the chainId.
|
|
69
|
+
signFinalPolygon method name from Polygon class is updated to signFinalEthLike so that
|
|
70
|
+
it can be used for other EthLike coins. getBaseFactor method in Eth
|
|
71
|
+
and Polygon class returns number instead of string just to align with
|
|
72
|
+
AbstractEthLikeCoin
|
|
73
|
+
Ticket: WIN-1012
|
|
74
|
+
|
|
75
|
+
# [3.0.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-polygon@1.7.0...@bitgo/sdk-coin-polygon@3.0.0) (2023-11-13)
|
|
76
|
+
|
|
77
|
+
### Bug Fixes
|
|
78
|
+
|
|
79
|
+
- **sdk-coin-eth:** fix issue related to ethtxbuilder ([286ccfd](https://github.com/BitGo/BitGoJS/commit/286ccfd4bc89075fd2d8c59d3770dc3b8cd78c79))
|
|
80
|
+
|
|
81
|
+
### Code Refactoring
|
|
82
|
+
|
|
83
|
+
- **abstract-eth:** move methods to abstract-eth ([af8bd10](https://github.com/BitGo/BitGoJS/commit/af8bd10e24c8d58fc227494de6a614098265580a))
|
|
84
|
+
|
|
85
|
+
### Features
|
|
86
|
+
|
|
87
|
+
- update secp256k1 to 5.0.0 and keccak to 3.0.3 ([e2c37e6](https://github.com/BitGo/BitGoJS/commit/e2c37e6b0139c9f6948a22d8921bc3e1f88bed4c))
|
|
88
|
+
|
|
89
|
+
### BREAKING CHANGES
|
|
90
|
+
|
|
91
|
+
- **abstract-eth:** Type of nextContractSequenceId field in TransactionPrebuild
|
|
92
|
+
interface is changed from string to number in AbstractEthLikeCoin and AbstractEthLikeNewCoins classes.
|
|
93
|
+
getCustomChainName method is removed from Polygon class because a common
|
|
94
|
+
method getCustomChainCommon has been added to AbstractEthLikeNewCoins
|
|
95
|
+
class for all EthLike coins. replayProtectionOptions is not optional in buildTransaction method in AbstractEthLikeNewCoins
|
|
96
|
+
and needs to be passed to derive the Eth common object from the chainId.
|
|
97
|
+
signFinalPolygon method name from Polygon class is updated to signFinalEthLike so that
|
|
98
|
+
it can be used for other EthLike coins. getBaseFactor method in Eth
|
|
99
|
+
and Polygon class returns number instead of string just to align with
|
|
100
|
+
AbstractEthLikeCoin
|
|
101
|
+
Ticket: WIN-1012
|
|
102
|
+
|
|
103
|
+
# [2.0.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-polygon@1.7.0...@bitgo/sdk-coin-polygon@2.0.0) (2023-11-13)
|
|
104
|
+
|
|
105
|
+
### Bug Fixes
|
|
106
|
+
|
|
107
|
+
- **sdk-coin-eth:** fix issue related to ethtxbuilder ([286ccfd](https://github.com/BitGo/BitGoJS/commit/286ccfd4bc89075fd2d8c59d3770dc3b8cd78c79))
|
|
108
|
+
|
|
109
|
+
### Code Refactoring
|
|
110
|
+
|
|
111
|
+
- **abstract-eth:** move methods to abstract-eth ([af8bd10](https://github.com/BitGo/BitGoJS/commit/af8bd10e24c8d58fc227494de6a614098265580a))
|
|
112
|
+
|
|
113
|
+
### Features
|
|
114
|
+
|
|
115
|
+
- update secp256k1 to 5.0.0 and keccak to 3.0.3 ([e2c37e6](https://github.com/BitGo/BitGoJS/commit/e2c37e6b0139c9f6948a22d8921bc3e1f88bed4c))
|
|
116
|
+
|
|
117
|
+
### BREAKING CHANGES
|
|
118
|
+
|
|
119
|
+
- **abstract-eth:** Type of nextContractSequenceId field in TransactionPrebuild
|
|
120
|
+
interface is changed from string to number in AbstractEthLikeCoin and AbstractEthLikeNewCoins classes.
|
|
121
|
+
getCustomChainName method is removed from Polygon class because a common
|
|
122
|
+
method getCustomChainCommon has been added to AbstractEthLikeNewCoins
|
|
123
|
+
class for all EthLike coins. replayProtectionOptions is not optional in buildTransaction method in AbstractEthLikeNewCoins
|
|
124
|
+
and needs to be passed to derive the Eth common object from the chainId.
|
|
125
|
+
signFinalPolygon method name from Polygon class is updated to signFinalEthLike so that
|
|
126
|
+
it can be used for other EthLike coins. getBaseFactor method in Eth
|
|
127
|
+
and Polygon class returns number instead of string just to align with
|
|
128
|
+
AbstractEthLikeCoin
|
|
129
|
+
Ticket: WIN-1012
|
|
130
|
+
|
|
6
131
|
# [1.10.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-polygon@1.7.0...@bitgo/sdk-coin-polygon@1.10.0) (2023-10-20)
|
|
7
132
|
|
|
8
133
|
### Features
|
package/dist/src/lib/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,CAAC;AACjB,cAAc,cAAc,CAAC"}
|
package/dist/src/lib/index.js
CHANGED
|
@@ -18,6 +18,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
18
18
|
__setModuleDefault(result, mod);
|
|
19
19
|
return result;
|
|
20
20
|
};
|
|
21
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
22
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
23
|
+
};
|
|
21
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
25
|
exports.Utils = exports.TransferBuilder = exports.TransactionBuilder = exports.Transaction = exports.KeyPair = exports.Interface = void 0;
|
|
23
26
|
var abstract_eth_1 = require("@bitgo-beta/abstract-eth");
|
|
@@ -30,4 +33,5 @@ var transferBuilder_1 = require("./transferBuilder");
|
|
|
30
33
|
Object.defineProperty(exports, "TransferBuilder", { enumerable: true, get: function () { return transferBuilder_1.TransferBuilder; } });
|
|
31
34
|
const Utils = __importStar(require("./utils"));
|
|
32
35
|
exports.Utils = Utils;
|
|
33
|
-
|
|
36
|
+
__exportStar(require("./walletUtil"), exports);
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx5REFBMkU7QUFBbEUseUdBQUEsU0FBUyxPQUFBO0FBQUUsdUdBQUEsT0FBTyxPQUFBO0FBQUUsMkdBQUEsV0FBVyxPQUFBO0FBQ3hDLDJEQUEwRDtBQUFqRCx3SEFBQSxrQkFBa0IsT0FBQTtBQUMzQixxREFBb0Q7QUFBM0Msa0hBQUEsZUFBZSxPQUFBO0FBRXhCLCtDQUFpQztBQUN4QixzQkFBSztBQUNkLCtDQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEludGVyZmFjZSwgS2V5UGFpciwgVHJhbnNhY3Rpb24gfSBmcm9tICdAYml0Z28tYmV0YS9hYnN0cmFjdC1ldGgnO1xuZXhwb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuZXhwb3J0IHsgVHJhbnNmZXJCdWlsZGVyIH0gZnJvbSAnLi90cmFuc2ZlckJ1aWxkZXInO1xuXG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB7IFV0aWxzIH07XG5leHBvcnQgKiBmcm9tICcuL3dhbGxldFV0aWwnO1xuIl19
|
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
import { TransactionBuilder as
|
|
1
|
+
import { TransactionBuilder as EthLikeTransactionBuilder } from '@bitgo-beta/abstract-eth';
|
|
2
2
|
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
3
|
import { TransferBuilder } from './';
|
|
4
|
-
export declare class TransactionBuilder extends
|
|
4
|
+
export declare class TransactionBuilder extends EthLikeTransactionBuilder {
|
|
5
5
|
protected _transfer: TransferBuilder;
|
|
6
6
|
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
7
|
-
/**
|
|
8
|
-
* Returns the smart contract encoded data
|
|
9
|
-
*
|
|
10
|
-
* @param {string[]} addresses - the contract signers
|
|
11
|
-
* @returns {string} - the smart contract encoded data
|
|
12
|
-
*/
|
|
13
|
-
protected getContractData(addresses: string[]): string;
|
|
14
7
|
/** @inheritdoc */
|
|
15
8
|
transfer(data?: string): TransferBuilder;
|
|
16
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,IAAI,
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,IAAI,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAE3F,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG7D,OAAO,EAAe,eAAe,EAAE,MAAM,IAAI,CAAC;AAElD,qBAAa,kBAAmB,SAAQ,yBAAyB;IAC/D,SAAS,CAAC,SAAS,EAAE,eAAe,CAAC;gBAEzB,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAO7C,kBAAkB;IAClB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe;CASzC"}
|
|
@@ -1,33 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.TransactionBuilder = void 0;
|
|
7
|
-
const
|
|
4
|
+
const abstract_eth_1 = require("@bitgo-beta/abstract-eth");
|
|
8
5
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
9
|
-
const ethereumjs_abi_1 = __importDefault(require("ethereumjs-abi"));
|
|
10
6
|
const utils_1 = require("./utils");
|
|
11
7
|
const walletUtil_1 = require("./walletUtil");
|
|
12
8
|
const _1 = require("./");
|
|
13
|
-
class TransactionBuilder extends
|
|
9
|
+
class TransactionBuilder extends abstract_eth_1.TransactionBuilder {
|
|
14
10
|
constructor(_coinConfig) {
|
|
15
11
|
super(_coinConfig);
|
|
16
12
|
this._common = utils_1.getCommon(this._coinConfig.network.type);
|
|
17
13
|
this.transaction = new _1.Transaction(this._coinConfig, this._common);
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Returns the smart contract encoded data
|
|
21
|
-
*
|
|
22
|
-
* @param {string[]} addresses - the contract signers
|
|
23
|
-
* @returns {string} - the smart contract encoded data
|
|
24
|
-
*/
|
|
25
|
-
getContractData(addresses) {
|
|
26
|
-
const params = [addresses];
|
|
27
|
-
const resultEncodedParameters = ethereumjs_abi_1.default.rawEncode(walletUtil_1.walletSimpleConstructor, params)
|
|
28
|
-
.toString('hex')
|
|
29
|
-
.replace('0x', '');
|
|
30
|
-
return walletUtil_1.walletSimpleByteCode + resultEncodedParameters;
|
|
14
|
+
this._walletSimpleByteCode = walletUtil_1.walletSimpleByteCode;
|
|
31
15
|
}
|
|
32
16
|
/** @inheritdoc */
|
|
33
17
|
transfer(data) {
|
|
@@ -41,4 +25,4 @@ class TransactionBuilder extends sdk_coin_eth_1.TransactionBuilder {
|
|
|
41
25
|
}
|
|
42
26
|
}
|
|
43
27
|
exports.TransactionBuilder = TransactionBuilder;
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb25CdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkRBQTJGO0FBQzNGLG1EQUE4RTtBQUU5RSxtQ0FBb0M7QUFDcEMsNkNBQW9EO0FBQ3BELHlCQUFrRDtBQUVsRCxNQUFhLGtCQUFtQixTQUFRLGlDQUF5QjtJQUcvRCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLGlCQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGNBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMscUJBQXFCLEdBQUcsaUNBQW9CLENBQUM7SUFDcEQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixRQUFRLENBQUMsSUFBYTtRQUNwQixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssMEJBQWUsQ0FBQyxJQUFJLEVBQUU7WUFDdkMsTUFBTSxJQUFJLGdDQUFxQixDQUFDLGlEQUFpRCxDQUFDLENBQUM7U0FDcEY7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksa0JBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QztRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUFwQkQsZ0RBb0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIGFzIEV0aExpa2VUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICdAYml0Z28tYmV0YS9hYnN0cmFjdC1ldGgnO1xuaW1wb3J0IHsgQnVpbGRUcmFuc2FjdGlvbkVycm9yLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBnZXRDb21tb24gfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IHdhbGxldFNpbXBsZUJ5dGVDb2RlIH0gZnJvbSAnLi93YWxsZXRVdGlsJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uLCBUcmFuc2ZlckJ1aWxkZXIgfSBmcm9tICcuLyc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJ1aWxkZXIgZXh0ZW5kcyBFdGhMaWtlVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgcHJvdGVjdGVkIF90cmFuc2ZlcjogVHJhbnNmZXJCdWlsZGVyO1xuXG4gIGNvbnN0cnVjdG9yKF9jb2luQ29uZmlnOiBSZWFkb25seTxDb2luQ29uZmlnPikge1xuICAgIHN1cGVyKF9jb2luQ29uZmlnKTtcbiAgICB0aGlzLl9jb21tb24gPSBnZXRDb21tb24odGhpcy5fY29pbkNvbmZpZy5uZXR3b3JrLnR5cGUpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24odGhpcy5fY29pbkNvbmZpZywgdGhpcy5fY29tbW9uKTtcbiAgICB0aGlzLl93YWxsZXRTaW1wbGVCeXRlQ29kZSA9IHdhbGxldFNpbXBsZUJ5dGVDb2RlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRyYW5zZmVyKGRhdGE/OiBzdHJpbmcpOiBUcmFuc2ZlckJ1aWxkZXIge1xuICAgIGlmICh0aGlzLl90eXBlICE9PSBUcmFuc2FjdGlvblR5cGUuU2VuZCkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNmZXJzIGNhbiBvbmx5IGJlIHNldCBmb3Igc2VuZCB0cmFuc2FjdGlvbnMnKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl90cmFuc2Zlcikge1xuICAgICAgdGhpcy5fdHJhbnNmZXIgPSBuZXcgVHJhbnNmZXJCdWlsZGVyKGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fdHJhbnNmZXI7XG4gIH1cbn1cbiJdfQ==
|
package/dist/src/polygon.d.ts
CHANGED
|
@@ -1,83 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import { Eth, Recipient, GetSendMethodArgsOptions, SendMethodArgs, BuildTransactionParams, SignFinalOptions, SignTransactionOptions, SignedTransaction, RecoverOptions, RecoveryInfo, OfflineVaultTxInfo } from '@bitgo-beta/sdk-coin-eth';
|
|
4
|
-
import { BaseCoin, BitGoBase, TransactionExplanation, FullySignedTransaction, MPCAlgorithm } from '@bitgo-beta/sdk-core';
|
|
1
|
+
import { AbstractEthLikeNewCoins } from '@bitgo-beta/abstract-eth';
|
|
2
|
+
import { BaseCoin, BitGoBase, MPCAlgorithm } from '@bitgo-beta/sdk-core';
|
|
5
3
|
import { BaseCoin as StaticsBaseCoin } from '@bitgo-beta/statics';
|
|
6
4
|
import { TransactionBuilder } from './lib';
|
|
7
|
-
|
|
8
|
-
export declare class Polygon extends Eth {
|
|
9
|
-
protected readonly _staticsCoin: Readonly<StaticsBaseCoin>;
|
|
10
|
-
protected readonly sendMethodName: 'sendMultiSig' | 'sendMultiSigToken';
|
|
5
|
+
export declare class Polygon extends AbstractEthLikeNewCoins {
|
|
11
6
|
protected constructor(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>);
|
|
12
7
|
static createInstance(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>): BaseCoin;
|
|
13
|
-
static getCustomChainName(chainId?: number): string;
|
|
14
|
-
static buildTransaction(params: BuildTransactionParams): EthTxLib.FeeMarketEIP1559Transaction | EthTxLib.Transaction;
|
|
15
|
-
getChain(): string;
|
|
16
|
-
getFamily(): string;
|
|
17
|
-
getFullName(): string;
|
|
18
|
-
/**
|
|
19
|
-
* Get the base chain that the coin exists on.
|
|
20
|
-
*/
|
|
21
|
-
getBaseChain(): string;
|
|
22
|
-
isValidPub(pub: string): boolean;
|
|
23
|
-
/** @inheritDoc */
|
|
24
|
-
explainTransaction(options: ExplainTransactionOptions): Promise<TransactionExplanation>;
|
|
25
8
|
/**
|
|
26
9
|
* Create a new transaction builder for the current chain
|
|
27
10
|
* @return a new transaction builder
|
|
28
11
|
*/
|
|
29
|
-
getTransactionBuilder(): TransactionBuilder;
|
|
30
|
-
/**
|
|
31
|
-
* Get transfer operation for coin
|
|
32
|
-
* @param recipient recipient info
|
|
33
|
-
* @param expireTime expiry time
|
|
34
|
-
* @param contractSequenceId sequence id
|
|
35
|
-
* @returns {Array} operation array
|
|
36
|
-
*/
|
|
37
|
-
getOperation(recipient: Recipient, expireTime: number, contractSequenceId: number): (string | Buffer)[][];
|
|
38
|
-
/**
|
|
39
|
-
* Build arguments to call the send method on the wallet contract
|
|
40
|
-
* @param txInfo
|
|
41
|
-
*/
|
|
42
|
-
getSendMethodArgs(txInfo: GetSendMethodArgsOptions): SendMethodArgs[];
|
|
43
|
-
/**
|
|
44
|
-
* Helper function for signTransaction for the rare case that SDK is doing the second signature
|
|
45
|
-
* Note: we are expecting this to be called from the offline vault
|
|
46
|
-
* @param params.txPrebuild
|
|
47
|
-
* @param params.prv
|
|
48
|
-
* @returns {{txHex: string}}
|
|
49
|
-
*/
|
|
50
|
-
signFinalPolygon(params: SignFinalOptions): Promise<FullySignedTransaction>;
|
|
51
|
-
/**
|
|
52
|
-
* Assemble half-sign prebuilt transaction
|
|
53
|
-
* @param params
|
|
54
|
-
*/
|
|
55
|
-
signTransaction(params: SignTransactionOptions): Promise<SignedTransaction>;
|
|
12
|
+
protected getTransactionBuilder(): TransactionBuilder;
|
|
56
13
|
/**
|
|
57
14
|
* Make a query to Polygonscan for information such as balance, token balance, solidity calls
|
|
58
15
|
* @param {Object} query key-value pairs of parameters to append after /api
|
|
59
16
|
* @returns {Promise<Object>} response from Polygonscan
|
|
60
17
|
*/
|
|
61
18
|
recoveryBlockchainExplorerQuery(query: Record<string, string>): Promise<any>;
|
|
62
|
-
/**
|
|
63
|
-
* Builds a funds recovery transaction without BitGo for non-TSS transaction
|
|
64
|
-
* @param params
|
|
65
|
-
* @param {String} params.userKey [encrypted] xprv or xpub
|
|
66
|
-
* @param {String} params.backupKey [encrypted] xprv or xpub if the xprv is held by a KRS provider
|
|
67
|
-
* @param {String} params.walletPassphrase used to decrypt userKey and backupKey
|
|
68
|
-
* @param {String} params.walletContractAddress the Polygon address of the wallet contract
|
|
69
|
-
* @param {String} params.krsProvider necessary if backup key is held by KRS
|
|
70
|
-
* @param {String} params.recoveryDestination target address to send recovered funds to
|
|
71
|
-
* @param {String} params.bitgoFeeAddress wrong chain wallet fee address for evm based cross chain recovery txn
|
|
72
|
-
* @param {String} params.bitgoDestinationAddress target bitgo address where fee will be sent for evm based cross chain recovery txn
|
|
73
|
-
* @returns {Promise<RecoveryInfo | OfflineVaultTxInfo>}
|
|
74
|
-
*/
|
|
75
|
-
recoverEthLike(params: RecoverOptions): Promise<RecoveryInfo | OfflineVaultTxInfo>;
|
|
76
|
-
/** @inheritDoc */
|
|
77
|
-
supportsTss(): boolean;
|
|
78
19
|
/** @inheritDoc */
|
|
79
20
|
supportsMessageSigning(): boolean;
|
|
80
21
|
/** @inheritDoc */
|
|
22
|
+
supportsSigningTypedData(): boolean;
|
|
23
|
+
/** @inheritDoc */
|
|
24
|
+
supportsTss(): boolean;
|
|
25
|
+
/** @inheritDoc */
|
|
81
26
|
getMPCAlgorithm(): MPCAlgorithm;
|
|
82
27
|
}
|
|
83
28
|
//# sourceMappingURL=polygon.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polygon.d.ts","sourceRoot":"","sources":["../../src/polygon.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"polygon.d.ts","sourceRoot":"","sources":["../../src/polygon.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAU,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAS,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAE3C,qBAAa,OAAQ,SAAQ,uBAAuB;IAClD,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAI/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F;;;OAGG;IACH,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;IAIrD;;;;OAIG;IACG,+BAA+B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC;IAmBlF,kBAAkB;IAClB,sBAAsB,IAAI,OAAO;IAIjC,kBAAkB;IAClB,wBAAwB,IAAI,OAAO;IAInC,kBAAkB;IAClB,WAAW,IAAI,OAAO;IAItB,kBAAkB;IAClB,eAAe,IAAI,YAAY;CAGhC"}
|
package/dist/src/polygon.js
CHANGED
|
@@ -7,120 +7,18 @@ exports.Polygon = void 0;
|
|
|
7
7
|
/**
|
|
8
8
|
* @prettier
|
|
9
9
|
*/
|
|
10
|
-
const utxo_lib_1 = require("@bitgo-beta/utxo-lib");
|
|
11
10
|
const superagent_1 = __importDefault(require("superagent"));
|
|
12
|
-
const
|
|
11
|
+
const abstract_eth_1 = require("@bitgo-beta/abstract-eth");
|
|
13
12
|
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
14
13
|
const statics_1 = require("@bitgo-beta/statics");
|
|
15
|
-
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
16
14
|
const lib_1 = require("./lib");
|
|
17
|
-
|
|
18
|
-
class Polygon extends sdk_coin_eth_1.Eth {
|
|
15
|
+
class Polygon extends abstract_eth_1.AbstractEthLikeNewCoins {
|
|
19
16
|
constructor(bitgo, staticsCoin) {
|
|
20
17
|
super(bitgo, staticsCoin);
|
|
21
|
-
if (!staticsCoin) {
|
|
22
|
-
throw new Error('missing required constructor parameter staticsCoin');
|
|
23
|
-
}
|
|
24
|
-
this._staticsCoin = staticsCoin;
|
|
25
18
|
}
|
|
26
19
|
static createInstance(bitgo, staticsCoin) {
|
|
27
20
|
return new Polygon(bitgo, staticsCoin);
|
|
28
21
|
}
|
|
29
|
-
static getCustomChainName(chainId) {
|
|
30
|
-
if (chainId === 80001) {
|
|
31
|
-
return 'PolygonMumbai';
|
|
32
|
-
}
|
|
33
|
-
return 'PolygonMainnet';
|
|
34
|
-
}
|
|
35
|
-
static buildTransaction(params) {
|
|
36
|
-
// if eip1559 params are specified, default to london hardfork, otherwise,
|
|
37
|
-
// default to tangerine whistle to avoid replay protection issues
|
|
38
|
-
const defaultHardfork = !!params.eip1559 ? 'london' : sdk_coin_eth_1.optionalDeps.EthCommon.Hardfork.TangerineWhistle;
|
|
39
|
-
let customChainCommon;
|
|
40
|
-
// if replay protection options are set, override the default common setting
|
|
41
|
-
if (params.replayProtectionOptions) {
|
|
42
|
-
const customChainName = Polygon.getCustomChainName(params.replayProtectionOptions.chain);
|
|
43
|
-
const customChain = sdk_coin_eth_1.optionalDeps.EthCommon.CustomChain[customChainName];
|
|
44
|
-
customChainCommon = sdk_coin_eth_1.optionalDeps.EthCommon.default.custom(customChain);
|
|
45
|
-
customChainCommon.setHardfork(params.replayProtectionOptions.hardfork);
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
const customChain = sdk_coin_eth_1.optionalDeps.EthCommon.CustomChain[Polygon.getCustomChainName()];
|
|
49
|
-
customChainCommon = sdk_coin_eth_1.optionalDeps.EthCommon.default.custom(customChain);
|
|
50
|
-
customChainCommon.setHardfork(defaultHardfork);
|
|
51
|
-
}
|
|
52
|
-
const baseParams = {
|
|
53
|
-
to: params.to,
|
|
54
|
-
nonce: params.nonce,
|
|
55
|
-
value: params.value,
|
|
56
|
-
data: params.data,
|
|
57
|
-
gasLimit: new sdk_coin_eth_1.optionalDeps.ethUtil.BN(params.gasLimit),
|
|
58
|
-
};
|
|
59
|
-
const unsignedEthTx = !!params.eip1559
|
|
60
|
-
? sdk_coin_eth_1.optionalDeps.EthTx.FeeMarketEIP1559Transaction.fromTxData({
|
|
61
|
-
...baseParams,
|
|
62
|
-
maxFeePerGas: new sdk_coin_eth_1.optionalDeps.ethUtil.BN(params.eip1559.maxFeePerGas),
|
|
63
|
-
maxPriorityFeePerGas: new sdk_coin_eth_1.optionalDeps.ethUtil.BN(params.eip1559.maxPriorityFeePerGas),
|
|
64
|
-
}, { common: customChainCommon })
|
|
65
|
-
: sdk_coin_eth_1.optionalDeps.EthTx.Transaction.fromTxData({
|
|
66
|
-
...baseParams,
|
|
67
|
-
gasPrice: new sdk_coin_eth_1.optionalDeps.ethUtil.BN(params.gasPrice),
|
|
68
|
-
}, { common: customChainCommon });
|
|
69
|
-
return unsignedEthTx;
|
|
70
|
-
}
|
|
71
|
-
getChain() {
|
|
72
|
-
return 'polygon';
|
|
73
|
-
}
|
|
74
|
-
getFamily() {
|
|
75
|
-
return 'polygon';
|
|
76
|
-
}
|
|
77
|
-
getFullName() {
|
|
78
|
-
return 'Polygon';
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Get the base chain that the coin exists on.
|
|
82
|
-
*/
|
|
83
|
-
getBaseChain() {
|
|
84
|
-
return this.getChain();
|
|
85
|
-
}
|
|
86
|
-
isValidPub(pub) {
|
|
87
|
-
let valid = true;
|
|
88
|
-
try {
|
|
89
|
-
new lib_1.KeyPair({ pub });
|
|
90
|
-
}
|
|
91
|
-
catch (e) {
|
|
92
|
-
valid = false;
|
|
93
|
-
}
|
|
94
|
-
return valid;
|
|
95
|
-
}
|
|
96
|
-
/** @inheritDoc */
|
|
97
|
-
async explainTransaction(options) {
|
|
98
|
-
const txHex = options.txHex || (options.halfSigned && options.halfSigned.txHex);
|
|
99
|
-
if (!txHex || !options.feeInfo) {
|
|
100
|
-
throw new Error('missing explain tx parameters');
|
|
101
|
-
}
|
|
102
|
-
const txBuilder = this.getTransactionBuilder();
|
|
103
|
-
txBuilder.from(txHex);
|
|
104
|
-
const tx = await txBuilder.build();
|
|
105
|
-
const outputs = tx.outputs.map((output) => {
|
|
106
|
-
return {
|
|
107
|
-
address: output.address,
|
|
108
|
-
amount: output.value,
|
|
109
|
-
};
|
|
110
|
-
});
|
|
111
|
-
const displayOrder = ['id', 'outputAmount', 'changeAmount', 'outputs', 'changeOutputs', 'fee'];
|
|
112
|
-
return {
|
|
113
|
-
displayOrder,
|
|
114
|
-
id: tx.id,
|
|
115
|
-
outputs: outputs,
|
|
116
|
-
outputAmount: outputs
|
|
117
|
-
.reduce((accumulator, output) => accumulator.plus(output.amount), new bignumber_js_1.default('0'))
|
|
118
|
-
.toFixed(0),
|
|
119
|
-
changeOutputs: [],
|
|
120
|
-
changeAmount: '0',
|
|
121
|
-
fee: options.feeInfo,
|
|
122
|
-
};
|
|
123
|
-
}
|
|
124
22
|
/**
|
|
125
23
|
* Create a new transaction builder for the current chain
|
|
126
24
|
* @return a new transaction builder
|
|
@@ -128,119 +26,6 @@ class Polygon extends sdk_coin_eth_1.Eth {
|
|
|
128
26
|
getTransactionBuilder() {
|
|
129
27
|
return new lib_1.TransactionBuilder(statics_1.coins.get(this.getBaseChain()));
|
|
130
28
|
}
|
|
131
|
-
/**
|
|
132
|
-
* Get transfer operation for coin
|
|
133
|
-
* @param recipient recipient info
|
|
134
|
-
* @param expireTime expiry time
|
|
135
|
-
* @param contractSequenceId sequence id
|
|
136
|
-
* @returns {Array} operation array
|
|
137
|
-
*/
|
|
138
|
-
getOperation(recipient, expireTime, contractSequenceId) {
|
|
139
|
-
return [
|
|
140
|
-
['string', 'address', 'uint256', 'bytes', 'uint256', 'uint256'],
|
|
141
|
-
[
|
|
142
|
-
'POLYGON',
|
|
143
|
-
new sdk_coin_eth_1.optionalDeps.ethUtil.BN(sdk_coin_eth_1.optionalDeps.ethUtil.stripHexPrefix(recipient.address), 16),
|
|
144
|
-
recipient.amount,
|
|
145
|
-
Buffer.from(sdk_coin_eth_1.optionalDeps.ethUtil.stripHexPrefix(sdk_coin_eth_1.optionalDeps.ethUtil.padToEven(recipient.data || '')), 'hex'),
|
|
146
|
-
expireTime,
|
|
147
|
-
contractSequenceId,
|
|
148
|
-
],
|
|
149
|
-
];
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Build arguments to call the send method on the wallet contract
|
|
153
|
-
* @param txInfo
|
|
154
|
-
*/
|
|
155
|
-
getSendMethodArgs(txInfo) {
|
|
156
|
-
// Method signature is
|
|
157
|
-
// sendMultiSig(address toAddress, uint256 value, bytes data, uint256 expireTime, uint256 sequenceId, bytes signature)
|
|
158
|
-
return [
|
|
159
|
-
{
|
|
160
|
-
name: 'toAddress',
|
|
161
|
-
type: 'address',
|
|
162
|
-
value: txInfo.recipient.address,
|
|
163
|
-
},
|
|
164
|
-
{
|
|
165
|
-
name: 'value',
|
|
166
|
-
type: 'uint256',
|
|
167
|
-
value: txInfo.recipient.amount,
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
name: 'data',
|
|
171
|
-
type: 'bytes',
|
|
172
|
-
value: sdk_coin_eth_1.optionalDeps.ethUtil.toBuffer(sdk_coin_eth_1.optionalDeps.ethUtil.addHexPrefix(txInfo.recipient.data || '')),
|
|
173
|
-
},
|
|
174
|
-
{
|
|
175
|
-
name: 'expireTime',
|
|
176
|
-
type: 'uint256',
|
|
177
|
-
value: txInfo.expireTime,
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
name: 'sequenceId',
|
|
181
|
-
type: 'uint256',
|
|
182
|
-
value: txInfo.contractSequenceId,
|
|
183
|
-
},
|
|
184
|
-
{
|
|
185
|
-
name: 'signature',
|
|
186
|
-
type: 'bytes',
|
|
187
|
-
value: sdk_coin_eth_1.optionalDeps.ethUtil.toBuffer(sdk_coin_eth_1.optionalDeps.ethUtil.addHexPrefix(txInfo.signature)),
|
|
188
|
-
},
|
|
189
|
-
];
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Helper function for signTransaction for the rare case that SDK is doing the second signature
|
|
193
|
-
* Note: we are expecting this to be called from the offline vault
|
|
194
|
-
* @param params.txPrebuild
|
|
195
|
-
* @param params.prv
|
|
196
|
-
* @returns {{txHex: string}}
|
|
197
|
-
*/
|
|
198
|
-
async signFinalPolygon(params) {
|
|
199
|
-
const signingKey = new lib_1.KeyPair({ prv: params.prv }).getKeys().prv;
|
|
200
|
-
if (lodash_1.default.isUndefined(signingKey)) {
|
|
201
|
-
throw new Error('missing private key');
|
|
202
|
-
}
|
|
203
|
-
const txBuilder = this.getTransactionBuilder();
|
|
204
|
-
try {
|
|
205
|
-
txBuilder.from(params.txPrebuild.halfSigned.txHex);
|
|
206
|
-
}
|
|
207
|
-
catch (e) {
|
|
208
|
-
throw new Error('invalid half-signed transaction');
|
|
209
|
-
}
|
|
210
|
-
txBuilder.sign({ key: signingKey });
|
|
211
|
-
const tx = await txBuilder.build();
|
|
212
|
-
return {
|
|
213
|
-
txHex: tx.toBroadcastFormat(),
|
|
214
|
-
};
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Assemble half-sign prebuilt transaction
|
|
218
|
-
* @param params
|
|
219
|
-
*/
|
|
220
|
-
async signTransaction(params) {
|
|
221
|
-
// Normally the SDK provides the first signature for an POLYGON tx, but occasionally it provides the second and final one.
|
|
222
|
-
if (params.isLastSignature) {
|
|
223
|
-
// In this case when we're doing the second (final) signature, the logic is different.
|
|
224
|
-
return await this.signFinalPolygon(params);
|
|
225
|
-
}
|
|
226
|
-
const txBuilder = this.getTransactionBuilder();
|
|
227
|
-
txBuilder.from(params.txPrebuild.txHex);
|
|
228
|
-
txBuilder.transfer().key(new lib_1.KeyPair({ prv: params.prv }).getKeys().prv);
|
|
229
|
-
const transaction = await txBuilder.build();
|
|
230
|
-
const recipients = transaction.outputs.map((output) => ({ address: output.address, amount: output.value }));
|
|
231
|
-
const txParams = {
|
|
232
|
-
eip1559: params.txPrebuild.eip1559,
|
|
233
|
-
txHex: transaction.toBroadcastFormat(),
|
|
234
|
-
recipients: recipients,
|
|
235
|
-
expiration: params.txPrebuild.expireTime,
|
|
236
|
-
hopTransaction: params.txPrebuild.hopTransaction,
|
|
237
|
-
custodianTransactionId: params.custodianTransactionId,
|
|
238
|
-
expireTime: params.expireTime,
|
|
239
|
-
contractSequenceId: params.txPrebuild.nextContractSequenceId,
|
|
240
|
-
sequenceId: params.sequenceId,
|
|
241
|
-
};
|
|
242
|
-
return { halfSigned: txParams };
|
|
243
|
-
}
|
|
244
29
|
/**
|
|
245
30
|
* Make a query to Polygonscan for information such as balance, token balance, solidity calls
|
|
246
31
|
* @param {Object} query key-value pairs of parameters to append after /api
|
|
@@ -262,172 +47,16 @@ class Polygon extends sdk_coin_eth_1.Eth {
|
|
|
262
47
|
}
|
|
263
48
|
return response.body;
|
|
264
49
|
}
|
|
265
|
-
/**
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
* @param {String} params.userKey [encrypted] xprv or xpub
|
|
269
|
-
* @param {String} params.backupKey [encrypted] xprv or xpub if the xprv is held by a KRS provider
|
|
270
|
-
* @param {String} params.walletPassphrase used to decrypt userKey and backupKey
|
|
271
|
-
* @param {String} params.walletContractAddress the Polygon address of the wallet contract
|
|
272
|
-
* @param {String} params.krsProvider necessary if backup key is held by KRS
|
|
273
|
-
* @param {String} params.recoveryDestination target address to send recovered funds to
|
|
274
|
-
* @param {String} params.bitgoFeeAddress wrong chain wallet fee address for evm based cross chain recovery txn
|
|
275
|
-
* @param {String} params.bitgoDestinationAddress target bitgo address where fee will be sent for evm based cross chain recovery txn
|
|
276
|
-
* @returns {Promise<RecoveryInfo | OfflineVaultTxInfo>}
|
|
277
|
-
*/
|
|
278
|
-
async recoverEthLike(params) {
|
|
279
|
-
// bitgoFeeAddress is only defined when it is a evm cross chain recovery
|
|
280
|
-
// as we use fee from this wrong chain address for the recovery txn on the correct chain.
|
|
281
|
-
if (params.bitgoFeeAddress) {
|
|
282
|
-
return this.recoverEthLikeforEvmBasedRecovery(params);
|
|
283
|
-
}
|
|
284
|
-
this.validateRecoveryParams(params);
|
|
285
|
-
const isUnsignedSweep = sdk_core_1.getIsUnsignedSweep(params);
|
|
286
|
-
// Clean up whitespace from entered values
|
|
287
|
-
let userKey = params.userKey.replace(/\s/g, '');
|
|
288
|
-
const backupKey = params.backupKey.replace(/\s/g, '');
|
|
289
|
-
const gasLimit = new sdk_coin_eth_1.optionalDeps.ethUtil.BN(this.setGasLimit(params.gasLimit));
|
|
290
|
-
const gasPrice = params.eip1559
|
|
291
|
-
? new sdk_coin_eth_1.optionalDeps.ethUtil.BN(params.eip1559.maxFeePerGas)
|
|
292
|
-
: new sdk_coin_eth_1.optionalDeps.ethUtil.BN(this.setGasPrice(params.gasPrice));
|
|
293
|
-
if (!userKey.startsWith('xpub') && !userKey.startsWith('xprv')) {
|
|
294
|
-
try {
|
|
295
|
-
userKey = this.bitgo.decrypt({
|
|
296
|
-
input: userKey,
|
|
297
|
-
password: params.walletPassphrase,
|
|
298
|
-
});
|
|
299
|
-
}
|
|
300
|
-
catch (e) {
|
|
301
|
-
throw new Error(`Error decrypting user keychain: ${e.message}`);
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
let backupKeyAddress;
|
|
305
|
-
let backupSigningKey;
|
|
306
|
-
if (isUnsignedSweep) {
|
|
307
|
-
const backupHDNode = utxo_lib_1.bip32.fromBase58(backupKey);
|
|
308
|
-
backupSigningKey = backupHDNode.publicKey;
|
|
309
|
-
backupKeyAddress = `0x${sdk_coin_eth_1.optionalDeps.ethUtil.publicToAddress(backupSigningKey, true).toString('hex')}`;
|
|
310
|
-
}
|
|
311
|
-
else {
|
|
312
|
-
// Decrypt backup private key and get address
|
|
313
|
-
let backupPrv;
|
|
314
|
-
try {
|
|
315
|
-
backupPrv = this.bitgo.decrypt({
|
|
316
|
-
input: backupKey,
|
|
317
|
-
password: params.walletPassphrase,
|
|
318
|
-
});
|
|
319
|
-
}
|
|
320
|
-
catch (e) {
|
|
321
|
-
throw new Error(`Error decrypting backup keychain: ${e.message}`);
|
|
322
|
-
}
|
|
323
|
-
const keyPair = new lib_1.KeyPair({ prv: backupPrv });
|
|
324
|
-
backupSigningKey = keyPair.getKeys().prv;
|
|
325
|
-
if (!backupSigningKey) {
|
|
326
|
-
throw new Error('no private key');
|
|
327
|
-
}
|
|
328
|
-
backupKeyAddress = keyPair.getAddress();
|
|
329
|
-
}
|
|
330
|
-
const backupKeyNonce = await this.getAddressNonce(backupKeyAddress);
|
|
331
|
-
// get balance of backupKey to ensure funds are available to pay fees
|
|
332
|
-
const backupKeyBalance = await this.queryAddressBalance(backupKeyAddress);
|
|
333
|
-
const totalGasNeeded = gasPrice.mul(gasLimit);
|
|
334
|
-
const weiToGwei = 10 ** 9;
|
|
335
|
-
if (backupKeyBalance.lt(totalGasNeeded)) {
|
|
336
|
-
throw new Error(`Backup key address ${backupKeyAddress} has balance ${(backupKeyBalance / weiToGwei).toString()} Gwei.` +
|
|
337
|
-
`This address must have a balance of at least ${(totalGasNeeded / weiToGwei).toString()}` +
|
|
338
|
-
` Gwei to perform recoveries. Try sending some MATIC to this address then retry.`);
|
|
339
|
-
}
|
|
340
|
-
// get balance of wallet
|
|
341
|
-
const txAmount = await this.queryAddressBalance(params.walletContractAddress);
|
|
342
|
-
// build recipients object
|
|
343
|
-
const recipients = [
|
|
344
|
-
{
|
|
345
|
-
address: params.recoveryDestination,
|
|
346
|
-
amount: txAmount.toString(10),
|
|
347
|
-
},
|
|
348
|
-
];
|
|
349
|
-
// Get sequence ID using contract call
|
|
350
|
-
// we need to wait between making two polygonscan calls to avoid getting banned
|
|
351
|
-
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
352
|
-
const sequenceId = await this.querySequenceId(params.walletContractAddress);
|
|
353
|
-
let operationHash, signature;
|
|
354
|
-
// Get operation hash and sign it
|
|
355
|
-
if (!isUnsignedSweep) {
|
|
356
|
-
operationHash = this.getOperationSha3ForExecuteAndConfirm(recipients, this.getDefaultExpireTime(), sequenceId);
|
|
357
|
-
signature = sdk_core_1.Util.ethSignMsgHash(operationHash, sdk_core_1.Util.xprvToEthPrivateKey(userKey));
|
|
358
|
-
try {
|
|
359
|
-
sdk_core_1.Util.ecRecoverEthAddress(operationHash, signature);
|
|
360
|
-
}
|
|
361
|
-
catch (e) {
|
|
362
|
-
throw new Error('Invalid signature');
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
const txInfo = {
|
|
366
|
-
recipient: recipients[0],
|
|
367
|
-
expireTime: this.getDefaultExpireTime(),
|
|
368
|
-
contractSequenceId: sequenceId,
|
|
369
|
-
operationHash: operationHash,
|
|
370
|
-
signature: signature,
|
|
371
|
-
gasLimit: gasLimit.toString(10),
|
|
372
|
-
};
|
|
373
|
-
const txBuilder = this.getTransactionBuilder();
|
|
374
|
-
txBuilder.counter(backupKeyNonce);
|
|
375
|
-
txBuilder.contract(params.walletContractAddress);
|
|
376
|
-
let txFee;
|
|
377
|
-
if (params.eip1559) {
|
|
378
|
-
txFee = {
|
|
379
|
-
eip1559: {
|
|
380
|
-
maxPriorityFeePerGas: params.eip1559.maxPriorityFeePerGas,
|
|
381
|
-
maxFeePerGas: params.eip1559.maxFeePerGas,
|
|
382
|
-
},
|
|
383
|
-
};
|
|
384
|
-
}
|
|
385
|
-
else {
|
|
386
|
-
txFee = { fee: gasPrice.toString() };
|
|
387
|
-
}
|
|
388
|
-
txBuilder.fee({
|
|
389
|
-
...txFee,
|
|
390
|
-
gasLimit: gasLimit.toString(),
|
|
391
|
-
});
|
|
392
|
-
txBuilder
|
|
393
|
-
.transfer()
|
|
394
|
-
.amount(recipients[0].amount)
|
|
395
|
-
.contractSequenceId(sequenceId)
|
|
396
|
-
.expirationTime(this.getDefaultExpireTime())
|
|
397
|
-
.to(params.recoveryDestination);
|
|
398
|
-
const tx = await txBuilder.build();
|
|
399
|
-
if (isUnsignedSweep) {
|
|
400
|
-
const response = {
|
|
401
|
-
txHex: tx.toBroadcastFormat(),
|
|
402
|
-
userKey,
|
|
403
|
-
backupKey,
|
|
404
|
-
coin: this.getChain(),
|
|
405
|
-
gasPrice: sdk_coin_eth_1.optionalDeps.ethUtil.bufferToInt(gasPrice).toFixed(),
|
|
406
|
-
gasLimit,
|
|
407
|
-
recipients: [txInfo.recipient],
|
|
408
|
-
walletContractAddress: tx.toJson().to,
|
|
409
|
-
amount: txInfo.recipient.amount,
|
|
410
|
-
backupKeyNonce,
|
|
411
|
-
eip1559: params.eip1559,
|
|
412
|
-
};
|
|
413
|
-
lodash_1.default.extend(response, txInfo);
|
|
414
|
-
response.nextContractSequenceId = response.contractSequenceId;
|
|
415
|
-
return response;
|
|
416
|
-
}
|
|
417
|
-
txBuilder.transfer().key(new lib_1.KeyPair({ prv: userKey }).getKeys().prv);
|
|
418
|
-
txBuilder.sign({ key: backupSigningKey });
|
|
419
|
-
const signedTx = await txBuilder.build();
|
|
420
|
-
return {
|
|
421
|
-
id: signedTx.toJson().id,
|
|
422
|
-
tx: signedTx.toBroadcastFormat(),
|
|
423
|
-
};
|
|
50
|
+
/** @inheritDoc */
|
|
51
|
+
supportsMessageSigning() {
|
|
52
|
+
return true;
|
|
424
53
|
}
|
|
425
54
|
/** @inheritDoc */
|
|
426
|
-
|
|
55
|
+
supportsSigningTypedData() {
|
|
427
56
|
return true;
|
|
428
57
|
}
|
|
429
58
|
/** @inheritDoc */
|
|
430
|
-
|
|
59
|
+
supportsTss() {
|
|
431
60
|
return true;
|
|
432
61
|
}
|
|
433
62
|
/** @inheritDoc */
|
|
@@ -436,4 +65,4 @@ class Polygon extends sdk_coin_eth_1.Eth {
|
|
|
436
65
|
}
|
|
437
66
|
}
|
|
438
67
|
exports.Polygon = Polygon;
|
|
439
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seWdvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wb2x5Z29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztHQUVHO0FBQ0gsbURBQTZDO0FBQzdDLDREQUFpQztBQUVqQywyREFha0M7QUFDbEMsbURBUzhCO0FBQzlCLGlEQUF5RTtBQUN6RSxnRUFBcUM7QUFDckMsK0JBQW9EO0FBQ3BELG9EQUF1QjtBQUd2QixNQUFhLE9BQVEsU0FBUSxrQkFBRztJQUk5QixZQUFzQixLQUFnQixFQUFFLFdBQXVDO1FBQzdFLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFMUIsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7U0FDdkU7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQixFQUFFLFdBQXVDO1FBQzdFLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFDRCxNQUFNLENBQUMsa0JBQWtCLENBQUMsT0FBZ0I7UUFDeEMsSUFBSSxPQUFPLEtBQUssS0FBSyxFQUFFO1lBQ3JCLE9BQU8sZUFBZSxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQThCO1FBQ3BELDBFQUEwRTtRQUMxRSxpRUFBaUU7UUFDakUsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsMkJBQVksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1FBQ3ZHLElBQUksaUJBQWlCLENBQUM7UUFDdEIsNEVBQTRFO1FBQzVFLElB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QU8sRUFBRSxNQUFNLENBQUMsT0FBTzthQUN4QixDQUFDO1lBQ0YsZ0JBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzNCLFFBQVEsQ0FBQyxzQkFBc0IsR0FBRyxRQUFRLENBQUMsa0JBQWtCLENBQUM7WUFDOUQsT0FBTyxRQUFRLENBQUM7U0FDakI7UUFFRCxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksYUFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBYSxDQUFDLENBQUM7UUFDaEYsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFFMUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFekMsT0FBTztZQUNMLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtZQUN4QixFQUFFLEVBQUUsUUFBUSxDQUFDLGlCQUFpQixFQUFFO1NBQ2pDLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixlQUFlO1FBQ2IsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGO0FBcmRELDBCQXFkQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnc3VwZXJhZ2VudCc7XG5pbXBvcnQgeyBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zIH0gZnJvbSAnQGJpdGdvLWJldGEvYWJzdHJhY3QtZXRoJztcbmltcG9ydCB7XG4gIEV0aCxcbiAgUmVjaXBpZW50LFxuICBHZXRTZW5kTWV0aG9kQXJnc09wdGlvbnMsXG4gIFNlbmRNZXRob2RBcmdzLFxuICBvcHRpb25hbERlcHMsXG4gIEJ1aWxkVHJhbnNhY3Rpb25QYXJhbXMsXG4gIFNpZ25GaW5hbE9wdGlvbnMsXG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBSZWNvdmVyT3B0aW9ucyxcbiAgUmVjb3ZlcnlJbmZvLFxuICBPZmZsaW5lVmF1bHRUeEluZm8sXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb2luLWV0aCc7XG5pbXBvcnQge1xuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBjb21tb24sXG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIEZ1bGx5U2lnbmVkVHJhbnNhY3Rpb24sXG4gIGdldElzVW5zaWduZWRTd2VlcCxcbiAgVXRpbCxcbiAgTVBDQWxnb3JpdGhtLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBLZXlQYWlyLCBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2xpYic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHR5cGUgKiBhcyBFdGhUeExpYiBmcm9tICdAZXRoZXJldW1qcy90eCc7XG5cbmV4cG9ydCBjbGFzcyBQb2x5Z29uIGV4dGVuZHMgRXRoIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0aWNzQ29pbjogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbmRNZXRob2ROYW1lOiAnc2VuZE11bHRpU2lnJyB8ICdzZW5kTXVsdGlTaWdUb2tlbic7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvLCBzdGF0aWNzQ29pbik7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBQb2x5Z29uKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cbiAgc3RhdGljIGdldEN1c3RvbUNoYWluTmFtZShjaGFpbklkPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoY2hhaW5JZCA9PT0gODAwMDEpIHtcbiAgICAgIHJldHVybiAnUG9seWdvbk11bWJhaSc7XG4gICAgfVxuICAgIHJldHVybiAnUG9seWdvbk1haW5uZXQnO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkVHJhbnNhY3Rpb24ocGFyYW1zOiBCdWlsZFRyYW5zYWN0aW9uUGFyYW1zKTogRXRoVHhMaWIuRmVlTWFya2V0RUlQMTU1OVRyYW5zYWN0aW9uIHwgRXRoVHhMaWIuVHJhbnNhY3Rpb24ge1xuICAgIC8vIGlmIGVpcDE1NTkgcGFyYW1zIGFyZSBzcGVjaWZpZWQsIGRlZmF1bHQgdG8gbG9uZG9uIGhhcmRmb3JrLCBvdGhlcndpc2UsXG4gICAgLy8gZGVmYXVsdCB0byB0YW5nZXJpbmUgd2hpc3RsZSB0byBhdm9pZCByZXBsYXkgcHJvdGVjdGlvbiBpc3N1ZXNcbiAgICBjb25zdCBkZWZhdWx0SGFyZGZvcmsgPSAhIXBhcmFtcy5laXAxNTU5ID8gJ2xvbmRvbicgOiBvcHRpb25hbERlcHMuRXRoQ29tbW9uLkhhcmRmb3JrLlRhbmdlcmluZVdoaXN0bGU7XG4gICAgbGV0IGN1c3RvbUNoYWluQ29tbW9uO1xuICAgIC8vIGlmIHJlcGxheSBwcm90ZWN0aW9uIG9wdGlvbnMgYXJlIHNldCwgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgY29tbW9uIHNldHRpbmdcbiAgICBpZiAocGFyYW1zLnJlcGxheVByb3RlY3Rpb25PcHRpb25zKSB7XG4gICAgICBjb25zdCBjdXN0b21DaGFpbk5hbWUgPSBQb2x5Z29uLmdldEN1c3RvbUNoYWluTmFtZShwYXJhbXMucmVwbGF5UHJvdGVjdGlvbk9wdGlvbnMuY2hhaW4gYXMgbnVtYmVyKTtcbiAgICAgIGNvbnN0IGN1c3RvbUNoYWluID0gb3B0aW9uYWxEZXBzLkV0aENvbW1vbi5DdXN0b21DaGFpbltjdXN0b21DaGFpbk5hbWVdO1xuICAgICAgY3VzdG9tQ2hhaW5Db21tb24gPSBvcHRpb25hbERlcHMuRXRoQ29tbW9uLmRlZmF1bHQuY3VzdG9tKGN1c3RvbUNoYWluKTtcbiAgICAgIGN1c3RvbUNoYWluQ29tbW9uLnNldEhhcmRmb3JrKHBhcmFtcy5yZXBsYXlQcm90ZWN0aW9uT3B0aW9ucy5oYXJkZm9yayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN1c3RvbUNoYWluID0gb3B0aW9uYWxEZXBzLkV0aENvbW1vbi5DdXN0b21DaGFpbltQb2x5Z29uLmdldEN1c3RvbUNoYWluTmFtZSgpXTtcbiAgICAgIGN1c3RvbUNoYWluQ29tbW9uID0gb3B0aW9uYWxEZXBzLkV0aENvbW1vbi5kZWZhdWx0LmN1c3RvbShjdXN0b21DaGFpbik7XG4gICAgICBjdXN0b21DaGFpbkNvbW1vbi5zZXRIYXJkZm9yayhkZWZhdWx0SGFyZGZvcmspO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2VQYXJhbXMgPSB7XG4gICAgICB0bzogcGFyYW1zLnRvLFxuICAgICAgbm9uY2U6IHBhcmFtcy5ub25jZSxcbiAgICAgIHZhbHVlOiBwYXJhbXMudmFsdWUsXG4gICAgICBkYXRhOiBwYXJhbXMuZGF0YSxcbiAgICAgIGdhc0xpbWl0OiBuZXcgb3B0aW9uYWxEZXBzLmV0aFV0aWwuQk4ocGFyYW1zLmdhc0xpbWl0KSxcbiAgICB9O1xuXG4gICAgY29uc3QgdW5zaWduZWRFdGhUeCA9ICEhcGFyYW1zLmVpcDE1NTlcbiAgICAgID8gb3B0aW9uYWxEZXBzLkV0aFR4LkZlZU1hcmtldEVJUDE1NTlUcmFuc2FjdGlvbi5mcm9tVHhEYXRhKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLmJhc2VQYXJhbXMsXG4gICAgICAgICAgICBtYXhGZWVQZXJHYXM6IG5ldyBvcHRpb25hbERlcHMuZXRoVXRpbC5CTihwYXJhbXMuZWlwMTU1OS5tYXhGZWVQZXJHYXMpLFxuICAgICAgICAgICAgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IG5ldyBvcHRpb25hbERlcHMuZXRoVXRpbC5CTihwYXJhbXMuZWlwMTU1OS5tYXhQcmlvcml0eUZlZVBlckdhcyksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGNvbW1vbjogY3VzdG9tQ2hhaW5Db21tb24gfVxuICAgICAgICApXG4gICAgICA6IG9wdGlvbmFsRGVwcy5FdGhUeC5UcmFuc2FjdGlvbi5mcm9tVHhEYXRhKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLmJhc2VQYXJhbXMsXG4gICAgICAgICAgICBnYXNQcmljZTogbmV3IG9wdGlvbmFsRGVwcy5ldGhVdGlsLkJOKHBhcmFtcy5nYXNQcmljZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGNvbW1vbjogY3VzdG9tQ2hhaW5Db21tb24gfVxuICAgICAgICApO1xuXG4gICAgcmV0dXJuIHVuc2lnbmVkRXRoVHg7XG4gIH1cblxuICBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiAncG9seWdvbic7XG4gIH1cblxuICBnZXRGYW1pbHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ3BvbHlnb24nO1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ1BvbHlnb24nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYmFzZSBjaGFpbiB0aGF0IHRoZSBjb2luIGV4aXN0cyBvbi5cbiAgICovXG4gIGdldEJhc2VDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldENoYWluKCk7XG4gIH1cblxuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbGV0IHZhbGlkID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgbmV3IEtleVBhaXIoeyBwdWIgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGFzeW5jIGV4cGxhaW5UcmFuc2FjdGlvbihvcHRpb25zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPiB7XG4gICAgY29uc3QgdHhIZXggPSBvcHRpb25zLnR4SGV4IHx8IChvcHRpb25zLmhhbGZTaWduZWQgJiYgb3B0aW9ucy5oYWxmU2lnbmVkLnR4SGV4KTtcbiAgICBpZiAoIXR4SGV4IHx8ICFvcHRpb25zLmZlZUluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBleHBsYWluIHR4IHBhcmFtZXRlcnMnKTtcbiAgICB9XG4gICAgY29uc3QgdHhCdWlsZGVyID0gdGhpcy5nZXRUcmFuc2FjdGlvbkJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuZnJvbSh0eEhleCk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCBvdXRwdXRzID0gdHgub3V0cHV0cy5tYXAoKG91dHB1dCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogb3V0cHV0LnZhbHVlLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGRpc3BsYXlPcmRlciA9IFsnaWQnLCAnb3V0cHV0QW1vdW50JywgJ2NoYW5nZUFtb3VudCcsICdvdXRwdXRzJywgJ2NoYW5nZU91dHB1dHMnLCAnZmVlJ107XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQ6IHR4LmlkLFxuICAgICAgb3V0cHV0czogb3V0cHV0cyxcbiAgICAgIG91dHB1dEFtb3VudDogb3V0cHV0c1xuICAgICAgICAucmVkdWNlKChhY2N1bXVsYXRvciwgb3V0cHV0KSA9PiBhY2N1bXVsYXRvci5wbHVzKG91dHB1dC5hbW91bnQpLCBuZXcgQmlnTnVtYmVyKCcwJykpXG4gICAgICAgIC50b0ZpeGVkKDApLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sIC8vIGFjY291bnQgYmFzZWQgZG9lcyBub3QgdXNlIGNoYW5nZSBvdXRwdXRzXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJywgLy8gYWNjb3VudCBiYXNlIGRvZXMgbm90IG1ha2UgY2hhbmdlXG4gICAgICBmZWU6IG9wdGlvbnMuZmVlSW5mbyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyB0cmFuc2FjdGlvbiBidWlsZGVyIGZvciB0aGUgY3VycmVudCBjaGFpblxuICAgKiBAcmV0dXJuIGEgbmV3IHRyYW5zYWN0aW9uIGJ1aWxkZXJcbiAgICovXG4gIHB1YmxpYyBnZXRUcmFuc2FjdGlvbkJ1aWxkZXIoKTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlcihjb2lucy5nZXQodGhpcy5nZXRCYXNlQ2hhaW4oKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0cmFuc2ZlciBvcGVyYXRpb24gZm9yIGNvaW5cbiAgICogQHBhcmFtIHJlY2lwaWVudCByZWNpcGllbnQgaW5mb1xuICAgKiBAcGFyYW0gZXhwaXJlVGltZSBleHBpcnkgdGltZVxuICAgKiBAcGFyYW0gY29udHJhY3RTZXF1ZW5jZUlkIHNlcXVlbmNlIGlkXG4gICAqIEByZXR1cm5zIHtBcnJheX0gb3BlcmF0aW9uIGFycmF5XG4gICAqL1xuICBnZXRPcGVyYXRpb24ocmVjaXBpZW50OiBSZWNpcGllbnQsIGV4cGlyZVRpbWU6IG51bWJlciwgY29udHJhY3RTZXF1ZW5jZUlkOiBudW1iZXIpOiAoc3RyaW5nIHwgQnVmZmVyKVtdW10ge1xuICAgIHJldHVybiBbXG4gICAgICBbJ3N0cmluZycsICdhZGRyZXNzJywgJ3VpbnQyNTYnLCAnYnl0ZXMnLCAndWludDI1NicsICd1aW50MjU2J10sXG4gICAgICBbXG4gICAgICAgICdQT0xZR09OJyxcbiAgICAgICAgbmV3IG9wdGlvbmFsRGVwcy5ldGhVdGlsLkJOKG9wdGlvbmFsRGVwcy5ldGhVdGlsLnN0cmlwSGV4UHJlZml4KHJlY2lwaWVudC5hZGRyZXNzKSwgMTYpLFxuICAgICAgICByZWNpcGllbnQuYW1vdW50LFxuICAgICAgICBCdWZmZXIuZnJvbShvcHRpb25hbERlcHMuZXRoVXRpbC5zdHJpcEhleFByZWZpeChvcHRpb25hbERlcHMuZXRoVXRpbC5wYWRUb0V2ZW4ocmVjaXBpZW50LmRhdGEgfHwgJycpKSwgJ2hleCcpLFxuICAgICAgICBleHBpcmVUaW1lLFxuICAgICAgICBjb250cmFjdFNlcXVlbmNlSWQsXG4gICAgICBdLFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYXJndW1lbnRzIHRvIGNhbGwgdGhlIHNlbmQgbWV0aG9kIG9uIHRoZSB3YWxsZXQgY29udHJhY3RcbiAgICogQHBhcmFtIHR4SW5mb1xuICAgKi9cbiAgZ2V0U2VuZE1ldGhvZEFyZ3ModHhJbmZvOiBHZXRTZW5kTWV0aG9kQXJnc09wdGlvbnMpOiBTZW5kTWV0aG9kQXJnc1tdIHtcbiAgICAvLyBNZXRob2Qgc2lnbmF0dXJlIGlzXG4gICAgLy8gc2VuZE11bHRpU2lnKGFkZHJlc3MgdG9BZGRyZXNzLCB1aW50MjU2IHZhbHVlLCBieXRlcyBkYXRhLCB1aW50MjU2IGV4cGlyZVRpbWUsIHVpbnQyNTYgc2VxdWVuY2VJZCwgYnl0ZXMgc2lnbmF0dXJlKVxuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd0b0FkZHJlc3MnLFxuICAgICAgICB0eXBlOiAnYWRkcmVzcycsXG4gICAgICAgIHZhbHVlOiB0eEluZm8ucmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICB0eXBlOiAndWludDI1NicsXG4gICAgICAgIHZhbHVlOiB0eEluZm8ucmVjaXBpZW50LmFtb3VudCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdkYXRhJyxcbiAgICAgICAgdHlwZTogJ2J5dGVzJyxcbiAgICAgICAgdmFsdWU6IG9wdGlvbmFsRGVwcy5ldGhVdGlsLnRvQnVmZmVyKG9wdGlvbmFsRGVwcy5ldGhVdGlsLmFkZEhleFByZWZpeCh0eEluZm8ucmVjaXBpZW50LmRhdGEgfHwgJycpKSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdleHBpcmVUaW1lJyxcbiAgICAgICAgdHlwZTogJ3VpbnQyNTYnLFxuICAgICAgICB2YWx1ZTogdHhJbmZvLmV4cGlyZVRpbWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnc2VxdWVuY2VJZCcsXG4gICAgICAgIHR5cGU6ICd1aW50MjU2JyxcbiAgICAgICAgdmFsdWU6IHR4SW5mby5jb250cmFjdFNlcXVlbmNlSWQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnc2lnbmF0dXJlJyxcbiAgICAgICAgdHlwZTogJ2J5dGVzJyxcbiAgICAgICAgdmFsdWU6IG9wdGlvbmFsRGVwcy5ldGhVdGlsLnRvQnVmZmVyKG9wdGlvbmFsRGVwcy5ldGhVdGlsLmFkZEhleFByZWZpeCh0eEluZm8uc2lnbmF0dXJlKSksXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBzaWduVHJhbnNhY3Rpb24gZm9yIHRoZSByYXJlIGNhc2UgdGhhdCBTREsgaXMgZG9pbmcgdGhlIHNlY29uZCBzaWduYXR1cmVcbiAgICogTm90ZTogd2UgYXJlIGV4cGVjdGluZyB0aGlzIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBvZmZsaW5lIHZhdWx0XG4gICAqIEBwYXJhbSBwYXJhbXMudHhQcmVidWlsZFxuICAgKiBAcGFyYW0gcGFyYW1zLnBydlxuICAgKiBAcmV0dXJucyB7e3R4SGV4OiBzdHJpbmd9fVxuICAgKi9cbiAgYXN5bmMgc2lnbkZpbmFsUG9seWdvbihwYXJhbXM6IFNpZ25GaW5hbE9wdGlvbnMpOiBQcm9taXNlPEZ1bGx5U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBzaWduaW5nS2V5ID0gbmV3IEtleVBhaXIoeyBwcnY6IHBhcmFtcy5wcnYgfSkuZ2V0S2V5cygpLnBydjtcbiAgICBpZiAoXy5pc1VuZGVmaW5lZChzaWduaW5nS2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIGNvbnN0IHR4QnVpbGRlciA9IHRoaXMuZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKCk7XG4gICAgdHJ5IHtcbiAgICAgIHR4QnVpbGRlci5mcm9tKHBhcmFtcy50eFByZWJ1aWxkLmhhbGZTaWduZWQudHhIZXgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBoYWxmLXNpZ25lZCB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogc2lnbmluZ0tleSB9KTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIHJldHVybiB7XG4gICAgICB0eEhleDogdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2VtYmxlIGhhbGYtc2lnbiBwcmVidWlsdCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIC8vIE5vcm1hbGx5IHRoZSBTREsgcHJvdmlkZXMgdGhlIGZpcnN0IHNpZ25hdHVyZSBmb3IgYW4gUE9MWUdPTiB0eCwgYnV0IG9jY2FzaW9uYWxseSBpdCBwcm92aWRlcyB0aGUgc2Vjb25kIGFuZCBmaW5hbCBvbmUuXG4gICAgaWYgKHBhcmFtcy5pc0xhc3RTaWduYXR1cmUpIHtcbiAgICAgIC8vIEluIHRoaXMgY2FzZSB3aGVuIHdlJ3JlIGRvaW5nIHRoZSBzZWNvbmQgKGZpbmFsKSBzaWduYXR1cmUsIHRoZSBsb2dpYyBpcyBkaWZmZXJlbnQuXG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5zaWduRmluYWxQb2x5Z29uKHBhcmFtcyk7XG4gICAgfVxuICAgIGNvbnN0IHR4QnVpbGRlciA9IHRoaXMuZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmZyb20ocGFyYW1zLnR4UHJlYnVpbGQudHhIZXgpO1xuICAgIHR4QnVpbGRlci50cmFuc2ZlcigpLmtleShuZXcgS2V5UGFpcih7IHBydjogcGFyYW1zLnBydiB9KS5nZXRLZXlzKCkucHJ2ISk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgIGNvbnN0IHJlY2lwaWVudHMgPSB0cmFuc2FjdGlvbi5vdXRwdXRzLm1hcCgob3V0cHV0KSA9PiAoeyBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcywgYW1vdW50OiBvdXRwdXQudmFsdWUgfSkpO1xuXG4gICAgY29uc3QgdHhQYXJhbXMgPSB7XG4gICAgICBlaXAxNTU5OiBwYXJhbXMudHhQcmVidWlsZC5laXAxNTU5LFxuICAgICAgdHhIZXg6IHRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICByZWNpcGllbnRzOiByZWNpcGllbnRzLFxuICAgICAgZXhwaXJhdGlvbjogcGFyYW1zLnR4UHJlYnVpbGQuZXhwaXJlVGltZSxcbiAgICAgIGhvcFRyYW5zYWN0aW9uOiBwYXJhbXMudHhQcmVidWlsZC5ob3BUcmFuc2FjdGlvbixcbiAgICAgIGN1c3RvZGlhblRyYW5zYWN0aW9uSWQ6IHBhcmFtcy5jdXN0b2RpYW5UcmFuc2FjdGlvbklkLFxuICAgICAgZXhwaXJlVGltZTogcGFyYW1zLmV4cGlyZVRpbWUsXG4gICAgICBjb250cmFjdFNlcXVlbmNlSWQ6IHBhcmFtcy50eFByZWJ1aWxkLm5leHRDb250cmFjdFNlcXVlbmNlSWQgYXMgbnVtYmVyLFxuICAgICAgc2VxdWVuY2VJZDogcGFyYW1zLnNlcXVlbmNlSWQsXG4gICAgfTtcblxuICAgIHJldHVybiB7IGhhbGZTaWduZWQ6IHR4UGFyYW1zIH07XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhIHF1ZXJ5IHRvIFBvbHlnb25zY2FuIGZvciBpbmZvcm1hdGlvbiBzdWNoIGFzIGJhbGFuY2UsIHRva2VuIGJhbGFuY2UsIHNvbGlkaXR5IGNhbGxzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBxdWVyeSBrZXktdmFsdWUgcGFpcnMgb2YgcGFyYW1ldGVycyB0byBhcHBlbmQgYWZ0ZXIgL2FwaVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSByZXNwb25zZSBmcm9tIFBvbHlnb25zY2FuXG4gICAqL1xuICBhc3luYyByZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5KHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCB0b2tlbiA9IGNvbW1vbi5FbnZpcm9ubWVudHNbdGhpcy5iaXRnby5nZXRFbnYoKV0ucG9seWdvbnNjYW5BcGlUb2tlbjtcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIHF1ZXJ5LmFwaWtleSA9IHRva2VuO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RcbiAgICAgIC5nZXQoY29tbW9uLkVudmlyb25tZW50c1t0aGlzLmJpdGdvLmdldEVudigpXS5wb2x5Z29uc2NhbkJhc2VVcmwgKyAnL2FwaScpXG4gICAgICAucXVlcnkocXVlcnkpO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhY2ggUG9seWdvbnNjYW4nKTtcbiAgICB9XG5cbiAgICBpZiAocmVzcG9uc2UuYm9keS5zdGF0dXMgPT09ICcwJyAmJiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UgPT09ICdOT1RPSycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUG9seWdvbnNjYW4gcmF0ZSBsaW1pdCByZWFjaGVkJyk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIGZ1bmRzIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGhvdXQgQml0R28gZm9yIG5vbi1UU1MgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLnVzZXJLZXkgW2VuY3J5cHRlZF0geHBydiBvciB4cHViXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMuYmFja3VwS2V5IFtlbmNyeXB0ZWRdIHhwcnYgb3IgeHB1YiBpZiB0aGUgeHBydiBpcyBoZWxkIGJ5IGEgS1JTIHByb3ZpZGVyXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB1c2VkIHRvIGRlY3J5cHQgdXNlcktleSBhbmQgYmFja3VwS2V5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMud2FsbGV0Q29udHJhY3RBZGRyZXNzIHRoZSBQb2x5Z29uIGFkZHJlc3Mgb2YgdGhlIHdhbGxldCBjb250cmFjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmtyc1Byb3ZpZGVyIG5lY2Vzc2FyeSBpZiBiYWNrdXAga2V5IGlzIGhlbGQgYnkgS1JTXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbiB0YXJnZXQgYWRkcmVzcyB0byBzZW5kIHJlY292ZXJlZCBmdW5kcyB0b1xuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmJpdGdvRmVlQWRkcmVzcyB3cm9uZyBjaGFpbiB3YWxsZXQgZmVlIGFkZHJlc3MgZm9yIGV2bSBiYXNlZCBjcm9zcyBjaGFpbiByZWNvdmVyeSB0eG5cbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtcy5iaXRnb0Rlc3RpbmF0aW9uQWRkcmVzcyB0YXJnZXQgYml0Z28gYWRkcmVzcyB3aGVyZSBmZWUgd2lsbCBiZSBzZW50IGZvciBldm0gYmFzZWQgY3Jvc3MgY2hhaW4gcmVjb3ZlcnkgdHhuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFJlY292ZXJ5SW5mbyB8IE9mZmxpbmVWYXVsdFR4SW5mbz59XG4gICAqL1xuICBhc3luYyByZWNvdmVyRXRoTGlrZShwYXJhbXM6IFJlY292ZXJPcHRpb25zKTogUHJvbWlzZTxSZWNvdmVyeUluZm8gfCBPZmZsaW5lVmF1bHRUeEluZm8+IHtcbiAgICAvLyBiaXRnb0ZlZUFkZHJlc3MgaXMgb25seSBkZWZpbmVkIHdoZW4gaXQgaXMgYSBldm0gY3Jvc3MgY2hhaW4gcmVjb3ZlcnlcbiAgICAvLyBhcyB3ZSB1c2UgZmVlIGZyb20gdGhpcyB3cm9uZyBjaGFpbiBhZGRyZXNzIGZvciB0aGUgcmVjb3ZlcnkgdHhuIG9uIHRoZSBjb3JyZWN0IGNoYWluLlxuICAgIGlmIChwYXJhbXMuYml0Z29GZWVBZGRyZXNzKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZWNvdmVyRXRoTGlrZWZvckV2bUJhc2VkUmVjb3ZlcnkocGFyYW1zKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbGlkYXRlUmVjb3ZlcnlQYXJhbXMocGFyYW1zKTtcbiAgICBjb25zdCBpc1Vuc2lnbmVkU3dlZXAgPSBnZXRJc1Vuc2lnbmVkU3dlZXAocGFyYW1zKTtcblxuICAgIC8vIENsZWFuIHVwIHdoaXRlc3BhY2UgZnJvbSBlbnRlcmVkIHZhbHVlc1xuICAgIGxldCB1c2VyS2V5ID0gcGFyYW1zLnVzZXJLZXkucmVwbGFjZSgvXFxzL2csICcnKTtcbiAgICBjb25zdCBiYWNrdXBLZXkgPSBwYXJhbXMuYmFja3VwS2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgY29uc3QgZ2FzTGltaXQgPSBuZXcgb3B0aW9uYWxEZXBzLmV0aFV0aWwuQk4odGhpcy5zZXRHYXNMaW1pdChwYXJhbXMuZ2FzTGltaXQpKTtcbiAgICBjb25zdCBnYXNQcmljZSA9IHBhcmFtcy5laXAxNTU5XG4gICAgICA/IG5ldyBvcHRpb25hbERlcHMuZXRoVXRpbC5CTihwYXJhbXMuZWlwMTU1OS5tYXhGZWVQZXJHYXMpXG4gICAgICA6IG5ldyBvcHRpb25hbERlcHMuZXRoVXRpbC5CTih0aGlzLnNldEdhc1ByaWNlKHBhcmFtcy5nYXNQcmljZSkpO1xuXG4gICAgaWYgKCF1c2VyS2V5LnN0YXJ0c1dpdGgoJ3hwdWInKSAmJiAhdXNlcktleS5zdGFydHNXaXRoKCd4cHJ2JykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHVzZXJLZXkgPSB0aGlzLmJpdGdvLmRlY3J5cHQoe1xuICAgICAgICAgIGlucHV0OiB1c2VyS2V5LFxuICAgICAgICAgIHBhc3N3b3JkOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZGVjcnlwdGluZyB1c2VyIGtleWNoYWluOiAke2UubWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGJhY2t1cEtleUFkZHJlc3M7XG4gICAgbGV0IGJhY2t1cFNpZ25pbmdLZXk7XG4gICAgaWYgKGlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgY29uc3QgYmFja3VwSEROb2RlID0gYmlwMzIuZnJvbUJhc2U1OChiYWNrdXBLZXkpO1xuICAgICAgYmFja3VwU2lnbmluZ0tleSA9IGJhY2t1cEhETm9kZS5wdWJsaWNLZXk7XG4gICAgICBiYWNrdXBLZXlBZGRyZXNzID0gYDB4JHtvcHRpb25hbERlcHMuZXRoVXRpbC5wdWJsaWNUb0FkZHJlc3MoYmFja3VwU2lnbmluZ0tleSwgdHJ1ZSkudG9TdHJpbmcoJ2hleCcpfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlY3J5cHQgYmFja3VwIHByaXZhdGUga2V5IGFuZCBnZXQgYWRkcmVzc1xuICAgICAgbGV0IGJhY2t1cFBydjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYmFja3VwUHJ2ID0gdGhpcy5iaXRnby5kZWNyeXB0KHtcbiAgICAgICAgICBpbnB1dDogYmFja3VwS2V5LFxuICAgICAgICAgIHBhc3N3b3JkOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZGVjcnlwdGluZyBiYWNrdXAga2V5Y2hhaW46ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwcnY6IGJhY2t1cFBydiB9KTtcbiAgICAgIGJhY2t1cFNpZ25pbmdLZXkgPSBrZXlQYWlyLmdldEtleXMoKS5wcnY7XG4gICAgICBpZiAoIWJhY2t1cFNpZ25pbmdLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdubyBwcml2YXRlIGtleScpO1xuICAgICAgfVxuICAgICAgYmFja3VwS2V5QWRkcmVzcyA9IGtleVBhaXIuZ2V0QWRkcmVzcygpO1xuICAgIH1cblxuICAgIGNvbnN0IGJhY2t1cEtleU5vbmNlID0gYXdhaXQgdGhpcy5nZXRBZGRyZXNzTm9uY2UoYmFja3VwS2V5QWRkcmVzcyk7XG4gICAgLy8gZ2V0IGJhbGFuY2Ugb2YgYmFja3VwS2V5IHRvIGVuc3VyZSBmdW5kcyBhcmUgYXZhaWxhYmxlIHRvIHBheSBmZWVzXG4gICAgY29uc3QgYmFja3VwS2V5QmFsYW5jZSA9IGF3YWl0IHRoaXMucXVlcnlBZGRyZXNzQmFsYW5jZShiYWNrdXBLZXlBZGRyZXNzKTtcbiAgICBjb25zdCB0b3RhbEdhc05lZWRlZCA9IGdhc1ByaWNlLm11bChnYXNMaW1pdCk7XG4gICAgY29uc3Qgd2VpVG9Hd2VpID0gMTAgKiogOTtcbiAgICBpZiAoYmFja3VwS2V5QmFsYW5jZS5sdCh0b3RhbEdhc05lZWRlZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEJhY2t1cCBrZXkgYWRkcmVzcyAke2JhY2t1cEtleUFkZHJlc3N9IGhhcyBiYWxhbmNlICR7KGJhY2t1cEtleUJhbGFuY2UgLyB3ZWlUb0d3ZWkpLnRvU3RyaW5nKCl9IEd3ZWkuYCArXG4gICAgICAgICAgYFRoaXMgYWRkcmVzcyBtdXN0IGhhdmUgYSBiYWxhbmNlIG9mIGF0IGxlYXN0ICR7KHRvdGFsR2FzTmVlZGVkIC8gd2VpVG9Hd2VpKS50b1N0cmluZygpfWAgK1xuICAgICAgICAgIGAgR3dlaSB0byBwZXJmb3JtIHJlY292ZXJpZXMuIFRyeSBzZW5kaW5nIHNvbWUgTUFUSUMgdG8gdGhpcyBhZGRyZXNzIHRoZW4gcmV0cnkuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBnZXQgYmFsYW5jZSBvZiB3YWxsZXRcbiAgICBjb25zdCB0eEFtb3VudCA9IGF3YWl0IHRoaXMucXVlcnlBZGRyZXNzQmFsYW5jZShwYXJhbXMud2FsbGV0Q29udHJhY3RBZGRyZXNzKTtcblxuICAgIC8vIGJ1aWxkIHJlY2lwaWVudHMgb2JqZWN0XG4gICAgY29uc3QgcmVjaXBpZW50cyA9IFtcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzczogcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgIGFtb3VudDogdHhBbW91bnQudG9TdHJpbmcoMTApLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgLy8gR2V0IHNlcXVlbmNlIElEIHVzaW5nIGNvbnRyYWN0IGNhbGxcbiAgICAvLyB3ZSBuZWVkIHRvIHdhaXQgYmV0d2VlbiBtYWtpbmcgdHdvIHBvbHlnb25zY2FuIGNhbGxzIHRvIGF2b2lkIGdldHRpbmcgYmFubmVkXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwMCkpO1xuICAgIGNvbnN0IHNlcXVlbmNlSWQgPSBhd2FpdCB0aGlzLnF1ZXJ5U2VxdWVuY2VJZChwYXJhbXMud2FsbGV0Q29udHJhY3RBZGRyZXNzKTtcblxuICAgIGxldCBvcGVyYXRpb25IYXNoLCBzaWduYXR1cmU7XG4gICAgLy8gR2V0IG9wZXJhdGlvbiBoYXNoIGFuZCBzaWduIGl0XG4gICAgaWYgKCFpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICAgIG9wZXJhdGlvbkhhc2ggPSB0aGlzLmdldE9wZXJhdGlvblNoYTNGb3JFeGVjdXRlQW5kQ29uZmlybShyZWNpcGllbnRzLCB0aGlzLmdldERlZmF1bHRFeHBpcmVUaW1lKCksIHNlcXVlbmNlSWQpO1xuICAgICAgc2lnbmF0dXJlID0gVXRpbC5ldGhTaWduTXNnSGFzaChvcGVyYXRpb25IYXNoLCBVdGlsLnhwcnZUb0V0aFByaXZhdGVLZXkodXNlcktleSkpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBVdGlsLmVjUmVjb3ZlckV0aEFkZHJlc3Mob3BlcmF0aW9uSGFzaCwgc2lnbmF0dXJlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNpZ25hdHVyZScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHR4SW5mbyA9IHtcbiAgICAgIHJlY2lwaWVudDogcmVjaXBpZW50c1swXSxcbiAgICAgIGV4cGlyZVRpbWU6IHRoaXMuZ2V0RGVmYXVsdEV4cGlyZVRpbWUoKSxcbiAgICAgIGNvbnRyYWN0U2VxdWVuY2VJZDogc2VxdWVuY2VJZCxcbiAgICAgIG9wZXJhdGlvbkhhc2g6IG9wZXJhdGlvbkhhc2gsXG4gICAgICBzaWduYXR1cmU6IHNpZ25hdHVyZSxcbiAgICAgIGdhc0xpbWl0OiBnYXNMaW1pdC50b1N0cmluZygxMCksXG4gICAgfTtcblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IHRoaXMuZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKCkgYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIHR4QnVpbGRlci5jb3VudGVyKGJhY2t1cEtleU5vbmNlKTtcbiAgICB0eEJ1aWxkZXIuY29udHJhY3QocGFyYW1zLndhbGxldENvbnRyYWN0QWRkcmVzcyk7XG4gICAgbGV0IHR4RmVlO1xuICAgIGlmIChwYXJhbXMuZWlwMTU1OSkge1xuICAgICAgdHhGZWUgPSB7XG4gICAgICAgIGVpcDE1NTk6IHtcbiAgICAgICAgICBtYXhQcmlvcml0eUZlZVBlckdhczogcGFyYW1zLmVpcDE1NTkubWF4UHJpb3JpdHlGZWVQZXJHYXMsXG4gICAgICAgICAgbWF4RmVlUGVyR2FzOiBwYXJhbXMuZWlwMTU1OS5tYXhGZWVQZXJHYXMsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0eEZlZSA9IHsgZmVlOiBnYXNQcmljZS50b1N0cmluZygpIH07XG4gICAgfVxuICAgIHR4QnVpbGRlci5mZWUoe1xuICAgICAgLi4udHhGZWUsXG4gICAgICBnYXNMaW1pdDogZ2FzTGltaXQudG9TdHJpbmcoKSxcbiAgICB9KTtcbiAgICB0eEJ1aWxkZXJcbiAgICAgIC50cmFuc2ZlcigpXG4gICAgICAuYW1vdW50KHJlY2lwaWVudHNbMF0uYW1vdW50KVxuICAgICAgLmNvbnRyYWN0U2VxdWVuY2VJZChzZXF1ZW5jZUlkKVxuICAgICAgLmV4cGlyYXRpb25UaW1lKHRoaXMuZ2V0RGVmYXVsdEV4cGlyZVRpbWUoKSlcbiAgICAgIC50byhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbik7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGlmIChpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBPZmZsaW5lVmF1bHRUeEluZm8gPSB7XG4gICAgICAgIHR4SGV4OiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgICAgICB1c2VyS2V5LFxuICAgICAgICBiYWNrdXBLZXksXG4gICAgICAgIGNvaW46IHRoaXMuZ2V0Q2hhaW4oKSxcbiAgICAgICAgZ2FzUHJpY2U6IG9wdGlvbmFsRGVwcy5ldGhVdGlsLmJ1ZmZlclRvSW50KGdhc1ByaWNlKS50b0ZpeGVkKCksXG4gICAgICAgIGdhc0xpbWl0LFxuICAgICAgICByZWNpcGllbnRzOiBbdHhJbmZvLnJlY2lwaWVudF0sXG4gICAgICAgIHdhbGxldENvbnRyYWN0QWRkcmVzczogdHgudG9Kc29uKCkudG8sXG4gICAgICAgIGFtb3VudDogdHhJbmZvLnJlY2lwaWVudC5hbW91bnQsXG4gICAgICAgIGJhY2t1cEtleU5vbmNlLFxuICAgICAgICBlaXAxNTU5OiBwYXJhbXMuZWlwMTU1OSxcbiAgICAgIH07XG4gICAgICBfLmV4dGVuZChyZXNwb25zZSwgdHhJbmZvKTtcbiAgICAgIHJlc3BvbnNlLm5leHRDb250cmFjdFNlcXVlbmNlSWQgPSByZXNwb25zZS5jb250cmFjdFNlcXVlbmNlSWQ7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgdHhCdWlsZGVyLnRyYW5zZmVyKCkua2V5KG5ldyBLZXlQYWlyKHsgcHJ2OiB1c2VyS2V5IH0pLmdldEtleXMoKS5wcnYgYXMgc3RyaW5nKTtcbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYmFja3VwU2lnbmluZ0tleSB9KTtcblxuICAgIGNvbnN0IHNpZ25lZFR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHNpZ25lZFR4LnRvSnNvbigpLmlkLFxuICAgICAgdHg6IHNpZ25lZFR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzdXBwb3J0c1RzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzdXBwb3J0c01lc3NhZ2VTaWduaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldE1QQ0FsZ29yaXRobSgpOiBNUENBbGdvcml0aG0ge1xuICAgIHJldHVybiAnZWNkc2EnO1xuICB9XG59XG4iXX0=
|
|
68
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seWdvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wb2x5Z29uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztHQUVHO0FBQ0gsNERBQWlDO0FBQ2pDLDJEQUFtRTtBQUNuRSxtREFBaUY7QUFDakYsaURBQXlFO0FBQ3pFLCtCQUEyQztBQUUzQyxNQUFhLE9BQVEsU0FBUSxzQ0FBdUI7SUFDbEQsWUFBc0IsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7T0FHRztJQUNPLHFCQUFxQjtRQUM3QixPQUFPLElBQUksd0JBQWtCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLCtCQUErQixDQUFDLEtBQTZCO1FBQ2pFLE1BQU0sS0FBSyxHQUFHLGlCQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQztRQUMzRSxJQUFJLEtBQUssRUFBRTtZQUNULEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1NBQ3RCO1FBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxvQkFBTzthQUMzQixHQUFHLENBQUMsaUJBQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQzthQUN6RSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1NBQ2hEO1FBRUQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTyxFQUFFO1lBQ3JFLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztTQUNuRDtRQUNELE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQztJQUN2QixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLHNCQUFzQjtRQUNwQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsd0JBQXdCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGVBQWU7UUFDYixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0Y7QUE1REQsMEJBNERDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnc3VwZXJhZ2VudCc7XG5pbXBvcnQgeyBBYnN0cmFjdEV0aExpa2VOZXdDb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL2Fic3RyYWN0LWV0aCc7XG5pbXBvcnQgeyBCYXNlQ29pbiwgQml0R29CYXNlLCBjb21tb24sIE1QQ0FsZ29yaXRobSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vbGliJztcblxuZXhwb3J0IGNsYXNzIFBvbHlnb24gZXh0ZW5kcyBBYnN0cmFjdEV0aExpa2VOZXdDb2lucyB7XG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPik6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IFBvbHlnb24oYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgdHJhbnNhY3Rpb24gYnVpbGRlciBmb3IgdGhlIGN1cnJlbnQgY2hhaW5cbiAgICogQHJldHVybiBhIG5ldyB0cmFuc2FjdGlvbiBidWlsZGVyXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKCk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KHRoaXMuZ2V0QmFzZUNoYWluKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGEgcXVlcnkgdG8gUG9seWdvbnNjYW4gZm9yIGluZm9ybWF0aW9uIHN1Y2ggYXMgYmFsYW5jZSwgdG9rZW4gYmFsYW5jZSwgc29saWRpdHkgY2FsbHNcbiAgICogQHBhcmFtIHtPYmplY3R9IHF1ZXJ5IGtleS12YWx1ZSBwYWlycyBvZiBwYXJhbWV0ZXJzIHRvIGFwcGVuZCBhZnRlciAvYXBpXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPE9iamVjdD59IHJlc3BvbnNlIGZyb20gUG9seWdvbnNjYW5cbiAgICovXG4gIGFzeW5jIHJlY292ZXJ5QmxvY2tjaGFpbkV4cGxvcmVyUXVlcnkocXVlcnk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IHRva2VuID0gY29tbW9uLkVudmlyb25tZW50c1t0aGlzLmJpdGdvLmdldEVudigpXS5wb2x5Z29uc2NhbkFwaVRva2VuO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgcXVlcnkuYXBpa2V5ID0gdG9rZW47XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdFxuICAgICAgLmdldChjb21tb24uRW52aXJvbm1lbnRzW3RoaXMuYml0Z28uZ2V0RW52KCldLnBvbHlnb25zY2FuQmFzZVVybCArICcvYXBpJylcbiAgICAgIC5xdWVyeShxdWVyeSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvdWxkIG5vdCByZWFjaCBQb2x5Z29uc2NhbicpO1xuICAgIH1cblxuICAgIGlmIChyZXNwb25zZS5ib2R5LnN0YXR1cyA9PT0gJzAnICYmIHJlc3BvbnNlLmJvZHkubWVzc2FnZSA9PT0gJ05PVE9LJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb2x5Z29uc2NhbiByYXRlIGxpbWl0IHJlYWNoZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc3VwcG9ydHNNZXNzYWdlU2lnbmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzdXBwb3J0c1NpZ25pbmdUeXBlZERhdGEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc3VwcG9ydHNUc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZ2V0TVBDQWxnb3JpdGhtKCk6IE1QQ0FsZ29yaXRobSB7XG4gICAgcmV0dXJuICdlY2RzYSc7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,37 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @prettier
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
5
|
-
import { TransactionPrebuild } from '@bitgo-beta/abstract-eth';
|
|
4
|
+
import { EthLikeToken, CoinNames } from '@bitgo-beta/abstract-eth';
|
|
6
5
|
import { EthLikeTokenConfig } from '@bitgo-beta/statics';
|
|
7
|
-
import { BitGoBase, CoinConstructor, NamedCoinConstructor } from '@bitgo-beta/sdk-core';
|
|
6
|
+
import { BitGoBase, CoinConstructor, MPCAlgorithm, NamedCoinConstructor } from '@bitgo-beta/sdk-core';
|
|
7
|
+
import { TransactionBuilder } from './lib';
|
|
8
8
|
export { EthLikeTokenConfig };
|
|
9
|
-
export declare class PolygonToken extends
|
|
9
|
+
export declare class PolygonToken extends EthLikeToken {
|
|
10
10
|
readonly tokenConfig: EthLikeTokenConfig;
|
|
11
|
+
static coinNames: CoinNames;
|
|
11
12
|
constructor(bitgo: BitGoBase, tokenConfig: EthLikeTokenConfig);
|
|
12
13
|
static createTokenConstructor(config: EthLikeTokenConfig): CoinConstructor;
|
|
13
14
|
static createTokenConstructors(): NamedCoinConstructor[];
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
get decimalPlaces(): number;
|
|
20
|
-
getChain(): string;
|
|
21
|
-
getBaseChain(): string;
|
|
15
|
+
protected getTransactionBuilder(): TransactionBuilder;
|
|
16
|
+
/** @inheritDoc */
|
|
17
|
+
supportsTss(): boolean;
|
|
18
|
+
/** @inheritDoc */
|
|
19
|
+
getMPCAlgorithm(): MPCAlgorithm;
|
|
22
20
|
getFullName(): string;
|
|
23
|
-
getBaseFactor(): string;
|
|
24
|
-
/**
|
|
25
|
-
* Flag for sending value of 0
|
|
26
|
-
* @returns {boolean} True if okay to send 0 value, false otherwise
|
|
27
|
-
*/
|
|
28
|
-
valuelessTransferAllowed(): boolean;
|
|
29
|
-
/**
|
|
30
|
-
* Flag for sending data along with transactions
|
|
31
|
-
* @returns {boolean} True if okay to send tx data (ETH), false otherwise
|
|
32
|
-
*/
|
|
33
|
-
transactionDataAllowed(): boolean;
|
|
34
|
-
isToken(): boolean;
|
|
35
|
-
verifyCoin(txPrebuild: TransactionPrebuild): boolean;
|
|
36
21
|
}
|
|
37
22
|
//# sourceMappingURL=polygonToken.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polygonToken.d.ts","sourceRoot":"","sources":["../../src/polygonToken.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"polygonToken.d.ts","sourceRoot":"","sources":["../../src/polygonToken.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAS,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACtG,OAAO,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,CAAC;AAE9B,qBAAa,YAAa,SAAQ,YAAY;IAC5C,SAAgB,WAAW,EAAE,kBAAkB,CAAC;IAChD,MAAM,CAAC,SAAS,EAAE,SAAS,CAGzB;gBACU,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,kBAAkB;IAI7D,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,kBAAkB,GAAG,eAAe;IAI1E,MAAM,CAAC,uBAAuB,IAAI,oBAAoB,EAAE;IAIxD,SAAS,CAAC,qBAAqB,IAAI,kBAAkB;IAIrD,kBAAkB;IAClB,WAAW,IAAI,OAAO;IAItB,kBAAkB;IAClB,eAAe,IAAI,YAAY;IAI/B,WAAW,IAAI,MAAM;CAGtB"}
|
package/dist/src/polygonToken.js
CHANGED
|
@@ -1,79 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PolygonToken = void 0;
|
|
2
4
|
/**
|
|
3
5
|
* @prettier
|
|
4
6
|
*/
|
|
5
|
-
|
|
6
|
-
exports.PolygonToken = void 0;
|
|
7
|
-
const polygon_1 = require("./polygon");
|
|
7
|
+
const abstract_eth_1 = require("@bitgo-beta/abstract-eth");
|
|
8
8
|
const statics_1 = require("@bitgo-beta/statics");
|
|
9
|
-
|
|
9
|
+
const lib_1 = require("./lib");
|
|
10
|
+
class PolygonToken extends abstract_eth_1.EthLikeToken {
|
|
10
11
|
constructor(bitgo, tokenConfig) {
|
|
11
|
-
|
|
12
|
-
super(bitgo, staticsCoin);
|
|
13
|
-
this.tokenConfig = tokenConfig;
|
|
12
|
+
super(bitgo, tokenConfig, PolygonToken.coinNames);
|
|
14
13
|
}
|
|
15
14
|
static createTokenConstructor(config) {
|
|
16
|
-
return (
|
|
15
|
+
return super.createTokenConstructor(config, PolygonToken.coinNames);
|
|
17
16
|
}
|
|
18
17
|
static createTokenConstructors() {
|
|
19
|
-
|
|
20
|
-
for (const token of [...statics_1.tokens.bitcoin.polygon.tokens, ...statics_1.tokens.testnet.polygon.tokens]) {
|
|
21
|
-
const tokenConstructor = PolygonToken.createTokenConstructor(token);
|
|
22
|
-
tokensCtors.push({ name: token.type, coinConstructor: tokenConstructor });
|
|
23
|
-
tokensCtors.push({ name: token.tokenContractAddress, coinConstructor: tokenConstructor });
|
|
24
|
-
}
|
|
25
|
-
return tokensCtors;
|
|
26
|
-
}
|
|
27
|
-
get type() {
|
|
28
|
-
return this.tokenConfig.type;
|
|
29
|
-
}
|
|
30
|
-
get name() {
|
|
31
|
-
return this.tokenConfig.name;
|
|
32
|
-
}
|
|
33
|
-
get coin() {
|
|
34
|
-
return this.tokenConfig.coin;
|
|
35
|
-
}
|
|
36
|
-
get network() {
|
|
37
|
-
return this.tokenConfig.network;
|
|
18
|
+
return super.createTokenConstructors(PolygonToken.coinNames);
|
|
38
19
|
}
|
|
39
|
-
|
|
40
|
-
return this.
|
|
20
|
+
getTransactionBuilder() {
|
|
21
|
+
return new lib_1.TransactionBuilder(statics_1.coins.get(this.getBaseChain()));
|
|
41
22
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
getChain() {
|
|
46
|
-
return this.tokenConfig.type;
|
|
23
|
+
/** @inheritDoc */
|
|
24
|
+
supportsTss() {
|
|
25
|
+
return true;
|
|
47
26
|
}
|
|
48
|
-
|
|
49
|
-
|
|
27
|
+
/** @inheritDoc */
|
|
28
|
+
getMPCAlgorithm() {
|
|
29
|
+
return 'ecdsa';
|
|
50
30
|
}
|
|
51
31
|
getFullName() {
|
|
52
32
|
return 'Polygon Token';
|
|
53
33
|
}
|
|
54
|
-
getBaseFactor() {
|
|
55
|
-
return String(Math.pow(10, this.tokenConfig.decimalPlaces));
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Flag for sending value of 0
|
|
59
|
-
* @returns {boolean} True if okay to send 0 value, false otherwise
|
|
60
|
-
*/
|
|
61
|
-
valuelessTransferAllowed() {
|
|
62
|
-
return false;
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Flag for sending data along with transactions
|
|
66
|
-
* @returns {boolean} True if okay to send tx data (ETH), false otherwise
|
|
67
|
-
*/
|
|
68
|
-
transactionDataAllowed() {
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
isToken() {
|
|
72
|
-
return true;
|
|
73
|
-
}
|
|
74
|
-
verifyCoin(txPrebuild) {
|
|
75
|
-
return txPrebuild.coin === this.tokenConfig.coin && txPrebuild.token === this.tokenConfig.type;
|
|
76
|
-
}
|
|
77
34
|
}
|
|
78
35
|
exports.PolygonToken = PolygonToken;
|
|
79
|
-
|
|
36
|
+
PolygonToken.coinNames = {
|
|
37
|
+
Mainnet: 'polygon',
|
|
38
|
+
Testnet: 'tpolygon',
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9seWdvblRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BvbHlnb25Ub2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7R0FFRztBQUNILDJEQUFtRTtBQUNuRSxpREFBZ0U7QUFFaEUsK0JBQTJDO0FBRzNDLE1BQWEsWUFBYSxTQUFRLDJCQUFZO0lBTTVDLFlBQVksS0FBZ0IsRUFBRSxXQUErQjtRQUMzRCxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxNQUEwQjtRQUN0RCxPQUFPLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxNQUFNLENBQUMsdUJBQXVCO1FBQzVCLE9BQU8sS0FBSyxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRVMscUJBQXFCO1FBQzdCLE9BQU8sSUFBSSx3QkFBa0IsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGVBQWU7UUFDYixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7O0FBbENILG9DQW1DQztBQWpDUSxzQkFBUyxHQUFjO0lBQzVCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLE9BQU8sRUFBRSxVQUFVO0NBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgeyBFdGhMaWtlVG9rZW4sIENvaW5OYW1lcyB9IGZyb20gJ0BiaXRnby1iZXRhL2Fic3RyYWN0LWV0aCc7XG5pbXBvcnQgeyBFdGhMaWtlVG9rZW5Db25maWcsIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UsIENvaW5Db25zdHJ1Y3RvciwgTVBDQWxnb3JpdGhtLCBOYW1lZENvaW5Db25zdHJ1Y3RvciB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vbGliJztcbmV4cG9ydCB7IEV0aExpa2VUb2tlbkNvbmZpZyB9O1xuXG5leHBvcnQgY2xhc3MgUG9seWdvblRva2VuIGV4dGVuZHMgRXRoTGlrZVRva2VuIHtcbiAgcHVibGljIHJlYWRvbmx5IHRva2VuQ29uZmlnOiBFdGhMaWtlVG9rZW5Db25maWc7XG4gIHN0YXRpYyBjb2luTmFtZXM6IENvaW5OYW1lcyA9IHtcbiAgICBNYWlubmV0OiAncG9seWdvbicsXG4gICAgVGVzdG5ldDogJ3Rwb2x5Z29uJyxcbiAgfTtcbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgdG9rZW5Db25maWc6IEV0aExpa2VUb2tlbkNvbmZpZykge1xuICAgIHN1cGVyKGJpdGdvLCB0b2tlbkNvbmZpZywgUG9seWdvblRva2VuLmNvaW5OYW1lcyk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcihjb25maWc6IEV0aExpa2VUb2tlbkNvbmZpZyk6IENvaW5Db25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIHN1cGVyLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IoY29uZmlnLCBQb2x5Z29uVG9rZW4uY29pbk5hbWVzKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVUb2tlbkNvbnN0cnVjdG9ycygpOiBOYW1lZENvaW5Db25zdHJ1Y3RvcltdIHtcbiAgICByZXR1cm4gc3VwZXIuY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoUG9seWdvblRva2VuLmNvaW5OYW1lcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKCk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KHRoaXMuZ2V0QmFzZUNoYWluKCkpKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBzdXBwb3J0c1RzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXRNUENBbGdvcml0aG0oKTogTVBDQWxnb3JpdGhtIHtcbiAgICByZXR1cm4gJ2VjZHNhJztcbiAgfVxuXG4gIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdQb2x5Z29uIFRva2VuJztcbiAgfVxufVxuIl19
|
package/dist/src/tpolygon.d.ts
CHANGED
|
@@ -7,6 +7,5 @@ import { Polygon } from './polygon';
|
|
|
7
7
|
export declare class Tpolygon extends Polygon {
|
|
8
8
|
protected constructor(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>);
|
|
9
9
|
static createInstance(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>): BaseCoin;
|
|
10
|
-
getChain(): string;
|
|
11
10
|
}
|
|
12
11
|
//# sourceMappingURL=tpolygon.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tpolygon.d.ts","sourceRoot":"","sources":["../../src/tpolygon.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,qBAAa,QAAS,SAAQ,OAAO;IACnC,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAI/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;
|
|
1
|
+
{"version":3,"file":"tpolygon.d.ts","sourceRoot":"","sources":["../../src/tpolygon.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,qBAAa,QAAS,SAAQ,OAAO;IACnC,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAI/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;CAG3F"}
|
package/dist/src/tpolygon.js
CHANGED
|
@@ -9,9 +9,6 @@ class Tpolygon extends polygon_1.Polygon {
|
|
|
9
9
|
static createInstance(bitgo, staticsCoin) {
|
|
10
10
|
return new Tpolygon(bitgo, staticsCoin);
|
|
11
11
|
}
|
|
12
|
-
getChain() {
|
|
13
|
-
return 'tpolygon';
|
|
14
|
-
}
|
|
15
12
|
}
|
|
16
13
|
exports.Tpolygon = Tpolygon;
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHBvbHlnb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHBvbHlnb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBS0EsdUNBQW9DO0FBRXBDLE1BQWEsUUFBUyxTQUFRLGlCQUFPO0lBQ25DLFlBQXNCLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQixFQUFFLFdBQXVDO1FBQzdFLE9BQU8sSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDRjtBQVJELDRCQVFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgQmFzZUNvaW4sIEJpdEdvQmFzZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgUG9seWdvbiB9IGZyb20gJy4vcG9seWdvbic7XG5cbmV4cG9ydCBjbGFzcyBUcG9seWdvbiBleHRlbmRzIFBvbHlnb24ge1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KSB7XG4gICAgc3VwZXIoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBUcG9seWdvbihiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG59XG4iXX0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bitgo-beta/sdk-coin-polygon",
|
|
3
|
-
"version": "1.3.3-alpha.
|
|
3
|
+
"version": "1.3.3-alpha.92",
|
|
4
4
|
"description": "BitGo SDK coin library for Polygon",
|
|
5
5
|
"main": "./dist/src/index.js",
|
|
6
6
|
"types": "./dist/src/index.d.ts",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"author": "BitGo SDK Team <sdkteam@bitgo.com>",
|
|
19
19
|
"license": "MIT",
|
|
20
20
|
"engines": {
|
|
21
|
-
"node": ">=16 <
|
|
21
|
+
"node": ">=16 <21"
|
|
22
22
|
},
|
|
23
23
|
"repository": {
|
|
24
24
|
"type": "git",
|
|
@@ -40,23 +40,18 @@
|
|
|
40
40
|
]
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@bitgo-beta/abstract-eth": "1.2.3-alpha.
|
|
44
|
-
"@bitgo-beta/sdk-
|
|
45
|
-
"@bitgo-beta/
|
|
46
|
-
"@bitgo-beta/
|
|
47
|
-
"@bitgo-beta/
|
|
48
|
-
"@bitgo-beta/utxo-lib": "4.0.1-alpha.91",
|
|
43
|
+
"@bitgo-beta/abstract-eth": "1.2.3-alpha.93",
|
|
44
|
+
"@bitgo-beta/sdk-core": "2.4.1-alpha.93",
|
|
45
|
+
"@bitgo-beta/sjcl": "1.0.1-alpha.42",
|
|
46
|
+
"@bitgo-beta/statics": "10.0.1-alpha.93",
|
|
47
|
+
"@bitgo-beta/utxo-lib": "4.0.1-alpha.93",
|
|
49
48
|
"@ethereumjs/common": "^2.6.5",
|
|
50
|
-
"@ethereumjs/tx": "^3.3.0",
|
|
51
|
-
"bignumber.js": "^9.0.0",
|
|
52
|
-
"ethereumjs-abi": "^0.6.5",
|
|
53
|
-
"lodash": "^4.17.14",
|
|
54
49
|
"superagent": "^3.8.3"
|
|
55
50
|
},
|
|
56
51
|
"devDependencies": {
|
|
57
|
-
"@bitgo-beta/sdk-api": "1.6.1-alpha.
|
|
58
|
-
"@bitgo-beta/sdk-test": "^1.2.
|
|
52
|
+
"@bitgo-beta/sdk-api": "1.6.1-alpha.93",
|
|
53
|
+
"@bitgo-beta/sdk-test": "^1.2.47",
|
|
59
54
|
"secp256k1": "5.0.0"
|
|
60
55
|
},
|
|
61
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "5e27532cade17c545a06a31c6baac6464232f92d"
|
|
62
57
|
}
|