@bitgo-beta/sdk-coin-tempo 1.0.1-beta.5 → 1.0.1-beta.50
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/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/lib/constants.d.ts +17 -1
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +22 -5
- package/dist/src/lib/index.d.ts +4 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +5 -1
- package/dist/src/lib/keyPair.d.ts +8 -18
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +18 -84
- package/dist/src/lib/tip20Abi.d.ts +98 -0
- package/dist/src/lib/tip20Abi.d.ts.map +1 -0
- package/dist/src/lib/tip20Abi.js +62 -0
- package/dist/src/lib/transaction.d.ts +112 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +164 -0
- package/dist/src/lib/transactionBuilder.d.ts +100 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +204 -0
- package/dist/src/lib/types.d.ts +17 -0
- package/dist/src/lib/types.d.ts.map +1 -0
- package/dist/src/lib/types.js +3 -0
- package/dist/src/lib/utils.d.ts +54 -7
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +122 -16
- package/dist/src/register.d.ts +4 -0
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +26 -1
- package/dist/src/tempo.d.ts +37 -44
- package/dist/src/tempo.d.ts.map +1 -1
- package/dist/src/tempo.js +52 -84
- package/dist/src/tip20Token.d.ts +89 -0
- package/dist/src/tip20Token.d.ts.map +1 -0
- package/dist/src/tip20Token.js +198 -0
- package/dist/test/integration/tip20.d.ts +2 -0
- package/dist/test/integration/tip20.d.ts.map +1 -0
- package/dist/test/integration/tip20.js +115 -0
- package/dist/test/unit/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder.js +252 -0
- package/dist/test/unit/utils.js +6 -5
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -6
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @prettier
|
|
3
|
+
*/
|
|
4
|
+
import { BitGoBase, CoinConstructor, MPCAlgorithm, NamedCoinConstructor } from '@bitgo-beta/sdk-core';
|
|
5
|
+
import { GetSendMethodArgsOptions, SendMethodArgs } from '@bitgo-beta/abstract-eth';
|
|
6
|
+
import { Tempo } from './tempo';
|
|
7
|
+
/**
|
|
8
|
+
* TIP20 Token Configuration Interface
|
|
9
|
+
*/
|
|
10
|
+
export interface Tip20TokenConfig {
|
|
11
|
+
type: string;
|
|
12
|
+
coin: string;
|
|
13
|
+
network: 'Mainnet' | 'Testnet';
|
|
14
|
+
name: string;
|
|
15
|
+
tokenContractAddress: string;
|
|
16
|
+
decimalPlaces: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* TIP20 Token Implementation (Skeleton)
|
|
20
|
+
*
|
|
21
|
+
* This is a minimal skeleton for TIP20 tokens on Tempo blockchain.
|
|
22
|
+
*
|
|
23
|
+
* TODO: All methods will be implemented progressively
|
|
24
|
+
*/
|
|
25
|
+
export declare class Tip20Token extends Tempo {
|
|
26
|
+
readonly tokenConfig: Tip20TokenConfig;
|
|
27
|
+
constructor(bitgo: BitGoBase, tokenConfig: Tip20TokenConfig);
|
|
28
|
+
/**
|
|
29
|
+
* Create a coin constructor for a specific token
|
|
30
|
+
*/
|
|
31
|
+
static createTokenConstructor(config: Tip20TokenConfig): CoinConstructor;
|
|
32
|
+
/**
|
|
33
|
+
* Create token constructors for all TIP20 tokens
|
|
34
|
+
* @param tokenConfigs - Array of token configurations (optional)
|
|
35
|
+
*/
|
|
36
|
+
static createTokenConstructors(tokenConfigs?: Tip20TokenConfig[]): NamedCoinConstructor[];
|
|
37
|
+
/** Get the token type */
|
|
38
|
+
get type(): string;
|
|
39
|
+
/** Get the token name */
|
|
40
|
+
get name(): string;
|
|
41
|
+
/** Get the base coin */
|
|
42
|
+
get coin(): string;
|
|
43
|
+
/** Get the network */
|
|
44
|
+
get network(): 'Mainnet' | 'Testnet';
|
|
45
|
+
/** Get the token contract address */
|
|
46
|
+
get tokenContractAddress(): string;
|
|
47
|
+
/** Get token decimal places */
|
|
48
|
+
get decimalPlaces(): number;
|
|
49
|
+
/** @inheritDoc */
|
|
50
|
+
getChain(): string;
|
|
51
|
+
/** @inheritDoc */
|
|
52
|
+
getFullName(): string;
|
|
53
|
+
/** @inheritDoc */
|
|
54
|
+
getBaseFactor(): number;
|
|
55
|
+
/** @inheritDoc */
|
|
56
|
+
valuelessTransferAllowed(): boolean;
|
|
57
|
+
/** @inheritDoc */
|
|
58
|
+
supportsTss(): boolean;
|
|
59
|
+
/** @inheritDoc */
|
|
60
|
+
getMPCAlgorithm(): MPCAlgorithm;
|
|
61
|
+
/**
|
|
62
|
+
* Verify that the transaction coin/token matches this token
|
|
63
|
+
* @param txPrebuild - Transaction prebuild object
|
|
64
|
+
* @returns true if valid, false otherwise
|
|
65
|
+
*/
|
|
66
|
+
verifyCoin(txPrebuild: {
|
|
67
|
+
coin?: string;
|
|
68
|
+
token?: string;
|
|
69
|
+
}): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Get send method arguments for TIP-20 token transfer with memo
|
|
72
|
+
* @param txInfo - Transaction information including recipient and amount
|
|
73
|
+
* @returns Array of send method arguments for ABI encoding
|
|
74
|
+
*/
|
|
75
|
+
getSendMethodArgs(txInfo: GetSendMethodArgsOptions): SendMethodArgs[];
|
|
76
|
+
/**
|
|
77
|
+
* Get operation object for TIP-20 token transfer (for batch transactions)
|
|
78
|
+
* @param recipient - Recipient information with address, amount, and optional memo
|
|
79
|
+
* @param expireTime - Transaction expiration time
|
|
80
|
+
* @param contractSequenceId - Contract sequence ID
|
|
81
|
+
* @returns Operation array for ABI encoding
|
|
82
|
+
*/
|
|
83
|
+
getOperation(recipient: {
|
|
84
|
+
address: string;
|
|
85
|
+
amount: string;
|
|
86
|
+
memo?: string;
|
|
87
|
+
}, expireTime: number, contractSequenceId: number): (string | Buffer)[][];
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=tip20Token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tip20Token.d.ts","sourceRoot":"","sources":["../../src/tip20Token.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEtG,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAEpF,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,qBAAa,UAAW,SAAQ,KAAK;IACnC,SAAgB,WAAW,EAAE,gBAAgB,CAAC;gBAElC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB;IAO3D;;OAEG;IACH,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,eAAe;IAIxE;;;OAGG;IACH,MAAM,CAAC,uBAAuB,CAAC,YAAY,CAAC,EAAE,gBAAgB,EAAE,GAAG,oBAAoB,EAAE;IAezF,yBAAyB;IACzB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,yBAAyB;IACzB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,wBAAwB;IACxB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,sBAAsB;IACtB,IAAI,OAAO,IAAI,SAAS,GAAG,SAAS,CAEnC;IAED,qCAAqC;IACrC,IAAI,oBAAoB,IAAI,MAAM,CAEjC;IAED,+BAA+B;IAC/B,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,kBAAkB;IAClB,QAAQ,IAAI,MAAM;IAIlB,kBAAkB;IAClB,WAAW,IAAI,MAAM;IAIrB,kBAAkB;IAClB,aAAa,IAAI,MAAM;IAIvB,kBAAkB;IAClB,wBAAwB,IAAI,OAAO;IAInC,kBAAkB;IAClB,WAAW,IAAI,OAAO;IAItB,kBAAkB;IAClB,eAAe,IAAI,YAAY;IAI/B;;;;OAIG;IACH,UAAU,CAAC,UAAU,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO;IAelE;;;;OAIG;IACH,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,cAAc,EAAE;IA+DrE;;;;;;OAMG;IACH,YAAY,CACV,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAC7D,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,MAAM,GACzB,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAAE;CA0BzB"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Tip20Token = void 0;
|
|
4
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
5
|
+
const tempo_1 = require("./tempo");
|
|
6
|
+
const utils_1 = require("./lib/utils");
|
|
7
|
+
/**
|
|
8
|
+
* TIP20 Token Implementation (Skeleton)
|
|
9
|
+
*
|
|
10
|
+
* This is a minimal skeleton for TIP20 tokens on Tempo blockchain.
|
|
11
|
+
*
|
|
12
|
+
* TODO: All methods will be implemented progressively
|
|
13
|
+
*/
|
|
14
|
+
class Tip20Token extends tempo_1.Tempo {
|
|
15
|
+
constructor(bitgo, tokenConfig) {
|
|
16
|
+
const coinName = tokenConfig.network === 'Mainnet' ? 'tempo' : 'ttempo';
|
|
17
|
+
const staticsCoin = statics_1.coins.get(coinName);
|
|
18
|
+
super(bitgo, staticsCoin);
|
|
19
|
+
this.tokenConfig = tokenConfig;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create a coin constructor for a specific token
|
|
23
|
+
*/
|
|
24
|
+
static createTokenConstructor(config) {
|
|
25
|
+
return (bitgo) => new Tip20Token(bitgo, config);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Create token constructors for all TIP20 tokens
|
|
29
|
+
* @param tokenConfigs - Array of token configurations (optional)
|
|
30
|
+
*/
|
|
31
|
+
static createTokenConstructors(tokenConfigs) {
|
|
32
|
+
const configs = tokenConfigs || [];
|
|
33
|
+
const tokensCtors = [];
|
|
34
|
+
for (const token of configs) {
|
|
35
|
+
const tokenConstructor = Tip20Token.createTokenConstructor(token);
|
|
36
|
+
// Register by token type
|
|
37
|
+
tokensCtors.push({ name: token.type, coinConstructor: tokenConstructor });
|
|
38
|
+
// Also register by contract address for lookups
|
|
39
|
+
tokensCtors.push({ name: token.tokenContractAddress, coinConstructor: tokenConstructor });
|
|
40
|
+
}
|
|
41
|
+
return tokensCtors;
|
|
42
|
+
}
|
|
43
|
+
/** Get the token type */
|
|
44
|
+
get type() {
|
|
45
|
+
return this.tokenConfig.type;
|
|
46
|
+
}
|
|
47
|
+
/** Get the token name */
|
|
48
|
+
get name() {
|
|
49
|
+
return this.tokenConfig.name;
|
|
50
|
+
}
|
|
51
|
+
/** Get the base coin */
|
|
52
|
+
get coin() {
|
|
53
|
+
return this.tokenConfig.coin;
|
|
54
|
+
}
|
|
55
|
+
/** Get the network */
|
|
56
|
+
get network() {
|
|
57
|
+
return this.tokenConfig.network;
|
|
58
|
+
}
|
|
59
|
+
/** Get the token contract address */
|
|
60
|
+
get tokenContractAddress() {
|
|
61
|
+
return this.tokenConfig.tokenContractAddress;
|
|
62
|
+
}
|
|
63
|
+
/** Get token decimal places */
|
|
64
|
+
get decimalPlaces() {
|
|
65
|
+
return this.tokenConfig.decimalPlaces;
|
|
66
|
+
}
|
|
67
|
+
/** @inheritDoc */
|
|
68
|
+
getChain() {
|
|
69
|
+
return this.tokenConfig.type;
|
|
70
|
+
}
|
|
71
|
+
/** @inheritDoc */
|
|
72
|
+
getFullName() {
|
|
73
|
+
return 'TIP20 Token';
|
|
74
|
+
}
|
|
75
|
+
/** @inheritDoc */
|
|
76
|
+
getBaseFactor() {
|
|
77
|
+
return Math.pow(10, this.tokenConfig.decimalPlaces);
|
|
78
|
+
}
|
|
79
|
+
/** @inheritDoc */
|
|
80
|
+
valuelessTransferAllowed() {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
/** @inheritDoc */
|
|
84
|
+
supportsTss() {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
/** @inheritDoc */
|
|
88
|
+
getMPCAlgorithm() {
|
|
89
|
+
return 'ecdsa';
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Verify that the transaction coin/token matches this token
|
|
93
|
+
* @param txPrebuild - Transaction prebuild object
|
|
94
|
+
* @returns true if valid, false otherwise
|
|
95
|
+
*/
|
|
96
|
+
verifyCoin(txPrebuild) {
|
|
97
|
+
if (!txPrebuild) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
// Check if the coin or token matches this token's configuration
|
|
101
|
+
const coinMatch = txPrebuild.coin === this.tokenConfig.coin || txPrebuild.coin === this.tokenConfig.type;
|
|
102
|
+
const tokenMatch = !txPrebuild.token ||
|
|
103
|
+
txPrebuild.token === this.tokenConfig.tokenContractAddress ||
|
|
104
|
+
txPrebuild.token === this.tokenConfig.type;
|
|
105
|
+
return coinMatch && tokenMatch;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get send method arguments for TIP-20 token transfer with memo
|
|
109
|
+
* @param txInfo - Transaction information including recipient and amount
|
|
110
|
+
* @returns Array of send method arguments for ABI encoding
|
|
111
|
+
*/
|
|
112
|
+
getSendMethodArgs(txInfo) {
|
|
113
|
+
const { recipient } = txInfo;
|
|
114
|
+
if (!recipient) {
|
|
115
|
+
throw new Error('Recipient is required for token transfer');
|
|
116
|
+
}
|
|
117
|
+
if (!(0, utils_1.isValidAddress)(recipient.address)) {
|
|
118
|
+
throw new Error(`Invalid recipient address: ${recipient.address}`);
|
|
119
|
+
}
|
|
120
|
+
if (!(0, utils_1.isValidTip20Amount)(recipient.amount)) {
|
|
121
|
+
throw new Error(`Invalid amount: ${recipient.amount}`);
|
|
122
|
+
}
|
|
123
|
+
const memo = recipient.memo;
|
|
124
|
+
if (memo && Buffer.byteLength(memo, 'utf-8') > 32) {
|
|
125
|
+
throw new Error('Memo too long: maximum 32 bytes');
|
|
126
|
+
}
|
|
127
|
+
const amountInUnits = (0, utils_1.amountToTip20Units)(recipient.amount);
|
|
128
|
+
const data = (0, utils_1.encodeTip20TransferWithMemo)(recipient.address, amountInUnits, memo);
|
|
129
|
+
return [
|
|
130
|
+
{
|
|
131
|
+
name: 'toAddress',
|
|
132
|
+
type: 'address',
|
|
133
|
+
value: recipient.address,
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: 'value',
|
|
137
|
+
type: 'uint',
|
|
138
|
+
value: recipient.amount,
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
name: 'tokenContractAddress',
|
|
142
|
+
type: 'address',
|
|
143
|
+
value: this.tokenConfig.tokenContractAddress,
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
name: 'data',
|
|
147
|
+
type: 'bytes',
|
|
148
|
+
value: Buffer.from(data.slice(2), 'hex'),
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
name: 'expireTime',
|
|
152
|
+
type: 'uint',
|
|
153
|
+
value: txInfo.expireTime,
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
name: 'sequenceId',
|
|
157
|
+
type: 'uint',
|
|
158
|
+
value: txInfo.contractSequenceId,
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
name: 'signature',
|
|
162
|
+
type: 'bytes',
|
|
163
|
+
value: Buffer.from(txInfo.signature.replace('0x', ''), 'hex'),
|
|
164
|
+
},
|
|
165
|
+
];
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Get operation object for TIP-20 token transfer (for batch transactions)
|
|
169
|
+
* @param recipient - Recipient information with address, amount, and optional memo
|
|
170
|
+
* @param expireTime - Transaction expiration time
|
|
171
|
+
* @param contractSequenceId - Contract sequence ID
|
|
172
|
+
* @returns Operation array for ABI encoding
|
|
173
|
+
*/
|
|
174
|
+
getOperation(recipient, expireTime, contractSequenceId) {
|
|
175
|
+
if (!(0, utils_1.isValidAddress)(recipient.address)) {
|
|
176
|
+
throw new Error(`Invalid recipient address: ${recipient.address}`);
|
|
177
|
+
}
|
|
178
|
+
if (!(0, utils_1.isValidTip20Amount)(recipient.amount)) {
|
|
179
|
+
throw new Error(`Invalid amount: ${recipient.amount}`);
|
|
180
|
+
}
|
|
181
|
+
// Validate memo byte length (handles multi-byte UTF-8 characters)
|
|
182
|
+
if (recipient.memo !== undefined && recipient.memo !== null && recipient.memo !== '') {
|
|
183
|
+
const memoByteLength = new TextEncoder().encode(recipient.memo).length;
|
|
184
|
+
if (memoByteLength > 32) {
|
|
185
|
+
throw new Error(`Memo too long: ${memoByteLength} bytes. Maximum 32 bytes.`);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
const amountInUnits = (0, utils_1.amountToTip20Units)(recipient.amount);
|
|
189
|
+
const data = (0, utils_1.encodeTip20TransferWithMemo)(recipient.address, amountInUnits, recipient.memo);
|
|
190
|
+
// Return format compatible with parent class for ABI encoding
|
|
191
|
+
return [
|
|
192
|
+
['address', 'bytes'],
|
|
193
|
+
[this.tokenConfig.tokenContractAddress, Buffer.from(data.slice(2), 'hex')],
|
|
194
|
+
];
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
exports.Tip20Token = Tip20Token;
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwMjBUb2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90aXAyMFRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLGlEQUE0QztBQUc1QyxtQ0FBZ0M7QUFDaEMsdUNBQWtIO0FBY2xIOzs7Ozs7R0FNRztBQUNILE1BQWEsVUFBVyxTQUFRLGFBQUs7SUFHbkMsWUFBWSxLQUFnQixFQUFFLFdBQTZCO1FBQ3pELE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUN4RSxNQUFNLFdBQVcsR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLHNCQUFzQixDQUFDLE1BQXdCO1FBQ3BELE9BQU8sQ0FBQyxLQUFnQixFQUFFLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxZQUFpQztRQUM5RCxNQUFNLE9BQU8sR0FBRyxZQUFZLElBQUksRUFBRSxDQUFDO1FBQ25DLE1BQU0sV0FBVyxHQUEyQixFQUFFLENBQUM7UUFFL0MsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM1QixNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRSx5QkFBeUI7WUFDekIsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0Is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QUMsQ0FBQztZQUMvRSxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLElBQUEsMEJBQWtCLEVBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNELE1BQU0sSUFBSSxHQUFHLElBQUEsbUNBQTJCLEVBQUMsU0FBUyxDQUFDLE9BQWtCLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0Ryw4REFBOEQ7UUFDOUQsT0FBTztZQUNMLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQztZQUNwQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzNFLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUE3TkQsZ0NBNk5DIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgQml0R29CYXNlLCBDb2luQ29uc3RydWN0b3IsIE1QQ0FsZ29yaXRobSwgTmFtZWRDb2luQ29uc3RydWN0b3IgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgR2V0U2VuZE1ldGhvZEFyZ3NPcHRpb25zLCBTZW5kTWV0aG9kQXJncyB9IGZyb20gJ0BiaXRnby1iZXRhL2Fic3RyYWN0LWV0aCc7XG5pbXBvcnQgeyBBZGRyZXNzIH0gZnJvbSAnLi9saWIvdHlwZXMnO1xuaW1wb3J0IHsgVGVtcG8gfSBmcm9tICcuL3RlbXBvJztcbmltcG9ydCB7IGVuY29kZVRpcDIwVHJhbnNmZXJXaXRoTWVtbywgYW1vdW50VG9UaXAyMFVuaXRzLCBpc1ZhbGlkQWRkcmVzcywgaXNWYWxpZFRpcDIwQW1vdW50IH0gZnJvbSAnLi9saWIvdXRpbHMnO1xuXG4vKipcbiAqIFRJUDIwIFRva2VuIENvbmZpZ3VyYXRpb24gSW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGlwMjBUb2tlbkNvbmZpZyB7XG4gIHR5cGU6IHN0cmluZzsgLy8gVG9rZW4gaWRlbnRpZmllciAoZS5nLiwgJ3RlbXBvOnVzZGMnKVxuICBjb2luOiBzdHJpbmc7IC8vIEJhc2UgY29pbiAoZS5nLiwgJ3RlbXBvJyBvciAndHRlbXBvJylcbiAgbmV0d29yazogJ01haW5uZXQnIHwgJ1Rlc3RuZXQnO1xuICBuYW1lOiBzdHJpbmc7IC8vIFRva2VuIGZ1bGwgbmFtZVxuICB0b2tlbkNvbnRyYWN0QWRkcmVzczogc3RyaW5nOyAvLyBTbWFydCBjb250cmFjdCBhZGRyZXNzICgweC4uLilcbiAgZGVjaW1hbFBsYWNlczogbnVtYmVyOyAvLyBUb2tlbiBkZWNpbWFsIHBsYWNlc1xufVxuXG4vKipcbiAqIFRJUDIwIFRva2VuIEltcGxlbWVudGF0aW9uIChTa2VsZXRvbilcbiAqXG4gKiBUaGlzIGlzIGEgbWluaW1hbCBza2VsZXRvbiBmb3IgVElQMjAgdG9rZW5zIG9uIFRlbXBvIGJsb2NrY2hhaW4uXG4gKlxuICogVE9ETzogQWxsIG1ldGhvZHMgd2lsbCBiZSBpbXBsZW1lbnRlZCBwcm9ncmVzc2l2ZWx5XG4gKi9cbmV4cG9ydCBjbGFzcyBUaXAyMFRva2VuIGV4dGVuZHMgVGVtcG8ge1xuICBwdWJsaWMgcmVhZG9ubHkgdG9rZW5Db25maWc6IFRpcDIwVG9rZW5Db25maWc7XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgdG9rZW5Db25maWc6IFRpcDIwVG9rZW5Db25maWcpIHtcbiAgICBjb25zdCBjb2luTmFtZSA9IHRva2VuQ29uZmlnLm5ldHdvcmsgPT09ICdNYWlubmV0JyA/ICd0ZW1wbycgOiAndHRlbXBvJztcbiAgICBjb25zdCBzdGF0aWNzQ29pbiA9IGNvaW5zLmdldChjb2luTmFtZSk7XG4gICAgc3VwZXIoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgICB0aGlzLnRva2VuQ29uZmlnID0gdG9rZW5Db25maWc7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY29pbiBjb25zdHJ1Y3RvciBmb3IgYSBzcGVjaWZpYyB0b2tlblxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVRva2VuQ29uc3RydWN0b3IoY29uZmlnOiBUaXAyMFRva2VuQ29uZmlnKTogQ29pbkNvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gKGJpdGdvOiBCaXRHb0Jhc2UpID0+IG5ldyBUaXAyMFRva2VuKGJpdGdvLCBjb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0b2tlbiBjb25zdHJ1Y3RvcnMgZm9yIGFsbCBUSVAyMCB0b2tlbnNcbiAgICogQHBhcmFtIHRva2VuQ29uZmlncyAtIEFycmF5IG9mIHRva2VuIGNvbmZpZ3VyYXRpb25zIChvcHRpb25hbClcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVUb2tlbkNvbnN0cnVjdG9ycyh0b2tlbkNvbmZpZ3M/OiBUaXAyMFRva2VuQ29uZmlnW10pOiBOYW1lZENvaW5Db25zdHJ1Y3RvcltdIHtcbiAgICBjb25zdCBjb25maWdzID0gdG9rZW5Db25maWdzIHx8IFtdO1xuICAgIGNvbnN0IHRva2Vuc0N0b3JzOiBOYW1lZENvaW5Db25zdHJ1Y3RvcltdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIGNvbmZpZ3MpIHtcbiAgICAgIGNvbnN0IHRva2VuQ29uc3RydWN0b3IgPSBUaXAyMFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW4pO1xuICAgICAgLy8gUmVnaXN0ZXIgYnkgdG9rZW4gdHlwZVxuICAgICAgdG9rZW5zQ3RvcnMucHVzaCh7IG5hbWU6IHRva2VuLnR5cGUsIGNvaW5Db25zdHJ1Y3RvcjogdG9rZW5Db25zdHJ1Y3RvciB9KTtcbiAgICAgIC8vIEFsc28gcmVnaXN0ZXIgYnkgY29udHJhY3QgYWRkcmVzcyBmb3IgbG9va3Vwc1xuICAgICAgdG9rZW5zQ3RvcnMucHVzaCh7IG5hbWU6IHRva2VuLnRva2VuQ29udHJhY3RBZGRyZXNzLCBjb2luQ29uc3RydWN0b3I6IHRva2VuQ29uc3RydWN0b3IgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRva2Vuc0N0b3JzO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgdG9rZW4gdHlwZSAqL1xuICBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLnR5cGU7XG4gIH1cblxuICAvKiogR2V0IHRoZSB0b2tlbiBuYW1lICovXG4gIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcubmFtZTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIGJhc2UgY29pbiAqL1xuICBnZXQgY29pbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLmNvaW47XG4gIH1cblxuICAvKiogR2V0IHRoZSBuZXR3b3JrICovXG4gIGdldCBuZXR3b3JrKCk6ICdNYWlubmV0JyB8ICdUZXN0bmV0JyB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcubmV0d29yaztcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIHRva2VuIGNvbnRyYWN0IGFkZHJlc3MgKi9cbiAgZ2V0IHRva2VuQ29udHJhY3RBZGRyZXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcudG9rZW5Db250cmFjdEFkZHJlc3M7XG4gIH1cblxuICAvKiogR2V0IHRva2VuIGRlY2ltYWwgcGxhY2VzICovXG4gIGdldCBkZWNpbWFsUGxhY2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcuZGVjaW1hbFBsYWNlcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLnR5cGU7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ1RJUDIwIFRva2VuJztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucG93KDEwLCB0aGlzLnRva2VuQ29uZmlnLmRlY2ltYWxQbGFjZXMpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgc3VwcG9ydHNUc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgZ2V0TVBDQWxnb3JpdGhtKCk6IE1QQ0FsZ29yaXRobSB7XG4gICAgcmV0dXJuICdlY2RzYSc7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoYXQgdGhlIHRyYW5zYWN0aW9uIGNvaW4vdG9rZW4gbWF0Y2hlcyB0aGlzIHRva2VuXG4gICAqIEBwYXJhbSB0eFByZWJ1aWxkIC0gVHJhbnNhY3Rpb24gcHJlYnVpbGQgb2JqZWN0XG4gICAqIEByZXR1cm5zIHRydWUgaWYgdmFsaWQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgdmVyaWZ5Q29pbih0eFByZWJ1aWxkOiB7IGNvaW4/OiBzdHJpbmc7IHRva2VuPzogc3RyaW5nIH0pOiBib29sZWFuIHtcbiAgICBpZiAoIXR4UHJlYnVpbGQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgY29pbiBvciB0b2tlbiBtYXRjaGVzIHRoaXMgdG9rZW4ncyBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgY29pbk1hdGNoID0gdHhQcmVidWlsZC5jb2luID09PSB0aGlzLnRva2VuQ29uZmlnLmNvaW4gfHwgdHhQcmVidWlsZC5jb2luID09PSB0aGlzLnRva2VuQ29uZmlnLnR5cGU7XG4gICAgY29uc3QgdG9rZW5NYXRjaCA9XG4gICAgICAhdHhQcmVidWlsZC50b2tlbiB8fFxuICAgICAgdHhQcmVidWlsZC50b2tlbiA9PT0gdGhpcy50b2tlbkNvbmZpZy50b2tlbkNvbnRyYWN0QWRkcmVzcyB8fFxuICAgICAgdHhQcmVidWlsZC50b2tlbiA9PT0gdGhpcy50b2tlbkNvbmZpZy50eXBlO1xuXG4gICAgcmV0dXJuIGNvaW5NYXRjaCAmJiB0b2tlbk1hdGNoO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzZW5kIG1ldGhvZCBhcmd1bWVudHMgZm9yIFRJUC0yMCB0b2tlbiB0cmFuc2ZlciB3aXRoIG1lbW9cbiAgICogQHBhcmFtIHR4SW5mbyAtIFRyYW5zYWN0aW9uIGluZm9ybWF0aW9uIGluY2x1ZGluZyByZWNpcGllbnQgYW5kIGFtb3VudFxuICAgKiBAcmV0dXJucyBBcnJheSBvZiBzZW5kIG1ldGhvZCBhcmd1bWVudHMgZm9yIEFCSSBlbmNvZGluZ1xuICAgKi9cbiAgZ2V0U2VuZE1ldGhvZEFyZ3ModHhJbmZvOiBHZXRTZW5kTWV0aG9kQXJnc09wdGlvbnMpOiBTZW5kTWV0aG9kQXJnc1tdIHtcbiAgICBjb25zdCB7IHJlY2lwaWVudCB9ID0gdHhJbmZvO1xuXG4gICAgaWYgKCFyZWNpcGllbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVjaXBpZW50IGlzIHJlcXVpcmVkIGZvciB0b2tlbiB0cmFuc2ZlcicpO1xuICAgIH1cblxuICAgIGlmICghaXNWYWxpZEFkZHJlc3MocmVjaXBpZW50LmFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcmVjaXBpZW50IGFkZHJlc3M6ICR7cmVjaXBpZW50LmFkZHJlc3N9YCk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1ZhbGlkVGlwMjBBbW91bnQocmVjaXBpZW50LmFtb3VudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBhbW91bnQ6ICR7cmVjaXBpZW50LmFtb3VudH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZW1vID0gKHJlY2lwaWVudCBhcyB7IG1lbW8/OiBzdHJpbmcgfSkubWVtbztcblxuICAgIGlmIChtZW1vICYmIEJ1ZmZlci5ieXRlTGVuZ3RoKG1lbW8sICd1dGYtOCcpID4gMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWVtbyB0b28gbG9uZzogbWF4aW11bSAzMiBieXRlcycpO1xuICAgIH1cblxuICAgIGNvbnN0IGFtb3VudEluVW5pdHMgPSBhbW91bnRUb1RpcDIwVW5pdHMocmVjaXBpZW50LmFtb3VudCk7XG4gICAgY29uc3QgZGF0YSA9IGVuY29kZVRpcDIwVHJhbnNmZXJXaXRoTWVtbyhyZWNpcGllbnQuYWRkcmVzcyBhcyBBZGRyZXNzLCBhbW91bnRJblVuaXRzLCBtZW1vKTtcblxuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd0b0FkZHJlc3MnLFxuICAgICAgICB0eXBlOiAnYWRkcmVzcycsXG4gICAgICAgIHZhbHVlOiByZWNpcGllbnQuYWRkcmVzcyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd2YWx1ZScsXG4gICAgICAgIHR5cGU6ICd1aW50JyxcbiAgICAgICAgdmFsdWU6IHJlY2lwaWVudC5hbW91bnQsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAndG9rZW5Db250cmFjdEFkZHJlc3MnLFxuICAgICAgICB0eXBlOiAnYWRkcmVzcycsXG4gICAgICAgIHZhbHVlOiB0aGlzLnRva2VuQ29uZmlnLnRva2VuQ29udHJhY3RBZGRyZXNzLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2RhdGEnLFxuICAgICAgICB0eXBlOiAnYnl0ZXMnLFxuICAgICAgICB2YWx1ZTogQnVmZmVyLmZyb20oZGF0YS5zbGljZSgyKSwgJ2hleCcpLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2V4cGlyZVRpbWUnLFxuICAgICAgICB0eXBlOiAndWludCcsXG4gICAgICAgIHZhbHVlOiB0eEluZm8uZXhwaXJlVGltZSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzZXF1ZW5jZUlkJyxcbiAgICAgICAgdHlwZTogJ3VpbnQnLFxuICAgICAgICB2YWx1ZTogdHhJbmZvLmNvbnRyYWN0U2VxdWVuY2VJZCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzaWduYXR1cmUnLFxuICAgICAgICB0eXBlOiAnYnl0ZXMnLFxuICAgICAgICB2YWx1ZTogQnVmZmVyLmZyb20odHhJbmZvLnNpZ25hdHVyZS5yZXBsYWNlKCcweCcsICcnKSwgJ2hleCcpLFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvcGVyYXRpb24gb2JqZWN0IGZvciBUSVAtMjAgdG9rZW4gdHJhbnNmZXIgKGZvciBiYXRjaCB0cmFuc2FjdGlvbnMpXG4gICAqIEBwYXJhbSByZWNpcGllbnQgLSBSZWNpcGllbnQgaW5mb3JtYXRpb24gd2l0aCBhZGRyZXNzLCBhbW91bnQsIGFuZCBvcHRpb25hbCBtZW1vXG4gICAqIEBwYXJhbSBleHBpcmVUaW1lIC0gVHJhbnNhY3Rpb24gZXhwaXJhdGlvbiB0aW1lXG4gICAqIEBwYXJhbSBjb250cmFjdFNlcXVlbmNlSWQgLSBDb250cmFjdCBzZXF1ZW5jZSBJRFxuICAgKiBAcmV0dXJucyBPcGVyYXRpb24gYXJyYXkgZm9yIEFCSSBlbmNvZGluZ1xuICAgKi9cbiAgZ2V0T3BlcmF0aW9uKFxuICAgIHJlY2lwaWVudDogeyBhZGRyZXNzOiBzdHJpbmc7IGFtb3VudDogc3RyaW5nOyBtZW1vPzogc3RyaW5nIH0sXG4gICAgZXhwaXJlVGltZTogbnVtYmVyLFxuICAgIGNvbnRyYWN0U2VxdWVuY2VJZDogbnVtYmVyXG4gICk6IChzdHJpbmcgfCBCdWZmZXIpW11bXSB7XG4gICAgaWYgKCFpc1ZhbGlkQWRkcmVzcyhyZWNpcGllbnQuYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByZWNpcGllbnQgYWRkcmVzczogJHtyZWNpcGllbnQuYWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzVmFsaWRUaXAyMEFtb3VudChyZWNpcGllbnQuYW1vdW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFtb3VudDogJHtyZWNpcGllbnQuYW1vdW50fWApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIG1lbW8gYnl0ZSBsZW5ndGggKGhhbmRsZXMgbXVsdGktYnl0ZSBVVEYtOCBjaGFyYWN0ZXJzKVxuICAgIGlmIChyZWNpcGllbnQubWVtbyAhPT0gdW5kZWZpbmVkICYmIHJlY2lwaWVudC5tZW1vICE9PSBudWxsICYmIHJlY2lwaWVudC5tZW1vICE9PSAnJykge1xuICAgICAgY29uc3QgbWVtb0J5dGVMZW5ndGggPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUocmVjaXBpZW50Lm1lbW8pLmxlbmd0aDtcbiAgICAgIGlmIChtZW1vQnl0ZUxlbmd0aCA+IDMyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTWVtbyB0b28gbG9uZzogJHttZW1vQnl0ZUxlbmd0aH0gYnl0ZXMuIE1heGltdW0gMzIgYnl0ZXMuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYW1vdW50SW5Vbml0cyA9IGFtb3VudFRvVGlwMjBVbml0cyhyZWNpcGllbnQuYW1vdW50KTtcbiAgICBjb25zdCBkYXRhID0gZW5jb2RlVGlwMjBUcmFuc2ZlcldpdGhNZW1vKHJlY2lwaWVudC5hZGRyZXNzIGFzIEFkZHJlc3MsIGFtb3VudEluVW5pdHMsIHJlY2lwaWVudC5tZW1vKTtcblxuICAgIC8vIFJldHVybiBmb3JtYXQgY29tcGF0aWJsZSB3aXRoIHBhcmVudCBjbGFzcyBmb3IgQUJJIGVuY29kaW5nXG4gICAgcmV0dXJuIFtcbiAgICAgIFsnYWRkcmVzcycsICdieXRlcyddLFxuICAgICAgW3RoaXMudG9rZW5Db25maWcudG9rZW5Db250cmFjdEFkZHJlc3MsIEJ1ZmZlci5mcm9tKGRhdGEuc2xpY2UoMiksICdoZXgnKV0sXG4gICAgXTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tip20.d.ts","sourceRoot":"","sources":["../../../test/integration/tip20.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const mocha_1 = require("mocha");
|
|
4
|
+
const transactionBuilder_1 = require("../../src/lib/transactionBuilder");
|
|
5
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
6
|
+
const mockCoinConfig = statics_1.coins.get('ttempo');
|
|
7
|
+
(0, mocha_1.describe)('TIP-20 Integration Tests', () => {
|
|
8
|
+
const ALPHA_USD_TOKEN = '0x...';
|
|
9
|
+
const BETA_USD_TOKEN = '0x...';
|
|
10
|
+
const THETA_USD_TOKEN = '0x...';
|
|
11
|
+
const RECEIVER_ADDRESS = '0x...';
|
|
12
|
+
mocha_1.describe.skip('Single Transfer', () => {
|
|
13
|
+
(0, mocha_1.it)('should build single TIP-20 transfer without memo', async () => {
|
|
14
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
15
|
+
builder.addOperation({
|
|
16
|
+
token: ALPHA_USD_TOKEN,
|
|
17
|
+
to: RECEIVER_ADDRESS,
|
|
18
|
+
amount: '1.0',
|
|
19
|
+
});
|
|
20
|
+
builder.feeToken(ALPHA_USD_TOKEN);
|
|
21
|
+
// TODO: const tx = await builder.build();
|
|
22
|
+
});
|
|
23
|
+
(0, mocha_1.it)('should build single TIP-20 transfer with memo', async () => {
|
|
24
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
25
|
+
builder.addOperation({
|
|
26
|
+
token: ALPHA_USD_TOKEN,
|
|
27
|
+
to: RECEIVER_ADDRESS,
|
|
28
|
+
amount: '1.0',
|
|
29
|
+
memo: '12345',
|
|
30
|
+
});
|
|
31
|
+
builder.feeToken(ALPHA_USD_TOKEN);
|
|
32
|
+
// TODO: const tx = await builder.build();
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
mocha_1.describe.skip('Batch Transfer', () => {
|
|
36
|
+
(0, mocha_1.it)('should build batch transfer with multiple memos', async () => {
|
|
37
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
38
|
+
builder
|
|
39
|
+
.addOperation({
|
|
40
|
+
token: ALPHA_USD_TOKEN,
|
|
41
|
+
to: RECEIVER_ADDRESS,
|
|
42
|
+
amount: '0.5',
|
|
43
|
+
memo: '1001',
|
|
44
|
+
})
|
|
45
|
+
.addOperation({
|
|
46
|
+
token: ALPHA_USD_TOKEN,
|
|
47
|
+
to: RECEIVER_ADDRESS,
|
|
48
|
+
amount: '0.3',
|
|
49
|
+
memo: '1002',
|
|
50
|
+
})
|
|
51
|
+
.addOperation({
|
|
52
|
+
token: ALPHA_USD_TOKEN,
|
|
53
|
+
to: RECEIVER_ADDRESS,
|
|
54
|
+
amount: '0.2',
|
|
55
|
+
memo: '1003',
|
|
56
|
+
});
|
|
57
|
+
builder.feeToken(ALPHA_USD_TOKEN);
|
|
58
|
+
// TODO: const tx = await builder.build();
|
|
59
|
+
});
|
|
60
|
+
(0, mocha_1.it)('should build multi-token batch transfer', async () => {
|
|
61
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
62
|
+
builder
|
|
63
|
+
.addOperation({
|
|
64
|
+
token: ALPHA_USD_TOKEN,
|
|
65
|
+
to: RECEIVER_ADDRESS,
|
|
66
|
+
amount: '1.5',
|
|
67
|
+
memo: '2001',
|
|
68
|
+
})
|
|
69
|
+
.addOperation({
|
|
70
|
+
token: BETA_USD_TOKEN,
|
|
71
|
+
to: RECEIVER_ADDRESS,
|
|
72
|
+
amount: '2.0',
|
|
73
|
+
memo: '2002',
|
|
74
|
+
})
|
|
75
|
+
.addOperation({
|
|
76
|
+
token: THETA_USD_TOKEN,
|
|
77
|
+
to: RECEIVER_ADDRESS,
|
|
78
|
+
amount: '0.75',
|
|
79
|
+
memo: '2003',
|
|
80
|
+
});
|
|
81
|
+
builder.feeToken(BETA_USD_TOKEN);
|
|
82
|
+
// TODO: const tx = await builder.build();
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
mocha_1.describe.skip('Transaction Signing', () => {
|
|
86
|
+
(0, mocha_1.it)('should sign and serialize transaction', async () => {
|
|
87
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
88
|
+
builder.addOperation({
|
|
89
|
+
token: ALPHA_USD_TOKEN,
|
|
90
|
+
to: RECEIVER_ADDRESS,
|
|
91
|
+
amount: '1.0',
|
|
92
|
+
memo: '9999',
|
|
93
|
+
});
|
|
94
|
+
builder.feeToken(ALPHA_USD_TOKEN);
|
|
95
|
+
// TODO: Implement signing with ethers.js Wallet
|
|
96
|
+
// TODO: const tx = await builder.build();
|
|
97
|
+
// TODO: tx.setSignature(signature);
|
|
98
|
+
// TODO: const serialized = await tx.toBroadcastFormat();
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
mocha_1.describe.skip('Fee Token Selection', () => {
|
|
102
|
+
(0, mocha_1.it)('should pay fees with different token than transfer', async () => {
|
|
103
|
+
const builder = new transactionBuilder_1.Tip20TransactionBuilder(mockCoinConfig);
|
|
104
|
+
builder.addOperation({
|
|
105
|
+
token: ALPHA_USD_TOKEN,
|
|
106
|
+
to: RECEIVER_ADDRESS,
|
|
107
|
+
amount: '1.0',
|
|
108
|
+
memo: '5555',
|
|
109
|
+
});
|
|
110
|
+
builder.feeToken(BETA_USD_TOKEN);
|
|
111
|
+
// TODO: const tx = await builder.build();
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwMjAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L2ludGVncmF0aW9uL3RpcDIwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUNBQXFDO0FBQ3JDLHlFQUEyRTtBQUUzRSxpREFBNEM7QUFFNUMsTUFBTSxjQUFjLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUUzQyxJQUFBLGdCQUFRLEVBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO0lBQ3hDLE1BQU0sZUFBZSxHQUFHLE9BQWtCLENBQUM7SUFDM0MsTUFBTSxjQUFjLEdBQUcsT0FBa0IsQ0FBQztJQUMxQyxNQUFNLGVBQWUsR0FBRyxPQUFrQixDQUFDO0lBQzNDLE1BQU0sZ0JBQWdCLEdBQUcsT0FBa0IsQ0FBQztJQUU1QyxnQkFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUU7UUFDcEMsSUFBQSxVQUFFLEVBQUMsa0RBQWtELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDaEUsTUFBTSxPQUFPLEdBQUcsSUFBSSw0Q0FBdUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUM1RCxPQUFPLENBQUMsWUFBWSxDQUFDO2dCQUNuQixLQUFLLEVBQUUsZUFBZTtnQkFDdEIsRUFBRSxFQUFFLGdCQUFnQjtnQkFDcEIsTUFBTSxFQUFFLEtBQUs7YUFDZCxDQUFDLENBQUM7WUFDSCxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ2xDLDBDQUEwQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUEsVUFBRSxFQUFDLCtDQUErQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzdELE1BQU0sT0FBTyxHQUFHLElBQUksNENBQXVCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDNUQsT0FBTyxDQUFDLFlBQVksQ0FBQztnQkFDbkIsS0FBSyxFQUFFLGVBQWU7Z0JBQ3RCLEVBQUUsRUFBRSxnQkFBZ0I7Z0JBQ3BC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QU8sR0FBRyxJQUFJLDRDQUF1QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzVELE9BQU8sQ0FBQyxZQUFZLENBQUM7Z0JBQ25CLEtBQUssRUFBRSxlQUFlO2dCQUN0QixFQUFFLEVBQUUsZ0JBQWdCO2dCQUNwQixNQUFNLEVBQUUsS0FBSztnQkFDYixJQUFJLEVBQUUsTUFBTTthQUNiLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakMsMENBQTBDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGRlc2NyaWJlLCBpdCB9IGZyb20gJ21vY2hhJztcbmltcG9ydCB7IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgQWRkcmVzcyB9IGZyb20gJy4uLy4uL3NyYy9saWIvdHlwZXMnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcblxuY29uc3QgbW9ja0NvaW5Db25maWcgPSBjb2lucy5nZXQoJ3R0ZW1wbycpO1xuXG5kZXNjcmliZSgnVElQLTIwIEludGVncmF0aW9uIFRlc3RzJywgKCkgPT4ge1xuICBjb25zdCBBTFBIQV9VU0RfVE9LRU4gPSAnMHguLi4nIGFzIEFkZHJlc3M7XG4gIGNvbnN0IEJFVEFfVVNEX1RPS0VOID0gJzB4Li4uJyBhcyBBZGRyZXNzO1xuICBjb25zdCBUSEVUQV9VU0RfVE9LRU4gPSAnMHguLi4nIGFzIEFkZHJlc3M7XG4gIGNvbnN0IFJFQ0VJVkVSX0FERFJFU1MgPSAnMHguLi4nIGFzIEFkZHJlc3M7XG5cbiAgZGVzY3JpYmUuc2tpcCgnU2luZ2xlIFRyYW5zZmVyJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgc2luZ2xlIFRJUC0yMCB0cmFuc2ZlciB3aXRob3V0IG1lbW8nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXIuYWRkT3BlcmF0aW9uKHtcbiAgICAgICAgdG9rZW46IEFMUEhBX1VTRF9UT0tFTixcbiAgICAgICAgdG86IFJFQ0VJVkVSX0FERFJFU1MsXG4gICAgICAgIGFtb3VudDogJzEuMCcsXG4gICAgICB9KTtcbiAgICAgIGJ1aWxkZXIuZmVlVG9rZW4oQUxQSEFfVVNEX1RPS0VOKTtcbiAgICAgIC8vIFRPRE86IGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBzaW5nbGUgVElQLTIwIHRyYW5zZmVyIHdpdGggbWVtbycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlci5hZGRPcGVyYXRpb24oe1xuICAgICAgICB0b2tlbjogQUxQSEFfVVNEX1RPS0VOLFxuICAgICAgICB0bzogUkVDRUlWRVJfQUREUkVTUyxcbiAgICAgICAgYW1vdW50OiAnMS4wJyxcbiAgICAgICAgbWVtbzogJzEyMzQ1JyxcbiAgICAgIH0pO1xuICAgICAgYnVpbGRlci5mZWVUb2tlbihBTFBIQV9VU0RfVE9LRU4pO1xuICAgICAgLy8gVE9ETzogY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlLnNraXAoJ0JhdGNoIFRyYW5zZmVyJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYnVpbGQgYmF0Y2ggdHJhbnNmZXIgd2l0aCBtdWx0aXBsZSBtZW1vcycsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHtcbiAgICAgICAgICB0b2tlbjogQUxQSEFfVVNEX1RPS0VOLFxuICAgICAgICAgIHRvOiBSRUNFSVZFUl9BRERSRVNTLFxuICAgICAgICAgIGFtb3VudDogJzAuNScsXG4gICAgICAgICAgbWVtbzogJzEwMDEnLFxuICAgICAgICB9KVxuICAgICAgICAuYWRkT3BlcmF0aW9uKHtcbiAgICAgICAgICB0b2tlbjogQUxQSEFfVVNEX1RPS0VOLFxuICAgICAgICAgIHRvOiBSRUNFSVZFUl9BRERSRVNTLFxuICAgICAgICAgIGFtb3VudDogJzAuMycsXG4gICAgICAgICAgbWVtbzogJzEwMDInLFxuICAgICAgICB9KVxuICAgICAgICAuYWRkT3BlcmF0aW9uKHtcbiAgICAgICAgICB0b2tlbjogQUxQSEFfVVNEX1RPS0VOLFxuICAgICAgICAgIHRvOiBSRUNFSVZFUl9BRERSRVNTLFxuICAgICAgICAgIGFtb3VudDogJzAuMicsXG4gICAgICAgICAgbWVtbzogJzEwMDMnLFxuICAgICAgICB9KTtcbiAgICAgIGJ1aWxkZXIuZmVlVG9rZW4oQUxQSEFfVVNEX1RPS0VOKTtcbiAgICAgIC8vIFRPRE86IGNvbnN0IHR4ID0gYXdhaXQgYnVpbGRlci5idWlsZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBidWlsZCBtdWx0aS10b2tlbiBiYXRjaCB0cmFuc2ZlcicsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIobW9ja0NvaW5Db25maWcpO1xuICAgICAgYnVpbGRlclxuICAgICAgICAuYWRkT3BlcmF0aW9uKHtcbiAgICAgICAgICB0b2tlbjogQUxQSEFfVVNEX1RPS0VOLFxuICAgICAgICAgIHRvOiBSRUNFSVZFUl9BRERSRVNTLFxuICAgICAgICAgIGFtb3VudDogJzEuNScsXG4gICAgICAgICAgbWVtbzogJzIwMDEnLFxuICAgICAgICB9KVxuICAgICAgICAuYWRkT3BlcmF0aW9uKHtcbiAgICAgICAgICB0b2tlbjogQkVUQV9VU0RfVE9LRU4sXG4gICAgICAgICAgdG86IFJFQ0VJVkVSX0FERFJFU1MsXG4gICAgICAgICAgYW1vdW50OiAnMi4wJyxcbiAgICAgICAgICBtZW1vOiAnMjAwMicsXG4gICAgICAgIH0pXG4gICAgICAgIC5hZGRPcGVyYXRpb24oe1xuICAgICAgICAgIHRva2VuOiBUSEVUQV9VU0RfVE9LRU4sXG4gICAgICAgICAgdG86IFJFQ0VJVkVSX0FERFJFU1MsXG4gICAgICAgICAgYW1vdW50OiAnMC43NScsXG4gICAgICAgICAgbWVtbzogJzIwMDMnLFxuICAgICAgICB9KTtcbiAgICAgIGJ1aWxkZXIuZmVlVG9rZW4oQkVUQV9VU0RfVE9LRU4pO1xuICAgICAgLy8gVE9ETzogY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlLnNraXAoJ1RyYW5zYWN0aW9uIFNpZ25pbmcnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzaWduIGFuZCBzZXJpYWxpemUgdHJhbnNhY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBidWlsZGVyID0gbmV3IFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyKG1vY2tDb2luQ29uZmlnKTtcbiAgICAgIGJ1aWxkZXIuYWRkT3BlcmF0aW9uKHtcbiAgICAgICAgdG9rZW46IEFMUEhBX1VTRF9UT0tFTixcbiAgICAgICAgdG86IFJFQ0VJVkVSX0FERFJFU1MsXG4gICAgICAgIGFtb3VudDogJzEuMCcsXG4gICAgICAgIG1lbW86ICc5OTk5JyxcbiAgICAgIH0pO1xuICAgICAgYnVpbGRlci5mZWVUb2tlbihBTFBIQV9VU0RfVE9LRU4pO1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IHNpZ25pbmcgd2l0aCBldGhlcnMuanMgV2FsbGV0XG4gICAgICAvLyBUT0RPOiBjb25zdCB0eCA9IGF3YWl0IGJ1aWxkZXIuYnVpbGQoKTtcbiAgICAgIC8vIFRPRE86IHR4LnNldFNpZ25hdHVyZShzaWduYXR1cmUpO1xuICAgICAgLy8gVE9ETzogY29uc3Qgc2VyaWFsaXplZCA9IGF3YWl0IHR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlLnNraXAoJ0ZlZSBUb2tlbiBTZWxlY3Rpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBwYXkgZmVlcyB3aXRoIGRpZmZlcmVudCB0b2tlbiB0aGFuIHRyYW5zZmVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihtb2NrQ29pbkNvbmZpZyk7XG4gICAgICBidWlsZGVyLmFkZE9wZXJhdGlvbih7XG4gICAgICAgIHRva2VuOiBBTFBIQV9VU0RfVE9LRU4sXG4gICAgICAgIHRvOiBSRUNFSVZFUl9BRERSRVNTLFxuICAgICAgICBhbW91bnQ6ICcxLjAnLFxuICAgICAgICBtZW1vOiAnNTU1NScsXG4gICAgICB9KTtcbiAgICAgIGJ1aWxkZXIuZmVlVG9rZW4oQkVUQV9VU0RfVE9LRU4pO1xuICAgICAgLy8gVE9ETzogY29uc3QgdHggPSBhd2FpdCBidWlsZGVyLmJ1aWxkKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionBuilder.d.ts","sourceRoot":"","sources":["../../../test/unit/transactionBuilder.ts"],"names":[],"mappings":""}
|