@bitgo/sdk-coin-avaxp 0.2.0-dev.1 → 1.0.1-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/CHANGELOG.md +218 -0
  2. package/README.md +39 -0
  3. package/dist/src/avaxp.d.ts +60 -0
  4. package/dist/src/avaxp.d.ts.map +1 -0
  5. package/dist/src/avaxp.js +175 -0
  6. package/dist/src/iface.d.ts +20 -41
  7. package/dist/src/iface.d.ts.map +1 -1
  8. package/dist/src/iface.js +1 -15
  9. package/dist/src/index.d.ts +4 -18
  10. package/dist/src/index.d.ts.map +1 -1
  11. package/dist/src/index.js +9 -28
  12. package/dist/src/{delegatorTxBuilder.d.ts → lib/delegatorTxBuilder.d.ts} +21 -6
  13. package/dist/src/lib/delegatorTxBuilder.d.ts.map +1 -0
  14. package/dist/src/lib/delegatorTxBuilder.js +240 -0
  15. package/dist/src/{errors.d.ts → lib/errors.d.ts} +0 -0
  16. package/dist/src/lib/errors.d.ts.map +1 -0
  17. package/dist/src/lib/errors.js +19 -0
  18. package/dist/src/lib/iface.d.ts +42 -0
  19. package/dist/src/lib/iface.d.ts.map +1 -0
  20. package/dist/src/lib/iface.js +12 -0
  21. package/dist/src/lib/index.d.ts +9 -0
  22. package/dist/src/lib/index.d.ts.map +1 -0
  23. package/dist/src/lib/index.js +29 -0
  24. package/dist/src/{keyPair.d.ts → lib/keyPair.d.ts} +13 -2
  25. package/dist/src/lib/keyPair.d.ts.map +1 -0
  26. package/dist/src/lib/keyPair.js +156 -0
  27. package/dist/src/lib/transaction.d.ts +73 -0
  28. package/dist/src/lib/transaction.d.ts.map +1 -0
  29. package/dist/src/lib/transaction.js +247 -0
  30. package/dist/src/{transactionBuilder.d.ts → lib/transactionBuilder.d.ts} +25 -22
  31. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  32. package/dist/src/lib/transactionBuilder.js +181 -0
  33. package/dist/src/{transactionBuilderFactory.d.ts → lib/transactionBuilderFactory.d.ts} +3 -4
  34. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  35. package/dist/src/lib/transactionBuilderFactory.js +50 -0
  36. package/dist/src/{transferBuilder.d.ts → lib/transferBuilder.d.ts} +0 -0
  37. package/dist/src/lib/transferBuilder.d.ts.map +1 -0
  38. package/dist/src/lib/transferBuilder.js +31 -0
  39. package/dist/src/lib/utils.d.ts +130 -0
  40. package/dist/src/lib/utils.d.ts.map +1 -0
  41. package/dist/src/lib/utils.js +257 -0
  42. package/dist/src/{validatorTxBuilder.d.ts → lib/validatorTxBuilder.d.ts} +11 -3
  43. package/dist/src/lib/validatorTxBuilder.d.ts.map +1 -0
  44. package/dist/src/lib/validatorTxBuilder.js +73 -0
  45. package/dist/src/tavaxp.d.ts +9 -0
  46. package/dist/src/tavaxp.d.ts.map +1 -0
  47. package/dist/src/tavaxp.js +14 -0
  48. package/dist/tsconfig.tsbuildinfo +973 -2827
  49. package/package.json +15 -10
  50. package/dist/src/delegatorTxBuilder.d.ts.map +0 -1
  51. package/dist/src/delegatorTxBuilder.js +0 -183
  52. package/dist/src/errors.d.ts.map +0 -1
  53. package/dist/src/errors.js +0 -19
  54. package/dist/src/keyPair.d.ts.map +0 -1
  55. package/dist/src/keyPair.js +0 -130
  56. package/dist/src/transaction.d.ts +0 -43
  57. package/dist/src/transaction.d.ts.map +0 -1
  58. package/dist/src/transaction.js +0 -98
  59. package/dist/src/transactionBuilder.d.ts.map +0 -1
  60. package/dist/src/transactionBuilder.js +0 -171
  61. package/dist/src/transactionBuilderFactory.d.ts.map +0 -1
  62. package/dist/src/transactionBuilderFactory.js +0 -53
  63. package/dist/src/transferBuilder.d.ts.map +0 -1
  64. package/dist/src/transferBuilder.js +0 -31
  65. package/dist/src/utils.d.ts +0 -50
  66. package/dist/src/utils.d.ts.map +0 -1
  67. package/dist/src/utils.js +0 -98
  68. package/dist/src/validatorTxBuilder.d.ts.map +0 -1
  69. package/dist/src/validatorTxBuilder.js +0 -58
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.KeyPair = exports.addressFormat = void 0;
26
+ const sdk_core_1 = require("@bitgo/sdk-core");
27
+ const avalanche_1 = require("avalanche");
28
+ const common_1 = require("avalanche/dist/common");
29
+ const bip32 = __importStar(require("bip32"));
30
+ const bitcoinjs_lib_1 = require("bitcoinjs-lib");
31
+ const crypto_1 = require("crypto");
32
+ const utils_1 = __importDefault(require("./utils"));
33
+ const DEFAULT_SEED_SIZE_BYTES = 16;
34
+ var addressFormat;
35
+ (function (addressFormat) {
36
+ addressFormat["testnet"] = "fuji";
37
+ addressFormat["mainnet"] = "avax";
38
+ })(addressFormat = exports.addressFormat || (exports.addressFormat = {}));
39
+ class KeyPair extends sdk_core_1.Secp256k1ExtendedKeyPair {
40
+ /**
41
+ * Public constructor. By default, creates a key pair with a random master seed.
42
+ *
43
+ * @param { KeyPairOptions } source Either a master seed, a private key, or a public key
44
+ */
45
+ constructor(source) {
46
+ super(source);
47
+ if (!source) {
48
+ const seed = crypto_1.randomBytes(DEFAULT_SEED_SIZE_BYTES);
49
+ this.hdNode = bip32.fromSeed(seed);
50
+ }
51
+ else if (sdk_core_1.isSeed(source)) {
52
+ this.hdNode = bip32.fromSeed(source.seed);
53
+ }
54
+ else if (sdk_core_1.isPrivateKey(source)) {
55
+ this.recordKeysFromPrivateKey(source.prv);
56
+ }
57
+ else if (sdk_core_1.isPublicKey(source)) {
58
+ this.recordKeysFromPublicKey(source.pub);
59
+ }
60
+ else {
61
+ throw new Error('Invalid key pair options');
62
+ }
63
+ if (this.hdNode) {
64
+ this.keyPair = sdk_core_1.Secp256k1ExtendedKeyPair.toKeyPair(this.hdNode);
65
+ }
66
+ }
67
+ /**
68
+ * Build a keypair from a protocol private key or extended private key.
69
+ *
70
+ * @param {string} prv A raw private key
71
+ */
72
+ recordKeysFromPrivateKey(prv) {
73
+ if (prv.startsWith('PrivateKey-')) {
74
+ this.keyPair = bitcoinjs_lib_1.ECPair.fromPrivateKey(Buffer.from(utils_1.default.cb58Decode(prv.split('-')[1])));
75
+ return;
76
+ }
77
+ if (!utils_1.default.isValidPrivateKey(prv)) {
78
+ throw new Error('Unsupported private key');
79
+ }
80
+ if (sdk_core_1.isValidXprv(prv)) {
81
+ this.hdNode = bip32.fromBase58(prv);
82
+ }
83
+ else {
84
+ this.keyPair = bitcoinjs_lib_1.ECPair.fromPrivateKey(Buffer.from(prv.slice(0, 64), 'hex'));
85
+ }
86
+ }
87
+ /**
88
+ * Build an ECPair from a protocol public key or extended public key.
89
+ *
90
+ * @param {string} pub A raw public key
91
+ */
92
+ recordKeysFromPublicKey(pub) {
93
+ try {
94
+ if (sdk_core_1.isValidXpub(pub)) {
95
+ this.hdNode = bip32.fromBase58(pub);
96
+ }
97
+ else {
98
+ this.keyPair = bitcoinjs_lib_1.ECPair.fromPublicKey(Buffer.from(pub, 'hex'));
99
+ }
100
+ return;
101
+ }
102
+ catch (e) {
103
+ try {
104
+ this.keyPair = bitcoinjs_lib_1.ECPair.fromPublicKey(Buffer.from(utils_1.default.cb58Decode(pub)));
105
+ return;
106
+ }
107
+ catch (e) {
108
+ throw new Error('Unsupported public key');
109
+ }
110
+ }
111
+ }
112
+ /**
113
+ * Default keys format is a pair of Uint8Array keys
114
+ *
115
+ * @returns { DefaultKeys } The keys in the defined format
116
+ */
117
+ getKeys() {
118
+ var _a;
119
+ return {
120
+ pub: this.getPublicKey({ compressed: true }).toString('hex'),
121
+ prv: (_a = this.getPrivateKey()) === null || _a === void 0 ? void 0 : _a.toString('hex'),
122
+ };
123
+ }
124
+ /**
125
+ * Get an Avalanche P-Chain public mainnet address
126
+ *
127
+ * @param {string} format - avalanche hrp - select Mainnet(avax) or Testnet(fuji) for the address
128
+ * @returns {string} The mainnet address derived from the public key
129
+ */
130
+ getAddress(format = 'mainnet') {
131
+ return this.getAvaxPAddress(addressFormat[format]);
132
+ }
133
+ /**
134
+ * Get a public address of public key.
135
+ *
136
+ * @param {string} hrp - select Mainnet(avax) or Testnet(fuji) for the address
137
+ * @returns {string} The address derived from the public key and hrp
138
+ */
139
+ getAvaxPAddress(hrp) {
140
+ const publicKey = avalanche_1.Buffer.from(this.keyPair.publicKey);
141
+ const addrressBuffer = common_1.SECP256k1KeyPair.addressFromPublicKey(publicKey);
142
+ return utils_1.default.addressToString(hrp, 'P', addrressBuffer);
143
+ }
144
+ /**
145
+ * Get an Avalanche P-Chain public mainnet address
146
+ *
147
+ * @param {string} format - avalanche hrp - select Mainnet(avax) or Testnet(fuji) for the address
148
+ * @returns {string} The mainnet address derived from the public key
149
+ */
150
+ getAddressBuffer() {
151
+ const publicKey = avalanche_1.Buffer.from(this.keyPair.publicKey);
152
+ return Buffer.from(common_1.SECP256k1KeyPair.addressFromPublicKey(publicKey));
153
+ }
154
+ }
155
+ exports.KeyPair = KeyPair;
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIva2V5UGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOENBU3lCO0FBQ3pCLHlDQUFpRDtBQUNqRCxrREFBeUQ7QUFDekQsNkNBQStCO0FBQy9CLGlEQUF1QztBQUN2QyxtQ0FBcUM7QUFDckMsb0RBQTRCO0FBRTVCLE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0FBQ25DLElBQVksYUFHWDtBQUhELFdBQVksYUFBYTtJQUN2QixpQ0FBZ0IsQ0FBQTtJQUNoQixpQ0FBZ0IsQ0FBQTtBQUNsQixDQUFDLEVBSFcsYUFBYSxHQUFiLHFCQUFhLEtBQWIscUJBQWEsUUFHeEI7QUFFRCxNQUFhLE9BQVEsU0FBUSxtQ0FBd0I7SUFDbkQ7Ozs7T0FJRztJQUNILFlBQVksTUFBdUI7UUFDakMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE1BQU0sSUFBSSxHQUFHLG9CQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEM7YUFBTSxJQUFJLGlCQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMzQzthQUFNLElBQUksdUJBQVksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzNDO2FBQU0sSUFBSSxzQkFBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENB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O1FBQ3BGLE9BQU8sZUFBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdCQUFnQjtRQUNkLE1BQU0sU0FBUyxHQUFHLGtCQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUFnQixDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztDQUNGO0FBaEhELDBCQWdIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERlZmF1bHRLZXlzLFxuICBpc1ByaXZhdGVLZXksXG4gIGlzUHVibGljS2V5LFxuICBpc1NlZWQsXG4gIGlzVmFsaWRYcHJ2LFxuICBpc1ZhbGlkWHB1YixcbiAgS2V5UGFpck9wdGlvbnMsXG4gIFNlY3AyNTZrMUV4dGVuZGVkS2V5UGFpcixcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJ1ZmZlciBhcyBCdWZmZXJBdmF4IH0gZnJvbSAnYXZhbGFuY2hlJztcbmltcG9ydCB7IFNFQ1AyNTZrMUtleVBhaXIgfSBmcm9tICdhdmFsYW5jaGUvZGlzdC9jb21tb24nO1xuaW1wb3J0ICogYXMgYmlwMzIgZnJvbSAnYmlwMzInO1xuaW1wb3J0IHsgRUNQYWlyIH0gZnJvbSAnYml0Y29pbmpzLWxpYic7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IERFRkFVTFRfU0VFRF9TSVpFX0JZVEVTID0gMTY7XG5leHBvcnQgZW51bSBhZGRyZXNzRm9ybWF0IHtcbiAgdGVzdG5ldCA9ICdmdWppJyxcbiAgbWFpbm5ldCA9ICdhdmF4Jyxcbn1cblxuZXhwb3J0IGNsYXNzIEtleVBhaXIgZXh0ZW5kcyBTZWNwMjU2azFFeHRlbmRlZEtleVBhaXIge1xuICAvKipcbiAgICogUHVibGljIGNvbnN0cnVjdG9yLiBCeSBkZWZhdWx0LCBjcmVhdGVzIGEga2V5IHBhaXIgd2l0aCBhIHJhbmRvbSBtYXN0ZXIgc2VlZC5cbiAgICpcbiAgICogQHBhcmFtIHsgS2V5UGFpck9wdGlvbnMgfSBzb3VyY2UgRWl0aGVyIGEgbWFzdGVyIHNlZWQsIGEgcHJpdmF0ZSBrZXksIG9yIGEgcHVibGljIGtleVxuICAgKi9cbiAgY29uc3RydWN0b3Ioc291cmNlPzogS2V5UGFpck9wdGlvbnMpIHtcbiAgICBzdXBlcihzb3VyY2UpO1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICBjb25zdCBzZWVkID0gcmFuZG9tQnl0ZXMoREVGQVVMVF9TRUVEX1NJWkVfQllURVMpO1xuICAgICAgdGhpcy5oZE5vZGUgPSBiaXAzMi5mcm9tU2VlZChzZWVkKTtcbiAgICB9IGVsc2UgaWYgKGlzU2VlZChzb3VyY2UpKSB7XG4gICAgICB0aGlzLmhkTm9kZSA9IGJpcDMyLmZyb21TZWVkKHNvdXJjZS5zZWVkKTtcbiAgICB9IGVsc2UgaWYgKGlzUHJpdmF0ZUtleShzb3VyY2UpKSB7XG4gICAgICB0aGlzLnJlY29yZEtleXNGcm9tUHJpdmF0ZUtleShzb3VyY2UucHJ2KTtcbiAgICB9IGVsc2UgaWYgKGlzUHVibGljS2V5KHNvdXJjZSkpIHtcbiAgICAgIHRoaXMucmVjb3JkS2V5c0Zyb21QdWJsaWNLZXkoc291cmNlLnB1Yik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXkgcGFpciBvcHRpb25zJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGROb2RlKSB7XG4gICAgICB0aGlzLmtleVBhaXIgPSBTZWNwMjU2azFFeHRlbmRlZEtleVBhaXIudG9LZXlQYWlyKHRoaXMuaGROb2RlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSBrZXlwYWlyIGZyb20gYSBwcm90b2NvbCBwcml2YXRlIGtleSBvciBleHRlbmRlZCBwcml2YXRlIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBydiBBIHJhdyBwcml2YXRlIGtleVxuICAgKi9cbiAgcmVjb3JkS2V5c0Zyb21Qcml2YXRlS2V5KHBydjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHBydi5zdGFydHNXaXRoKCdQcml2YXRlS2V5LScpKSB7XG4gICAgICB0aGlzLmtleVBhaXIgPSBFQ1BhaXIuZnJvbVByaXZhdGVLZXkoQnVmZmVyLmZyb20odXRpbHMuY2I1OERlY29kZShwcnYuc3BsaXQoJy0nKVsxXSkpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleShwcnYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIGlmIChpc1ZhbGlkWHBydihwcnYpKSB7XG4gICAgICB0aGlzLmhkTm9kZSA9IGJpcDMyLmZyb21CYXNlNTgocHJ2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5rZXlQYWlyID0gRUNQYWlyLmZyb21Qcml2YXRlS2V5KEJ1ZmZlci5mcm9tKHBydi5zbGljZSgwLCA2NCksICdoZXgnKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGFuIEVDUGFpciBmcm9tIGEgcHJvdG9jb2wgcHVibGljIGtleSBvciBleHRlbmRlZCBwdWJsaWMga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHViIEEgcmF3IHB1YmxpYyBrZXlcbiAgICovXG4gIHJlY29yZEtleXNGcm9tUHVibGljS2V5KHB1Yjogc3RyaW5nKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChpc1ZhbGlkWHB1YihwdWIpKSB7XG4gICAgICAgIHRoaXMuaGROb2RlID0gYmlwMzIuZnJvbUJhc2U1OChwdWIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5rZXlQYWlyID0gRUNQYWlyLmZyb21QdWJsaWNLZXkoQnVmZmVyLmZyb20ocHViLCAnaGV4JykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMua2V5UGFpciA9IEVDUGFpci5mcm9tUHVibGljS2V5KEJ1ZmZlci5mcm9tKHV0aWxzLmNiNThEZWNvZGUocHViKSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcHVibGljIGtleScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGtleXMgZm9ybWF0IGlzIGEgcGFpciBvZiBVaW50OEFycmF5IGtleXNcbiAgICpcbiAgICogQHJldHVybnMgeyBEZWZhdWx0S2V5cyB9IFRoZSBrZXlzIGluIHRoZSBkZWZpbmVkIGZvcm1hdFxuICAgKi9cbiAgZ2V0S2V5cygpOiBEZWZhdWx0S2V5cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1YjogdGhpcy5nZXRQdWJsaWNLZXkoeyBjb21wcmVzc2VkOiB0cnVlIH0pLnRvU3RyaW5nKCdoZXgnKSxcbiAgICAgIHBydjogdGhpcy5nZXRQcml2YXRlS2V5KCk/LnRvU3RyaW5nKCdoZXgnKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBBdmFsYW5jaGUgUC1DaGFpbiBwdWJsaWMgbWFpbm5ldCBhZGRyZXNzXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgLSBhdmFsYW5jaGUgaHJwIC0gc2VsZWN0IE1haW5uZXQoYXZheCkgb3IgVGVzdG5ldChmdWppKSBmb3IgdGhlIGFkZHJlc3NcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIG1haW5uZXQgYWRkcmVzcyBkZXJpdmVkIGZyb20gdGhlIHB1YmxpYyBrZXlcbiAgICovXG4gIGdldEFkZHJlc3MoZm9ybWF0ID0gJ21haW5uZXQnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBdmF4UEFkZHJlc3MoYWRkcmVzc0Zvcm1hdFtmb3JtYXRdKTtcbiAgfVxuICAvKipcbiAgICogR2V0IGEgcHVibGljIGFkZHJlc3Mgb2YgcHVibGljIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhycCAtIHNlbGVjdCBNYWlubmV0KGF2YXgpIG9yIFRlc3RuZXQoZnVqaSkgZm9yIHRoZSBhZGRyZXNzXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBhZGRyZXNzIGRlcml2ZWQgZnJvbSB0aGUgcHVibGljIGtleSBhbmQgaHJwXG4gICAqL1xuICBnZXRBdmF4UEFkZHJlc3MoaHJwOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IEJ1ZmZlckF2YXguZnJvbSh0aGlzLmtleVBhaXIucHVibGljS2V5KTtcbiAgICBjb25zdCBhZGRycmVzc0J1ZmZlcjogQnVmZmVyQXZheCA9IFNFQ1AyNTZrMUtleVBhaXIuYWRkcmVzc0Zyb21QdWJsaWNLZXkocHVibGljS2V5KTtcbiAgICByZXR1cm4gdXRpbHMuYWRkcmVzc1RvU3RyaW5nKGhycCwgJ1AnLCBhZGRycmVzc0J1ZmZlcik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIEF2YWxhbmNoZSBQLUNoYWluIHB1YmxpYyBtYWlubmV0IGFkZHJlc3NcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCAtIGF2YWxhbmNoZSBocnAgLSBzZWxlY3QgTWFpbm5ldChhdmF4KSBvciBUZXN0bmV0KGZ1amkpIGZvciB0aGUgYWRkcmVzc1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbWFpbm5ldCBhZGRyZXNzIGRlcml2ZWQgZnJvbSB0aGUgcHVibGljIGtleVxuICAgKi9cbiAgZ2V0QWRkcmVzc0J1ZmZlcigpOiBCdWZmZXIge1xuICAgIGNvbnN0IHB1YmxpY0tleSA9IEJ1ZmZlckF2YXguZnJvbSh0aGlzLmtleVBhaXIucHVibGljS2V5KTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oU0VDUDI1NmsxS2V5UGFpci5hZGRyZXNzRnJvbVB1YmxpY0tleShwdWJsaWNLZXkpKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,73 @@
1
+ /// <reference types="bn.js" />
2
+ /// <reference types="node" />
3
+ import { AvalancheNetwork, BaseCoin as CoinConfig } from '@bitgo/statics';
4
+ import { BaseKey, BaseTransaction, Entry, TransactionType } from '@bitgo/sdk-core';
5
+ import { KeyPair } from './keyPair';
6
+ import { DecodedUtxoObj, TransactionExplanation, TxData } from './iface';
7
+ import { BaseTx, Tx } from 'avalanche/dist/apis/platformvm';
8
+ import { BN, Buffer as BufferAvax } from 'avalanche';
9
+ import { Credential } from 'avalanche/dist/common';
10
+ export declare class Transaction extends BaseTransaction {
11
+ protected _avaxpTransaction: Tx;
12
+ _type: TransactionType;
13
+ _network: AvalancheNetwork;
14
+ _networkID: number;
15
+ _assetId: BufferAvax;
16
+ _blockchainID: BufferAvax;
17
+ _memo?: BufferAvax;
18
+ _threshold: number;
19
+ _locktime: BN;
20
+ _fromAddresses: BufferAvax[];
21
+ _utxos: DecodedUtxoObj[];
22
+ _txFee: BN;
23
+ constructor(coinConfig: Readonly<CoinConfig>);
24
+ get avaxPTransaction(): BaseTx;
25
+ get signature(): string[];
26
+ get credentials(): Credential[];
27
+ get hasCredentials(): boolean;
28
+ /** @inheritdoc */
29
+ canSign({ key }: BaseKey): boolean;
30
+ /**
31
+ * Sign a avaxp transaction and update the transaction hex
32
+ * validator, delegator, import, exports extend baseTx
33
+ * unsignedTx: UnsignedTx = new UnsignedTx(baseTx) (baseTx = addValidatorTx)
34
+ * const tx: Tx = unsignedTx.sign(keychain) (tx is type standard signed tx)
35
+ * get baseTx then create new unsignedTx then sign
36
+ *
37
+ * @param {KeyPair} keyPair
38
+ */
39
+ sign(keyPair: KeyPair): void;
40
+ /** @inheritdoc */
41
+ /**
42
+ * should be of signedTx doing this with baseTx
43
+ */
44
+ toBroadcastFormat(): string;
45
+ toJson(): TxData;
46
+ setTransaction(tx: Tx): void;
47
+ /**
48
+ * Set the transaction type
49
+ *
50
+ * @param {TransactionType} transactionType The transaction type to be set
51
+ */
52
+ setTransactionType(transactionType: TransactionType): void;
53
+ /**
54
+ * Returns the portion of the transaction that needs to be signed in Buffer format.
55
+ * Only needed for coins that support adding signatures directly (e.g. TSS).
56
+ */
57
+ get signablePayload(): Buffer;
58
+ get id(): string;
59
+ get fromAddresses(): string[];
60
+ /**
61
+ * Get the list of outputs. Amounts are expressed in absolute value.
62
+ */
63
+ get outputs(): Entry[];
64
+ /**
65
+ * Avax wrapper to create signature and return it for credentials
66
+ * @param prv
67
+ * @return hexstring
68
+ */
69
+ createSignature(prv: Buffer): string;
70
+ /** @inheritdoc */
71
+ explainTransaction(): TransactionExplanation;
72
+ }
73
+ //# sourceMappingURL=transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EACL,OAAO,EACP,eAAe,EACf,KAAK,EAGL,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,EAAgC,MAAM,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAC1F,OAAO,EAAY,EAAE,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AAG/D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAyCnD,qBAAa,WAAY,SAAQ,eAAe;IAC9C,SAAS,CAAC,iBAAiB,EAAE,EAAE,CAAC;IACzB,KAAK,EAAE,eAAe,CAAC;IACvB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,UAAU,CAAC;IACrB,aAAa,EAAE,UAAU,CAAC;IAC1B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,UAAU,SAAK;IACf,SAAS,EAAE,EAAE,CAAa;IAC1B,cAAc,EAAE,UAAU,EAAE,CAAM;IAClC,MAAM,EAAE,cAAc,EAAE,CAAM;IAC9B,MAAM,EAAE,EAAE,CAAC;gBAEN,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAS5C,IAAI,gBAAgB,IAAI,MAAM,CAE7B;IAED,IAAI,SAAS,IAAI,MAAM,EAAE,CAMxB;IAED,IAAI,WAAW,IAAI,UAAU,EAAE,CAE9B;IAED,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED,kBAAkB;IAClB,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,OAAO;IAYlC;;;;;;;;OAQG;IACH,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IA4B5B,kBAAkB;IAClB;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAS3B,MAAM,IAAI,MAAM;IAgBhB,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI;IAI5B;;;;OAIG;IACH,kBAAkB,CAAC,eAAe,EAAE,eAAe,GAAG,IAAI;IAI1D;;;OAGG;IACH,IAAI,eAAe,IAAI,MAAM,CAG5B;IAED,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,IAAI,aAAa,IAAI,MAAM,EAAE,CAE5B;IACD;;OAEG;IACH,IAAI,OAAO,IAAI,KAAK,EAAE,CAsBrB;IAED;;;;OAIG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IASpC,kBAAkB;IAClB,kBAAkB,IAAI,sBAAsB;CAc7C"}
@@ -0,0 +1,247 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.Transaction = void 0;
26
+ const sdk_core_1 = require("@bitgo/sdk-core");
27
+ const keyPair_1 = require("./keyPair");
28
+ const avalanche_1 = require("avalanche");
29
+ const utils_1 = __importDefault(require("./utils"));
30
+ const createHash = __importStar(require("create-hash"));
31
+ function isEmptySignature(s) {
32
+ return !!s && s.startsWith(''.padStart(90, '0'));
33
+ }
34
+ /**
35
+ * Signatures are prestore as empty buffer for hsm and address of signar for first signature.
36
+ * When sign is required, this method return the function that identify a signature to be replaced.
37
+ * @param signatures any signatures as samples to identify which signature required replace.
38
+ */
39
+ function generateSelectorSignature(signatures) {
40
+ if (signatures.every((sig) => isEmptySignature(sig.bytes))) {
41
+ // Look for address.
42
+ return function (sig, address) {
43
+ try {
44
+ if (!isEmptySignature(sig.bytes))
45
+ return false;
46
+ const pub = sig.bytes.substring(90);
47
+ return pub === address;
48
+ }
49
+ catch (e) {
50
+ return false;
51
+ }
52
+ };
53
+ }
54
+ else {
55
+ // Look for empty string
56
+ return function (sig, address) {
57
+ if (isEmptySignature(sig.bytes))
58
+ return true;
59
+ return false;
60
+ };
61
+ }
62
+ }
63
+ // end region utils for sign
64
+ class Transaction extends sdk_core_1.BaseTransaction {
65
+ constructor(coinConfig) {
66
+ super(coinConfig);
67
+ this._threshold = 2;
68
+ this._locktime = new avalanche_1.BN(0);
69
+ this._fromAddresses = [];
70
+ this._utxos = [];
71
+ this._network = coinConfig.network;
72
+ this._assetId = utils_1.default.cb58Decode(this._network.avaxAssetID);
73
+ this._blockchainID = utils_1.default.cb58Decode(this._network.blockchainID);
74
+ this._networkID = this._network.networkID;
75
+ this._txFee = new avalanche_1.BN(this._network.txFee.toString());
76
+ }
77
+ get avaxPTransaction() {
78
+ return this._avaxpTransaction.getUnsignedTx().getTransaction();
79
+ }
80
+ get signature() {
81
+ if (this.credentials.length === 0) {
82
+ return [];
83
+ }
84
+ const obj = this.credentials[0].serialize();
85
+ return obj.sigArray.map((s) => s.bytes).filter((s) => !isEmptySignature(s));
86
+ }
87
+ get credentials() {
88
+ return this._avaxpTransaction.getCredentials();
89
+ }
90
+ get hasCredentials() {
91
+ return this.credentials !== undefined && this.credentials.length > 0;
92
+ }
93
+ /** @inheritdoc */
94
+ canSign({ key }) {
95
+ try {
96
+ const kp = new keyPair_1.KeyPair({ prv: key });
97
+ const privateKey = kp.getPrivateKey();
98
+ if (!privateKey)
99
+ return false;
100
+ const address = utils_1.default.parseAddress(kp.getAvaxPAddress(this._network.hrp));
101
+ return this._fromAddresses.find((a) => address.equals(a)) !== undefined;
102
+ }
103
+ catch {
104
+ return false;
105
+ }
106
+ }
107
+ /**
108
+ * Sign a avaxp transaction and update the transaction hex
109
+ * validator, delegator, import, exports extend baseTx
110
+ * unsignedTx: UnsignedTx = new UnsignedTx(baseTx) (baseTx = addValidatorTx)
111
+ * const tx: Tx = unsignedTx.sign(keychain) (tx is type standard signed tx)
112
+ * get baseTx then create new unsignedTx then sign
113
+ *
114
+ * @param {KeyPair} keyPair
115
+ */
116
+ sign(keyPair) {
117
+ const prv = keyPair.getPrivateKey();
118
+ const addressHex = keyPair.getAddressBuffer().toString('hex');
119
+ if (!prv) {
120
+ throw new sdk_core_1.SigningError('Missing private key');
121
+ }
122
+ if (!this.avaxPTransaction) {
123
+ throw new sdk_core_1.InvalidTransactionError('empty transaction to sign');
124
+ }
125
+ if (!this.hasCredentials) {
126
+ throw new sdk_core_1.InvalidTransactionError('empty credentials to sign');
127
+ }
128
+ const signature = this.createSignature(prv);
129
+ let checkSign = undefined;
130
+ this.credentials.forEach((c) => {
131
+ const cs = c.serialize();
132
+ if (checkSign === undefined) {
133
+ checkSign = generateSelectorSignature(cs.sigArray);
134
+ }
135
+ cs.sigArray.forEach((sig) => {
136
+ if (checkSign && checkSign(sig, addressHex)) {
137
+ sig.bytes = signature;
138
+ }
139
+ });
140
+ c.deserialize(cs);
141
+ });
142
+ }
143
+ /** @inheritdoc */
144
+ /**
145
+ * should be of signedTx doing this with baseTx
146
+ */
147
+ toBroadcastFormat() {
148
+ if (!this.avaxPTransaction) {
149
+ throw new sdk_core_1.InvalidTransactionError('Empty transaction data');
150
+ }
151
+ const bintools = avalanche_1.BinTools.getInstance();
152
+ return bintools.addChecksum(this._avaxpTransaction.toBuffer()).toString('hex');
153
+ }
154
+ // types - stakingTransaction, import, export
155
+ toJson() {
156
+ if (!this.avaxPTransaction) {
157
+ throw new sdk_core_1.InvalidTransactionError('Empty transaction data');
158
+ }
159
+ return {
160
+ id: this.id,
161
+ fromAddresses: this.fromAddresses,
162
+ threshold: this._threshold,
163
+ locktime: this._locktime.toString(),
164
+ type: this.type,
165
+ memo: utils_1.default.bufferToString(this.avaxPTransaction.getMemo()),
166
+ signatures: this.signature,
167
+ outputs: this.outputs,
168
+ };
169
+ }
170
+ setTransaction(tx) {
171
+ this._avaxpTransaction = tx;
172
+ }
173
+ /**
174
+ * Set the transaction type
175
+ *
176
+ * @param {TransactionType} transactionType The transaction type to be set
177
+ */
178
+ setTransactionType(transactionType) {
179
+ this._type = transactionType;
180
+ }
181
+ /**
182
+ * Returns the portion of the transaction that needs to be signed in Buffer format.
183
+ * Only needed for coins that support adding signatures directly (e.g. TSS).
184
+ */
185
+ get signablePayload() {
186
+ const txbuff = this._avaxpTransaction.getUnsignedTx().toBuffer();
187
+ return createHash.default('sha256').update(txbuff).digest();
188
+ }
189
+ get id() {
190
+ return utils_1.default.cb58Encode(avalanche_1.Buffer.from(utils_1.default.sha256(avalanche_1.Buffer.from(this.toBroadcastFormat(), 'hex'))));
191
+ }
192
+ get fromAddresses() {
193
+ return this._fromAddresses.map((a) => utils_1.default.addressToString(this._network.hrp, this._network.alias, a));
194
+ }
195
+ /**
196
+ * Get the list of outputs. Amounts are expressed in absolute value.
197
+ */
198
+ get outputs() {
199
+ if (this.type === sdk_core_1.TransactionType.addValidator) {
200
+ const addValidatorTx = this.avaxPTransaction;
201
+ return [
202
+ {
203
+ address: addValidatorTx.getNodeIDString(),
204
+ value: addValidatorTx.getStakeAmount().toString(),
205
+ },
206
+ ];
207
+ }
208
+ // general support any transaction type, but it's scoped yet
209
+ return this.avaxPTransaction.getOuts().map((output) => {
210
+ const amountOutput = output.getOutput();
211
+ const address = amountOutput
212
+ .getAddresses()
213
+ .map((a) => utils_1.default.addressToString(this._network.hrp, this._network.alias, a))
214
+ .join(', ');
215
+ return {
216
+ value: amountOutput.getAmount().toString(),
217
+ address,
218
+ };
219
+ });
220
+ }
221
+ /**
222
+ * Avax wrapper to create signature and return it for credentials
223
+ * @param prv
224
+ * @return hexstring
225
+ */
226
+ createSignature(prv) {
227
+ const signval = utils_1.default.createSignatureAvaxBuffer(this._network, avalanche_1.Buffer.from(this.signablePayload), avalanche_1.Buffer.from(prv));
228
+ return signval.toString('hex');
229
+ }
230
+ /** @inheritdoc */
231
+ explainTransaction() {
232
+ const txJson = this.toJson();
233
+ const displayOrder = ['id', 'outputAmount', 'changeAmount', 'outputs', 'changeOutputs', 'fee', 'type'];
234
+ return {
235
+ displayOrder,
236
+ id: txJson.id,
237
+ outputs: txJson.outputs.map((o) => ({ address: o.address, amount: o.value, memo: txJson.memo })),
238
+ outputAmount: txJson.outputs.reduce((p, n) => p.add(new avalanche_1.BN(n.value)), new avalanche_1.BN(0)).toString(),
239
+ changeOutputs: [],
240
+ changeAmount: '0',
241
+ fee: { fee: this._txFee.toString() },
242
+ type: txJson.type,
243
+ };
244
+ }
245
+ }
246
+ exports.Transaction = Transaction;
247
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSw4Q0FPeUI7QUFDekIsdUNBQW9DO0FBR3BDLHlDQUErRDtBQUMvRCxvREFBNEI7QUFDNUIsd0RBQTBDO0FBVzFDLFNBQVMsZ0JBQWdCLENBQUMsQ0FBUztJQUNqQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FBQyxVQUFpQztJQUNsRSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQzFELG9CQUFvQjtRQUNwQixPQUFPLFVBQVUsR0FBRyxFQUFFLE9BQU87WUFDM0IsSUFBSTtnQkFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztvQkFBRSxPQUFPLEtBQUssQ0FBQztnQkFDL0MsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BDLE9BQU8sR0FBRyxLQUFLLE9BQU8sQ0FBQzthQUN4QjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNWLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7UUFDSCxDQUFDLENBQUM7S0FDSDtTQUFNO1FBQ0wsd0JBQXdCO1FBQ3hCLE9BQU8sVUFBVSxHQUFHLEVBQUUsT0FBTztZQUMzQixJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFD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QUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoRyxZQUFZLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksY0FBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksY0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO1lBQzNGLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLFlBQVksRUFBRSxHQUFHO1lBQ2pCLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3BDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtTQUNsQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBL01ELGtDQStNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF2YWxhbmNoZU5ldHdvcmssIEJhc2VDb2luIGFzIENvaW5Db25maWcgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQge1xuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEVudHJ5LFxuICBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcixcbiAgU2lnbmluZ0Vycm9yLFxuICBUcmFuc2FjdGlvblR5cGUsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmltcG9ydCB7IERlY29kZWRVdHhvT2JqLCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLCBUeERhdGEgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEFkZFZhbGlkYXRvclR4LCBBbW91bnRPdXRwdXQsIEJhc2VUeCwgVHggfSBmcm9tICdhdmFsYW5jaGUvZGlzdC9hcGlzL3BsYXRmb3Jtdm0nO1xuaW1wb3J0IHsgQmluVG9vbHMsIEJOLCBCdWZmZXIgYXMgQnVmZmVyQXZheCB9IGZyb20gJ2F2YWxhbmNoZSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgKiBhcyBjcmVhdGVIYXNoIGZyb20gJ2NyZWF0ZS1oYXNoJztcbmltcG9ydCB7IENyZWRlbnRpYWwgfSBmcm9tICdhdmFsYW5jaGUvZGlzdC9jb21tb24nO1xuXG4vLyByZWdpb24gdXRpbHMgdG8gc2lnblxuaW50ZXJmYWNlIHNpZ25hdHVyZVNlcmlhbGl6ZWQge1xuICBieXRlczogc3RyaW5nO1xufVxuaW50ZXJmYWNlIENoZWNrU2lnbmF0dXJlIHtcbiAgKHNpZ2F0dXJlOiBzaWduYXR1cmVTZXJpYWxpemVkLCBhZGRyZXNzSGV4OiBzdHJpbmcpOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBpc0VtcHR5U2lnbmF0dXJlKHM6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gISFzICYmIHMuc3RhcnRzV2l0aCgnJy5wYWRTdGFydCg5MCwgJzAnKSk7XG59XG5cbi8qKlxuICogU2lnbmF0dXJlcyBhcmUgcHJlc3RvcmUgYXMgZW1wdHkgYnVmZmVyIGZvciBoc20gYW5kIGFkZHJlc3Mgb2Ygc2lnbmFyIGZvciBmaXJzdCBzaWduYXR1cmUuXG4gKiBXaGVuIHNpZ24gaXMgcmVxdWlyZWQsIHRoaXMgbWV0aG9kIHJldHVybiB0aGUgZnVuY3Rpb24gdGhhdCBpZGVudGlmeSBhIHNpZ25hdHVyZSB0byBiZSByZXBsYWNlZC5cbiAqIEBwYXJhbSBzaWduYXR1cmVzIGFueSBzaWduYXR1cmVzIGFzIHNhbXBsZXMgdG8gaWRlbnRpZnkgd2hpY2ggc2lnbmF0dXJlIHJlcXVpcmVkIHJlcGxhY2UuXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlU2VsZWN0b3JTaWduYXR1cmUoc2lnbmF0dXJlczogc2lnbmF0dXJlU2VyaWFsaXplZFtdKTogQ2hlY2tTaWduYXR1cmUge1xuICBpZiAoc2lnbmF0dXJlcy5ldmVyeSgoc2lnKSA9PiBpc0VtcHR5U2lnbmF0dXJlKHNpZy5ieXRlcykpKSB7XG4gICAgLy8gTG9vayBmb3IgYWRkcmVzcy5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHNpZywgYWRkcmVzcyk6IGJvb2xlYW4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFpc0VtcHR5U2lnbmF0dXJlKHNpZy5ieXRlcykpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgcHViID0gc2lnLmJ5dGVzLnN1YnN0cmluZyg5MCk7XG4gICAgICAgIHJldHVybiBwdWIgPT09IGFkZHJlc3M7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIExvb2sgZm9yIGVtcHR5IHN0cmluZ1xuICAgIHJldHVybiBmdW5jdGlvbiAoc2lnLCBhZGRyZXNzKTogYm9vbGVhbiB7XG4gICAgICBpZiAoaXNFbXB0eVNpZ25hdHVyZShzaWcuYnl0ZXMpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICB9XG59XG4vLyBlbmQgcmVnaW9uIHV0aWxzIGZvciBzaWduXG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbiB7XG4gIHByb3RlY3RlZCBfYXZheHBUcmFuc2FjdGlvbjogVHg7XG4gIHB1YmxpYyBfdHlwZTogVHJhbnNhY3Rpb25UeXBlO1xuICBwdWJsaWMgX25ldHdvcms6IEF2YWxhbmNoZU5ldHdvcms7XG4gIHB1YmxpYyBfbmV0d29ya0lEOiBudW1iZXI7XG4gIHB1YmxpYyBfYXNzZXRJZDogQnVmZmVyQXZheDtcbiAgcHVibGljIF9ibG9ja2NoYWluSUQ6IEJ1ZmZlckF2YXg7XG4gIHB1YmxpYyBfbWVtbz86IEJ1ZmZlckF2YXg7XG4gIHB1YmxpYyBfdGhyZXNob2xkID0gMjtcbiAgcHVibGljIF9sb2NrdGltZTogQk4gPSBuZXcgQk4oMCk7XG4gIHB1YmxpYyBfZnJvbUFkZHJlc3NlczogQnVmZmVyQXZheFtdID0gW107XG4gIHB1YmxpYyBfdXR4b3M6IERlY29kZWRVdHhvT2JqW10gPSBbXTtcbiAgcHVibGljIF90eEZlZTogQk47XG5cbiAgY29uc3RydWN0b3IoY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihjb2luQ29uZmlnKTtcbiAgICB0aGlzLl9uZXR3b3JrID0gY29pbkNvbmZpZy5uZXR3b3JrIGFzIEF2YWxhbmNoZU5ldHdvcms7XG4gICAgdGhpcy5fYXNzZXRJZCA9IHV0aWxzLmNiNThEZWNvZGUodGhpcy5fbmV0d29yay5hdmF4QXNzZXRJRCk7XG4gICAgdGhpcy5fYmxvY2tjaGFpbklEID0gdXRpbHMuY2I1OERlY29kZSh0aGlzLl9uZXR3b3JrLmJsb2NrY2hhaW5JRCk7XG4gICAgdGhpcy5fbmV0d29ya0lEID0gdGhpcy5fbmV0d29yay5uZXR3b3JrSUQ7XG4gICAgdGhpcy5fdHhGZWUgPSBuZXcgQk4odGhpcy5fbmV0d29yay50eEZlZS50b1N0cmluZygpKTtcbiAgfVxuXG4gIGdldCBhdmF4UFRyYW5zYWN0aW9uKCk6IEJhc2VUeCB7XG4gICAgcmV0dXJuIHRoaXMuX2F2YXhwVHJhbnNhY3Rpb24uZ2V0VW5zaWduZWRUeCgpLmdldFRyYW5zYWN0aW9uKCk7XG4gIH1cblxuICBnZXQgc2lnbmF0dXJlKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAodGhpcy5jcmVkZW50aWFscy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3Qgb2JqOiBhbnkgPSB0aGlzLmNyZWRlbnRpYWxzWzBdLnNlcmlhbGl6ZSgpO1xuICAgIHJldHVybiBvYmouc2lnQXJyYXkubWFwKChzKSA9PiBzLmJ5dGVzKS5maWx0ZXIoKHMpID0+ICFpc0VtcHR5U2lnbmF0dXJlKHMpKTtcbiAgfVxuXG4gIGdldCBjcmVkZW50aWFscygpOiBDcmVkZW50aWFsW10ge1xuICAgIHJldHVybiB0aGlzLl9hdmF4cFRyYW5zYWN0aW9uLmdldENyZWRlbnRpYWxzKCk7XG4gIH1cblxuICBnZXQgaGFzQ3JlZGVudGlhbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlZGVudGlhbHMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNyZWRlbnRpYWxzLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgY2FuU2lnbih7IGtleSB9OiBCYXNlS2V5KTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IGtleSB9KTtcbiAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBrcC5nZXRQcml2YXRlS2V5KCk7XG4gICAgICBpZiAoIXByaXZhdGVLZXkpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSB1dGlscy5wYXJzZUFkZHJlc3Moa3AuZ2V0QXZheFBBZGRyZXNzKHRoaXMuX25ldHdvcmsuaHJwKSk7XG4gICAgICByZXR1cm4gdGhpcy5fZnJvbUFkZHJlc3Nlcy5maW5kKChhKSA9PiBhZGRyZXNzLmVxdWFscyhhKSkgIT09IHVuZGVmaW5lZDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBhIGF2YXhwIHRyYW5zYWN0aW9uIGFuZCB1cGRhdGUgdGhlIHRyYW5zYWN0aW9uIGhleFxuICAgKiB2YWxpZGF0b3IsIGRlbGVnYXRvciwgaW1wb3J0LCBleHBvcnRzIGV4dGVuZCBiYXNlVHhcbiAgICogdW5zaWduZWRUeDogVW5zaWduZWRUeCA9IG5ldyBVbnNpZ25lZFR4KGJhc2VUeCkgIChiYXNlVHggPSBhZGRWYWxpZGF0b3JUeClcbiAgICogY29uc3QgdHg6IFR4ID0gdW5zaWduZWRUeC5zaWduKGtleWNoYWluKSAodHggaXMgdHlwZSBzdGFuZGFyZCBzaWduZWQgdHgpXG4gICAqIGdldCBiYXNlVHggdGhlbiBjcmVhdGUgbmV3IHVuc2lnbmVkVHggdGhlbiBzaWduXG4gICAqXG4gICAqIEBwYXJhbSB7S2V5UGFpcn0ga2V5UGFpclxuICAgKi9cbiAgc2lnbihrZXlQYWlyOiBLZXlQYWlyKTogdm9pZCB7XG4gICAgY29uc3QgcHJ2ID0ga2V5UGFpci5nZXRQcml2YXRlS2V5KCk7XG4gICAgY29uc3QgYWRkcmVzc0hleCA9IGtleVBhaXIuZ2V0QWRkcmVzc0J1ZmZlcigpLnRvU3RyaW5nKCdoZXgnKTtcbiAgICBpZiAoIXBydikge1xuICAgICAgdGhyb3cgbmV3IFNpZ25pbmdFcnJvcignTWlzc2luZyBwcml2YXRlIGtleScpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuYXZheFBUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdlbXB0eSB0cmFuc2FjdGlvbiB0byBzaWduJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy5oYXNDcmVkZW50aWFscykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdlbXB0eSBjcmVkZW50aWFscyB0byBzaWduJyk7XG4gICAgfVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMuY3JlYXRlU2lnbmF0dXJlKHBydik7XG4gICAgbGV0IGNoZWNrU2lnbjogQ2hlY2tTaWduYXR1cmUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jcmVkZW50aWFscy5mb3JFYWNoKChjKSA9PiB7XG4gICAgICBjb25zdCBjczogYW55ID0gYy5zZXJpYWxpemUoKTtcbiAgICAgIGlmIChjaGVja1NpZ24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjaGVja1NpZ24gPSBnZW5lcmF0ZVNlbGVjdG9yU2lnbmF0dXJlKGNzLnNpZ0FycmF5KTtcbiAgICAgIH1cbiAgICAgIGNzLnNpZ0FycmF5LmZvckVhY2goKHNpZykgPT4ge1xuICAgICAgICBpZiAoY2hlY2tTaWduICYmIGNoZWNrU2lnbihzaWcsIGFkZHJlc3NIZXgpKSB7XG4gICAgICAgICAgc2lnLmJ5dGVzID0gc2lnbmF0dXJlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGMuZGVzZXJpYWxpemUoY3MpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIC8qKlxuICAgKiBzaG91bGQgYmUgb2Ygc2lnbmVkVHggZG9pbmcgdGhpcyB3aXRoIGJhc2VUeFxuICAgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuYXZheFBUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbiBkYXRhJyk7XG4gICAgfVxuICAgIGNvbnN0IGJpbnRvb2xzID0gQmluVG9vbHMuZ2V0SW5zdGFuY2UoKTtcbiAgICByZXR1cm4gYmludG9vbHMuYWRkQ2hlY2tzdW0odGhpcy5fYXZheHBUcmFuc2FjdGlvbi50b0J1ZmZlcigpKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvLyB0eXBlcyAtIHN0YWtpbmdUcmFuc2FjdGlvbiwgaW1wb3J0LCBleHBvcnRcbiAgdG9Kc29uKCk6IFR4RGF0YSB7XG4gICAgaWYgKCF0aGlzLmF2YXhQVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24gZGF0YScpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICBmcm9tQWRkcmVzc2VzOiB0aGlzLmZyb21BZGRyZXNzZXMsXG4gICAgICB0aHJlc2hvbGQ6IHRoaXMuX3RocmVzaG9sZCxcbiAgICAgIGxvY2t0aW1lOiB0aGlzLl9sb2NrdGltZS50b1N0cmluZygpLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgbWVtbzogdXRpbHMuYnVmZmVyVG9TdHJpbmcodGhpcy5hdmF4UFRyYW5zYWN0aW9uLmdldE1lbW8oKSksXG4gICAgICBzaWduYXR1cmVzOiB0aGlzLnNpZ25hdHVyZSxcbiAgICAgIG91dHB1dHM6IHRoaXMub3V0cHV0cyxcbiAgICB9O1xuICB9XG5cbiAgc2V0VHJhbnNhY3Rpb24odHg6IFR4KTogdm9pZCB7XG4gICAgdGhpcy5fYXZheHBUcmFuc2FjdGlvbiA9IHR4O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgdHJhbnNhY3Rpb24gdHlwZVxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uVHlwZX0gdHJhbnNhY3Rpb25UeXBlIFRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGJlIHNldFxuICAgKi9cbiAgc2V0VHJhbnNhY3Rpb25UeXBlKHRyYW5zYWN0aW9uVHlwZTogVHJhbnNhY3Rpb25UeXBlKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IHRyYW5zYWN0aW9uVHlwZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwb3J0aW9uIG9mIHRoZSB0cmFuc2FjdGlvbiB0aGF0IG5lZWRzIHRvIGJlIHNpZ25lZCBpbiBCdWZmZXIgZm9ybWF0LlxuICAgKiBPbmx5IG5lZWRlZCBmb3IgY29pbnMgdGhhdCBzdXBwb3J0IGFkZGluZyBzaWduYXR1cmVzIGRpcmVjdGx5IChlLmcuIFRTUykuXG4gICAqL1xuICBnZXQgc2lnbmFibGVQYXlsb2FkKCk6IEJ1ZmZlciB7XG4gICAgY29uc3QgdHhidWZmID0gdGhpcy5fYXZheHBUcmFuc2FjdGlvbi5nZXRVbnNpZ25lZFR4KCkudG9CdWZmZXIoKTtcbiAgICByZXR1cm4gY3JlYXRlSGFzaC5kZWZhdWx0KCdzaGEyNTYnKS51cGRhdGUodHhidWZmKS5kaWdlc3QoKTtcbiAgfVxuXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB1dGlscy5jYjU4RW5jb2RlKEJ1ZmZlckF2YXguZnJvbSh1dGlscy5zaGEyNTYoQnVmZmVyQXZheC5mcm9tKHRoaXMudG9Ccm9hZGNhc3RGb3JtYXQoKSwgJ2hleCcpKSkpO1xuICB9XG5cbiAgZ2V0IGZyb21BZGRyZXNzZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9mcm9tQWRkcmVzc2VzLm1hcCgoYSkgPT4gdXRpbHMuYWRkcmVzc1RvU3RyaW5nKHRoaXMuX25ldHdvcmsuaHJwLCB0aGlzLl9uZXR3b3JrLmFsaWFzLCBhKSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlzdCBvZiBvdXRwdXRzLiBBbW91bnRzIGFyZSBleHByZXNzZWQgaW4gYWJzb2x1dGUgdmFsdWUuXG4gICAqL1xuICBnZXQgb3V0cHV0cygpOiBFbnRyeVtdIHtcbiAgICBpZiAodGhpcy50eXBlID09PSBUcmFuc2FjdGlvblR5cGUuYWRkVmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCBhZGRWYWxpZGF0b3JUeCA9IHRoaXMuYXZheFBUcmFuc2FjdGlvbiBhcyBBZGRWYWxpZGF0b3JUeDtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiBhZGRWYWxpZGF0b3JUeC5nZXROb2RlSURTdHJpbmcoKSxcbiAgICAgICAgICB2YWx1ZTogYWRkVmFsaWRhdG9yVHguZ2V0U3Rha2VBbW91bnQoKS50b1N0cmluZygpLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9XG4gICAgLy8gZ2VuZXJhbCBzdXBwb3J0IGFueSB0cmFuc2FjdGlvbiB0eXBlLCBidXQgaXQncyBzY29wZWQgeWV0XG4gICAgcmV0dXJuIHRoaXMuYXZheFBUcmFuc2FjdGlvbi5nZXRPdXRzKCkubWFwKChvdXRwdXQpID0+IHtcbiAgICAgIGNvbnN0IGFtb3VudE91dHB1dCA9IG91dHB1dC5nZXRPdXRwdXQoKSBhcyBhbnkgYXMgQW1vdW50T3V0cHV0O1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGFtb3VudE91dHB1dFxuICAgICAgICAuZ2V0QWRkcmVzc2VzKClcbiAgICAgICAgLm1hcCgoYSkgPT4gdXRpbHMuYWRkcmVzc1RvU3RyaW5nKHRoaXMuX25ldHdvcmsuaHJwLCB0aGlzLl9uZXR3b3JrLmFsaWFzLCBhKSlcbiAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogYW1vdW50T3V0cHV0LmdldEFtb3VudCgpLnRvU3RyaW5nKCksXG4gICAgICAgIGFkZHJlc3MsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEF2YXggd3JhcHBlciB0byBjcmVhdGUgc2lnbmF0dXJlIGFuZCByZXR1cm4gaXQgZm9yIGNyZWRlbnRpYWxzXG4gICAqIEBwYXJhbSBwcnZcbiAgICogQHJldHVybiBoZXhzdHJpbmdcbiAgICovXG4gIGNyZWF0ZVNpZ25hdHVyZShwcnY6IEJ1ZmZlcik6IHN0cmluZyB7XG4gICAgY29uc3Qgc2lnbnZhbCA9IHV0aWxzLmNyZWF0ZVNpZ25hdHVyZUF2YXhCdWZmZXIoXG4gICAgICB0aGlzLl9uZXR3b3JrLFxuICAgICAgQnVmZmVyQXZheC5mcm9tKHRoaXMuc2lnbmFibGVQYXlsb2FkKSxcbiAgICAgIEJ1ZmZlckF2YXguZnJvbShwcnYpXG4gICAgKTtcbiAgICByZXR1cm4gc2lnbnZhbC50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZXhwbGFpblRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICAgIGNvbnN0IHR4SnNvbiA9IHRoaXMudG9Kc29uKCk7XG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gWydpZCcsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlQW1vdW50JywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cycsICdmZWUnLCAndHlwZSddO1xuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBpZDogdHhKc29uLmlkLFxuICAgICAgb3V0cHV0czogdHhKc29uLm91dHB1dHMubWFwKChvKSA9PiAoeyBhZGRyZXNzOiBvLmFkZHJlc3MsIGFtb3VudDogby52YWx1ZSwgbWVtbzogdHhKc29uLm1lbW8gfSkpLFxuICAgICAgb3V0cHV0QW1vdW50OiB0eEpzb24ub3V0cHV0cy5yZWR1Y2UoKHAsIG4pID0+IHAuYWRkKG5ldyBCTihuLnZhbHVlKSksIG5ldyBCTigwKSkudG9TdHJpbmcoKSxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLCAvLyBhY2NvdW50IGJhc2VkIGRvZXMgbm90IHVzZSBjaGFuZ2Ugb3V0cHV0c1xuICAgICAgY2hhbmdlQW1vdW50OiAnMCcsIC8vIGFjY291bnQgYmFzZSBkb2VzIG5vdCBtYWtlIGNoYW5nZVxuICAgICAgZmVlOiB7IGZlZTogdGhpcy5fdHhGZWUudG9TdHJpbmcoKSB9LFxuICAgICAgdHlwZTogdHhKc29uLnR5cGUsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -1,26 +1,22 @@
1
1
  /// <reference types="bn.js" />
2
- import { AvalancheNetwork, BaseCoin as CoinConfig } from '@bitgo/statics';
2
+ import { BaseCoin as CoinConfig } from '@bitgo/statics';
3
3
  import BigNumber from 'bignumber.js';
4
- import { BaseAddress, BaseKey, BaseTransactionBuilder, TransactionType } from '@bitgo/sdk-core';
4
+ import { BaseAddress, BaseKey, BaseTransactionBuilder, TransactionType, BaseTransaction } from '@bitgo/sdk-core';
5
5
  import { Transaction } from './transaction';
6
6
  import { KeyPair } from './keyPair';
7
- import { BN, Buffer } from 'avalanche';
8
- import { BaseTx } from 'avalanche/dist/apis/platformvm/basetx';
7
+ import { BN } from 'avalanche';
9
8
  import { DecodedUtxoObj } from './iface';
9
+ import { Tx } from 'avalanche/dist/apis/platformvm';
10
10
  export declare abstract class TransactionBuilder extends BaseTransactionBuilder {
11
11
  private _transaction;
12
- protected _network: AvalancheNetwork;
13
- protected _networkID: number;
14
- protected _assetId: Buffer;
15
- protected _blockchainID: Buffer;
16
- protected _memo?: Buffer;
17
- protected _signer: KeyPair;
18
- protected _threshold: number;
19
- protected _locktime: BN;
20
- protected _fromPubKeys: Buffer[];
21
- protected _utxos: DecodedUtxoObj[];
22
- protected _txFee: BN;
23
- private _credentials;
12
+ _signer: KeyPair[];
13
+ protected recoverSigner: boolean;
14
+ /**
15
+ * When using recovery key must be set here
16
+ * TODO: STLX-17317 recovery key signing
17
+ * @param recoverSigner
18
+ */
19
+ recoverMode(recoverSigner?: boolean): this;
24
20
  constructor(_coinConfig: Readonly<CoinConfig>);
25
21
  /**
26
22
  * commented out check until multisig signing is in effect
@@ -43,18 +39,20 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
43
39
  *
44
40
  * @param {Transaction} tx the transaction data
45
41
  */
46
- initBuilder(tx?: BaseTx): this;
42
+ initBuilder(tx: Tx): this;
47
43
  /** @inheritdoc */
48
44
  protected fromImplementation(rawTransaction: string): Transaction;
45
+ get hasSigner(): boolean;
49
46
  /** @inheritdoc */
50
47
  protected buildImplementation(): Promise<Transaction>;
51
48
  /**
52
- * Builds the avaxp transaction
53
- * @return {Transaction} avaxp sdk transaction
49
+ * Builds the avaxp transaction. transaction field is changed.
54
50
  */
55
- protected abstract buildAvaxpTransaction(): BaseTx;
51
+ protected abstract buildAvaxpTransaction(): void;
56
52
  /** @inheritdoc */
57
53
  protected get transaction(): Transaction;
54
+ protected set transaction(transaction: Transaction);
55
+ protected signImplementation({ key }: BaseKey): BaseTransaction;
58
56
  protected abstract get transactionType(): TransactionType;
59
57
  /**
60
58
  * Validates the threshold
@@ -69,8 +67,13 @@ export declare abstract class TransactionBuilder extends BaseTransactionBuilder
69
67
  /** @inheritdoc */
70
68
  validateAddress(address: BaseAddress, addressFormat?: string): void;
71
69
  /** @inheritdoc */
72
- validateKey(key: BaseKey): void;
73
- /** @inheritdoc */
70
+ validateKey({ key }: BaseKey): void;
71
+ /**
72
+ * Check the raw transaction has a valid format in the blockchain context, throw otherwise.
73
+ * It overrides abstract method from BaseTransactionBuilder
74
+ *
75
+ * @param rawTransaction Transaction in any format
76
+ */
74
77
  validateRawTransaction(rawTransaction: string): void;
75
78
  /** @inheritdoc */
76
79
  validateTransaction(transaction?: Transaction): void;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/transactionBuilder.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,SAAS,MAAM,cAAc,CAAC;AACrC,OAAO,EAEL,WAAW,EACX,OAAO,EACP,sBAAsB,EACtB,eAAe,EAEf,eAAe,EAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,EAAE,EAAwB,MAAM,WAAW,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,8BAAsB,kBAAmB,SAAQ,sBAAsB;IACrE,OAAO,CAAC,YAAY,CAAc;IAC3B,OAAO,EAAE,OAAO,EAAE,CAAM;IAC/B,SAAS,CAAC,aAAa,UAAS;IAEhC;;;;OAIG;IACI,WAAW,CAAC,aAAa,UAAO,GAAG,IAAI;gBAKlC,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C;;;;OAIG;IAEH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM9B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMtC,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAMjD,KAAK,CAAC,KAAK,EAAE,cAAc,EAAE,GAAG,IAAI;IAKpC;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI;IAqBzB,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAOjE,IAAI,SAAS,IAAI,OAAO,CAEvB;IACD,kBAAkB;cACF,mBAAmB,IAAI,OAAO,CAAC,WAAW,CAAC;IAS3D;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,qBAAqB,IAAI,IAAI;IAGhD,kBAAkB;IAClB,SAAS,KAAK,WAAW,IAAI,WAAW,CAEvC;IACD,SAAS,KAAK,WAAW,CAAC,WAAW,EAAE,WAAW,EAEjD;IAED,SAAS,CAAC,kBAAkB,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,eAAe;IAK/D,SAAS,CAAC,QAAQ,KAAK,eAAe,IAAI,eAAe,CAAC;IAM1D;;;OAGG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAM1C;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,EAAE,GAAG,IAAI;IAMpC,kBAAkB;IAClB,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI;IAInE,kBAAkB;IAClB,WAAW,CAAC,EAAE,GAAG,EAAE,EAAE,OAAO,GAAG,IAAI;IAMnC;;;;;OAKG;IACH,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAIpD,kBAAkB;IAClB,mBAAmB,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAIpD,kBAAkB;IAClB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAMrC,aAAa,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI;IAO7C,YAAY,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;CAO1C"}