@bitgo/sdk-coin-stx 1.1.0-rc.0
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/.eslintignore +5 -0
- package/.mocharc.yml +8 -0
- package/CHANGELOG.md +11 -0
- package/LICENSE +191 -0
- package/README.md +30 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +30 -0
- package/dist/src/lib/abstractContractBuilder.d.ts +19 -0
- package/dist/src/lib/abstractContractBuilder.d.ts.map +1 -0
- package/dist/src/lib/abstractContractBuilder.js +70 -0
- package/dist/src/lib/constants.d.ts +8 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +19 -0
- package/dist/src/lib/contractBuilder.d.ts +33 -0
- package/dist/src/lib/contractBuilder.d.ts.map +1 -0
- package/dist/src/lib/contractBuilder.js +116 -0
- package/dist/src/lib/iface.d.ts +48 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +3 -0
- package/dist/src/lib/index.d.ts +6 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +33 -0
- package/dist/src/lib/keyPair.d.ts +55 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +140 -0
- package/dist/src/lib/sendmanyBuilder.d.ts +23 -0
- package/dist/src/lib/sendmanyBuilder.d.ts.map +1 -0
- package/dist/src/lib/sendmanyBuilder.js +75 -0
- package/dist/src/lib/transaction.d.ts +49 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +225 -0
- package/dist/src/lib/transactionBuilder.d.ts +86 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +263 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +30 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilderFactory.js +81 -0
- package/dist/src/lib/transferBuilder.d.ts +30 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilder.js +99 -0
- package/dist/src/lib/utils.d.ts +207 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +503 -0
- package/dist/src/stx.d.ts +56 -0
- package/dist/src/stx.d.ts.map +1 -0
- package/dist/src/stx.js +196 -0
- package/dist/src/tstx.d.ts +16 -0
- package/dist/src/tstx.d.ts.map +1 -0
- package/dist/src/tstx.js +24 -0
- package/dist/src/types.d.ts +34 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +3 -0
- package/package.json +62 -0
package/dist/src/stx.js
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Stx = void 0;
|
|
4
|
+
const sdk_core_1 = require("@bitgo/sdk-core");
|
|
5
|
+
const statics_1 = require("@bitgo/statics");
|
|
6
|
+
const _1 = require(".");
|
|
7
|
+
class Stx extends sdk_core_1.BaseCoin {
|
|
8
|
+
constructor(bitgo, staticsCoin) {
|
|
9
|
+
super(bitgo);
|
|
10
|
+
if (!staticsCoin) {
|
|
11
|
+
throw new Error('missing required constructor parameter staticsCoin');
|
|
12
|
+
}
|
|
13
|
+
this._staticsCoin = staticsCoin;
|
|
14
|
+
}
|
|
15
|
+
static createInstance(bitgo, staticsCoin) {
|
|
16
|
+
return new Stx(bitgo, staticsCoin);
|
|
17
|
+
}
|
|
18
|
+
getChain() {
|
|
19
|
+
return this._staticsCoin.name;
|
|
20
|
+
}
|
|
21
|
+
getFamily() {
|
|
22
|
+
return this._staticsCoin.family;
|
|
23
|
+
}
|
|
24
|
+
getFullName() {
|
|
25
|
+
return this._staticsCoin.fullName;
|
|
26
|
+
}
|
|
27
|
+
getBaseFactor() {
|
|
28
|
+
return Math.pow(10, this._staticsCoin.decimalPlaces);
|
|
29
|
+
}
|
|
30
|
+
async verifyTransaction(params) {
|
|
31
|
+
// TODO: Implement when available on the SDK.
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Check if address is valid, then make sure it matches the base address.
|
|
36
|
+
*
|
|
37
|
+
* @param {VerifyAddressOptions} params
|
|
38
|
+
* @param {String} params.address - the address to verify
|
|
39
|
+
* @param {String} params.baseAddress - the base address from the wallet
|
|
40
|
+
*/
|
|
41
|
+
isWalletAddress(params) {
|
|
42
|
+
const { address, keychains } = params;
|
|
43
|
+
if (!keychains || keychains.length !== 3) {
|
|
44
|
+
throw new Error('Invalid keychains');
|
|
45
|
+
}
|
|
46
|
+
const pubs = keychains.map((keychain) => _1.StxLib.Utils.xpubToSTXPubkey(keychain.pub));
|
|
47
|
+
const addressVersion = _1.StxLib.Utils.getAddressVersion(address);
|
|
48
|
+
const baseAddress = _1.StxLib.Utils.getSTXAddressFromPubKeys(pubs, addressVersion).address;
|
|
49
|
+
return _1.StxLib.Utils.isSameBaseAddress(address, baseAddress);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Generate Stacks key pair
|
|
53
|
+
*
|
|
54
|
+
* @param {Buffer} seed - Seed from which the new keypair should be generated, otherwise a random seed is used
|
|
55
|
+
* @returns {Object} object with generated pub and prv
|
|
56
|
+
*/
|
|
57
|
+
generateKeyPair(seed) {
|
|
58
|
+
const keyPair = seed ? new _1.StxLib.KeyPair({ seed }) : new _1.StxLib.KeyPair();
|
|
59
|
+
const keys = keyPair.getExtendedKeys();
|
|
60
|
+
if (!keys.xprv) {
|
|
61
|
+
throw new Error('Missing xprv in key generation.');
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
pub: keys.xpub,
|
|
65
|
+
prv: keys.xprv,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Return boolean indicating whether input is valid public key for the coin
|
|
70
|
+
*
|
|
71
|
+
* @param {string} pub the prv to be checked
|
|
72
|
+
* @returns is it valid?
|
|
73
|
+
*/
|
|
74
|
+
isValidPub(pub) {
|
|
75
|
+
try {
|
|
76
|
+
return _1.StxLib.Utils.isValidPublicKey(pub);
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Return boolean indicating whether input is valid private key for the coin
|
|
84
|
+
*
|
|
85
|
+
* @param {string} prv the prv to be checked
|
|
86
|
+
* @returns is it valid?
|
|
87
|
+
*/
|
|
88
|
+
isValidPrv(prv) {
|
|
89
|
+
try {
|
|
90
|
+
return _1.StxLib.Utils.isValidPrivateKey(prv);
|
|
91
|
+
}
|
|
92
|
+
catch (e) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
isValidAddress(address) {
|
|
97
|
+
try {
|
|
98
|
+
return _1.StxLib.Utils.isValidAddressWithPaymentId(address);
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Signs stacks transaction
|
|
106
|
+
* @param params
|
|
107
|
+
*/
|
|
108
|
+
async signTransaction(params) {
|
|
109
|
+
const factory = new _1.StxLib.TransactionBuilderFactory(statics_1.coins.get(this.getChain()));
|
|
110
|
+
const txBuilder = factory.from(params.txPrebuild.txHex);
|
|
111
|
+
const prvKeys = params.prv instanceof Array ? params.prv : [params.prv];
|
|
112
|
+
prvKeys.forEach((prv) => txBuilder.sign({ key: prv }));
|
|
113
|
+
if (params.pubKeys)
|
|
114
|
+
txBuilder.fromPubKey(params.pubKeys);
|
|
115
|
+
// if (params.numberSignature) txBuilder.numberSignatures(params.numberSignature);
|
|
116
|
+
const transaction = await txBuilder.build();
|
|
117
|
+
if (!transaction) {
|
|
118
|
+
throw new Error('Invalid message passed to signMessage');
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
txHex: transaction.toBroadcastFormat(),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
async parseTransaction(params) {
|
|
125
|
+
return {};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Explain a Stacks transaction from txHex
|
|
129
|
+
* @param params
|
|
130
|
+
*/
|
|
131
|
+
async explainTransaction(params) {
|
|
132
|
+
const txHex = params.txHex || (params.halfSigned && params.halfSigned.txHex);
|
|
133
|
+
if (!txHex || !params.feeInfo) {
|
|
134
|
+
throw new Error('missing explain tx parameters');
|
|
135
|
+
}
|
|
136
|
+
const factory = new _1.StxLib.TransactionBuilderFactory(statics_1.coins.get(this.getChain()));
|
|
137
|
+
const txBuilder = factory.from(txHex);
|
|
138
|
+
if (params.publicKeys !== undefined) {
|
|
139
|
+
txBuilder.fromPubKey(params.publicKeys);
|
|
140
|
+
if (params.publicKeys.length === 1) {
|
|
141
|
+
// definitely a single sig tx
|
|
142
|
+
txBuilder.numberSignatures(1);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const tx = await txBuilder.build();
|
|
146
|
+
const txJson = tx.toJson();
|
|
147
|
+
if (tx.type === sdk_core_1.TransactionType.Send) {
|
|
148
|
+
const outputs = [
|
|
149
|
+
{
|
|
150
|
+
address: txJson.payload.to,
|
|
151
|
+
amount: txJson.payload.amount,
|
|
152
|
+
memo: txJson.payload.memo,
|
|
153
|
+
},
|
|
154
|
+
];
|
|
155
|
+
const displayOrder = ['id', 'outputAmount', 'changeAmount', 'outputs', 'changeOutputs', 'fee', 'memo', 'type'];
|
|
156
|
+
return {
|
|
157
|
+
displayOrder,
|
|
158
|
+
id: txJson.id,
|
|
159
|
+
outputAmount: txJson.payload.amount.toString(),
|
|
160
|
+
changeAmount: '0',
|
|
161
|
+
outputs,
|
|
162
|
+
changeOutputs: [],
|
|
163
|
+
fee: txJson.fee,
|
|
164
|
+
memo: txJson.payload.memo,
|
|
165
|
+
type: tx.type,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
if (tx.type === sdk_core_1.TransactionType.ContractCall) {
|
|
169
|
+
const displayOrder = [
|
|
170
|
+
'id',
|
|
171
|
+
'fee',
|
|
172
|
+
'type',
|
|
173
|
+
'contractAddress',
|
|
174
|
+
'contractName',
|
|
175
|
+
'contractFunction',
|
|
176
|
+
'contractFunctionArgs',
|
|
177
|
+
];
|
|
178
|
+
return {
|
|
179
|
+
displayOrder,
|
|
180
|
+
id: txJson.id,
|
|
181
|
+
changeAmount: '0',
|
|
182
|
+
outputAmount: '',
|
|
183
|
+
outputs: [],
|
|
184
|
+
changeOutputs: [],
|
|
185
|
+
fee: txJson.fee,
|
|
186
|
+
type: tx.type,
|
|
187
|
+
contractAddress: txJson.payload.contractAddress,
|
|
188
|
+
contractName: txJson.payload.contractName,
|
|
189
|
+
contractFunction: txJson.payload.functionName,
|
|
190
|
+
contractFunctionArgs: txJson.payload.functionArgs,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
exports.Stx = Stx;
|
|
196
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw4Q0FTeUI7QUFDekIsNENBQWdGO0FBRWhGLHdCQUEyQjtBQUUzQixNQUFhLEdBQUksU0FBUSxtQkFBUTtJQUcvQixZQUFZLEtBQWdCLEVBQUUsV0FBdUM7UUFDbkUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7U0FDdkU7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQixFQUFFLFdBQXVDO1FBQzdFLE9BQU8sSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBZ0M7UUFDdEQsNkNBQTZDO1FBQzdDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGVBQWUsQ0FBQyxNQUE0QjtRQUMxQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUN0QyxJ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QUFzQjthQUN2QixDQUFDO1lBQ0YsT0FBTztnQkFDTCxZQUFZO2dCQUNaLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRTtnQkFDYixZQUFZLEVBQUUsR0FBRztnQkFDakIsWUFBWSxFQUFFLEVBQUU7Z0JBQ2hCLE9BQU8sRUFBRSxFQUFFO2dCQUNYLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7Z0JBQ2YsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJO2dCQUNiLGVBQWUsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLGVBQWU7Z0JBQy9DLFlBQVksRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVk7Z0JBQ3pDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWTtnQkFDN0Msb0JBQW9CLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZO2FBQ2xELENBQUM7U0FDSDtJQUNILENBQUM7Q0FDRjtBQW5ORCxrQkFtTkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBLZXlQYWlyLFxuICBTaWduZWRUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMsXG4gIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgQ29pbkZhbWlseSwgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5pbXBvcnQgeyBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zLCBTdHhTaWduVHJhbnNhY3Rpb25PcHRpb25zLCBTdHhUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBTdHhMaWIgfSBmcm9tICcuJztcblxuZXhwb3J0IGNsYXNzIFN0eCBleHRlbmRzIEJhc2VDb2luIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0aWNzQ29pbjogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPjtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbyk7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBTdHgoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLm5hbWU7XG4gIH1cblxuICBnZXRGYW1pbHkoKTogQ29pbkZhbWlseSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZhbWlseTtcbiAgfVxuXG4gIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZ1bGxOYW1lO1xuICB9XG5cbiAgZ2V0QmFzZUZhY3RvcigpOiBzdHJpbmcgfCBudW1iZXIge1xuICAgIHJldHVybiBNYXRoLnBvdygxMCwgdGhpcy5fc3RhdGljc0NvaW4uZGVjaW1hbFBsYWNlcyk7XG4gIH1cblxuICBhc3luYyB2ZXJpZnlUcmFuc2FjdGlvbihwYXJhbXM6IFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIFRPRE86IEltcGxlbWVudCB3aGVuIGF2YWlsYWJsZSBvbiB0aGUgU0RLLlxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFkZHJlc3MgaXMgdmFsaWQsIHRoZW4gbWFrZSBzdXJlIGl0IG1hdGNoZXMgdGhlIGJhc2UgYWRkcmVzcy5cbiAgICpcbiAgICogQHBhcmFtIHtWZXJpZnlBZGRyZXNzT3B0aW9uc30gcGFyYW1zXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMuYWRkcmVzcyAtIHRoZSBhZGRyZXNzIHRvIHZlcmlmeVxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmJhc2VBZGRyZXNzIC0gdGhlIGJhc2UgYWRkcmVzcyBmcm9tIHRoZSB3YWxsZXRcbiAgICovXG4gIGlzV2FsbGV0QWRkcmVzcyhwYXJhbXM6IFZlcmlmeUFkZHJlc3NPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyBhZGRyZXNzLCBrZXljaGFpbnMgfSA9IHBhcmFtcztcbiAgICBpZiAoIWtleWNoYWlucyB8fCBrZXljaGFpbnMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5Y2hhaW5zJyk7XG4gICAgfVxuICAgIGNvbnN0IHB1YnMgPSBrZXljaGFpbnMubWFwKChrZXljaGFpbikgPT4gU3R4TGliLlV0aWxzLnhwdWJUb1NUWFB1YmtleShrZXljaGFpbi5wdWIpKTtcbiAgICBjb25zdCBhZGRyZXNzVmVyc2lvbiA9IFN0eExpYi5VdGlscy5nZXRBZGRyZXNzVmVyc2lvbihhZGRyZXNzKTtcbiAgICBjb25zdCBiYXNlQWRkcmVzcyA9IFN0eExpYi5VdGlscy5nZXRTVFhBZGRyZXNzRnJvbVB1YktleXMocHVicywgYWRkcmVzc1ZlcnNpb24pLmFkZHJlc3M7XG4gICAgcmV0dXJuIFN0eExpYi5VdGlscy5pc1NhbWVCYXNlQWRkcmVzcyhhZGRyZXNzLCBiYXNlQWRkcmVzcyk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgU3RhY2tzIGtleSBwYWlyXG4gICAqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBzZWVkIC0gU2VlZCBmcm9tIHdoaWNoIHRoZSBuZXcga2V5cGFpciBzaG91bGQgYmUgZ2VuZXJhdGVkLCBvdGhlcndpc2UgYSByYW5kb20gc2VlZCBpcyB1c2VkXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCB3aXRoIGdlbmVyYXRlZCBwdWIgYW5kIHBydlxuICAgKi9cbiAgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ/OiBCdWZmZXIpOiBLZXlQYWlyIHtcbiAgICBjb25zdCBrZXlQYWlyID0gc2VlZCA/IG5ldyBTdHhMaWIuS2V5UGFpcih7IHNlZWQgfSkgOiBuZXcgU3R4TGliLktleVBhaXIoKTtcbiAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRFeHRlbmRlZEtleXMoKTtcblxuICAgIGlmICgha2V5cy54cHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgeHBydiBpbiBrZXkgZ2VuZXJhdGlvbi4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBrZXlzLnhwdWIsXG4gICAgICBwcnY6IGtleXMueHBydixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwdWJsaWMga2V5IGZvciB0aGUgY29pblxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHViIHRoZSBwcnYgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyBpcyBpdCB2YWxpZD9cbiAgICovXG4gIGlzVmFsaWRQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIFN0eExpYi5VdGlscy5pc1ZhbGlkUHVibGljS2V5KHB1Yik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgaW5wdXQgaXMgdmFsaWQgcHJpdmF0ZSBrZXkgZm9yIHRoZSBjb2luXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcnYgdGhlIHBydiB0byBiZSBjaGVja2VkXG4gICAqIEByZXR1cm5zIGlzIGl0IHZhbGlkP1xuICAgKi9cbiAgaXNWYWxpZFBydihwcnY6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gU3R4TGliLlV0aWxzLmlzVmFsaWRQcml2YXRlS2V5KHBydik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gU3R4TGliLlV0aWxzLmlzVmFsaWRBZGRyZXNzV2l0aFBheW1lbnRJZChhZGRyZXNzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ25zIHN0YWNrcyB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBTdHhTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgU3R4TGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSkpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbShwYXJhbXMudHhQcmVidWlsZC50eEhleCk7XG4gICAgY29uc3QgcHJ2S2V5cyA9IHBhcmFtcy5wcnYgaW5zdGFuY2VvZiBBcnJheSA/IHBhcmFtcy5wcnYgOiBbcGFyYW1zLnBydl07XG4gICAgcHJ2S2V5cy5mb3JFYWNoKChwcnYpID0+IHR4QnVpbGRlci5zaWduKHsga2V5OiBwcnYgfSkpO1xuICAgIGlmIChwYXJhbXMucHViS2V5cykgdHhCdWlsZGVyLmZyb21QdWJLZXkocGFyYW1zLnB1YktleXMpO1xuICAgIC8vIGlmIChwYXJhbXMubnVtYmVyU2lnbmF0dXJlKSB0eEJ1aWxkZXIubnVtYmVyU2lnbmF0dXJlcyhwYXJhbXMubnVtYmVyU2lnbmF0dXJlKTtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgaWYgKCF0cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1lc3NhZ2UgcGFzc2VkIHRvIHNpZ25NZXNzYWdlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR4SGV4OiB0cmFuc2FjdGlvbi50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogRXhwbGFpbiBhIFN0YWNrcyB0cmFuc2FjdGlvbiBmcm9tIHR4SGV4XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIGV4cGxhaW5UcmFuc2FjdGlvbihwYXJhbXM6IEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFN0eFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCB0eEhleCA9IHBhcmFtcy50eEhleCB8fCAocGFyYW1zLmhhbGZTaWduZWQgJiYgcGFyYW1zLmhhbGZTaWduZWQudHhIZXgpO1xuICAgIGlmICghdHhIZXggfHwgIXBhcmFtcy5mZWVJbmZvKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgZXhwbGFpbiB0eCBwYXJhbWV0ZXJzJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBTdHhMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGhpcy5nZXRDaGFpbigpKSk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHR4SGV4KTtcblxuICAgIGlmIChwYXJhbXMucHVibGljS2V5cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0eEJ1aWxkZXIuZnJvbVB1YktleShwYXJhbXMucHVibGljS2V5cyk7XG4gICAgICBpZiAocGFyYW1zLnB1YmxpY0tleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIGRlZmluaXRlbHkgYSBzaW5nbGUgc2lnIHR4XG4gICAgICAgIHR4QnVpbGRlci5udW1iZXJTaWduYXR1cmVzKDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG5cbiAgICBpZiAodHgudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLlNlbmQpIHtcbiAgICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiB0eEpzb24ucGF5bG9hZC50byxcbiAgICAgICAgICBhbW91bnQ6IHR4SnNvbi5wYXlsb2FkLmFtb3VudCxcbiAgICAgICAgICBtZW1vOiB0eEpzb24ucGF5bG9hZC5tZW1vLFxuICAgICAgICB9LFxuICAgICAgXTtcblxuICAgICAgY29uc3QgZGlzcGxheU9yZGVyID0gWydpZCcsICdvdXRwdXRBbW91bnQnLCAnY2hhbmdlQW1vdW50JywgJ291dHB1dHMnLCAnY2hhbmdlT3V0cHV0cycsICdmZWUnLCAnbWVtbycsICd0eXBlJ107XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICAgIGlkOiB0eEpzb24uaWQsXG4gICAgICAgIG91dHB1dEFtb3VudDogdHhKc29uLnBheWxvYWQuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBvdXRwdXRzLFxuICAgICAgICBjaGFuZ2VPdXRwdXRzOiBbXSxcbiAgICAgICAgZmVlOiB0eEpzb24uZmVlLFxuICAgICAgICBtZW1vOiB0eEpzb24ucGF5bG9hZC5tZW1vLFxuICAgICAgICB0eXBlOiB0eC50eXBlLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodHgudHlwZSA9PT0gVHJhbnNhY3Rpb25UeXBlLkNvbnRyYWN0Q2FsbCkge1xuICAgICAgY29uc3QgZGlzcGxheU9yZGVyID0gW1xuICAgICAgICAnaWQnLFxuICAgICAgICAnZmVlJyxcbiAgICAgICAgJ3R5cGUnLFxuICAgICAgICAnY29udHJhY3RBZGRyZXNzJyxcbiAgICAgICAgJ2NvbnRyYWN0TmFtZScsXG4gICAgICAgICdjb250cmFjdEZ1bmN0aW9uJyxcbiAgICAgICAgJ2NvbnRyYWN0RnVuY3Rpb25BcmdzJyxcbiAgICAgIF07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICAgIGlkOiB0eEpzb24uaWQsXG4gICAgICAgIGNoYW5nZUFtb3VudDogJzAnLFxuICAgICAgICBvdXRwdXRBbW91bnQ6ICcnLFxuICAgICAgICBvdXRwdXRzOiBbXSxcbiAgICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICAgIGZlZTogdHhKc29uLmZlZSxcbiAgICAgICAgdHlwZTogdHgudHlwZSxcbiAgICAgICAgY29udHJhY3RBZGRyZXNzOiB0eEpzb24ucGF5bG9hZC5jb250cmFjdEFkZHJlc3MsXG4gICAgICAgIGNvbnRyYWN0TmFtZTogdHhKc29uLnBheWxvYWQuY29udHJhY3ROYW1lLFxuICAgICAgICBjb250cmFjdEZ1bmN0aW9uOiB0eEpzb24ucGF5bG9hZC5mdW5jdGlvbk5hbWUsXG4gICAgICAgIGNvbnRyYWN0RnVuY3Rpb25BcmdzOiB0eEpzb24ucGF5bG9hZC5mdW5jdGlvbkFyZ3MsXG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Testnet Stx
|
|
3
|
+
*
|
|
4
|
+
* @format
|
|
5
|
+
*/
|
|
6
|
+
import { BaseCoin, BitGoBase } from '@bitgo/sdk-core';
|
|
7
|
+
import { BaseCoin as StaticsBaseCoin } from '@bitgo/statics';
|
|
8
|
+
import { Stx } from './stx';
|
|
9
|
+
export declare class Tstx extends Stx {
|
|
10
|
+
protected readonly _staticsCoin: Readonly<StaticsBaseCoin>;
|
|
11
|
+
constructor(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>);
|
|
12
|
+
static createInstance(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>): BaseCoin;
|
|
13
|
+
getChain(): string;
|
|
14
|
+
getFullName(): string;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=tstx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tstx.d.ts","sourceRoot":"","sources":["../../src/tstx.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,qBAAa,IAAK,SAAQ,GAAG;IAC3B,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;gBAE/C,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAUrE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,QAAQ;IAIR,WAAW;CAGZ"}
|
package/dist/src/tstx.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Tstx = void 0;
|
|
4
|
+
const stx_1 = require("./stx");
|
|
5
|
+
class Tstx extends stx_1.Stx {
|
|
6
|
+
constructor(bitgo, staticsCoin) {
|
|
7
|
+
super(bitgo, staticsCoin);
|
|
8
|
+
if (!staticsCoin) {
|
|
9
|
+
throw new Error('missing required constructor parameter staticsCoin');
|
|
10
|
+
}
|
|
11
|
+
this._staticsCoin = staticsCoin;
|
|
12
|
+
}
|
|
13
|
+
static createInstance(bitgo, staticsCoin) {
|
|
14
|
+
return new Tstx(bitgo, staticsCoin);
|
|
15
|
+
}
|
|
16
|
+
getChain() {
|
|
17
|
+
return this._staticsCoin.name;
|
|
18
|
+
}
|
|
19
|
+
getFullName() {
|
|
20
|
+
return this._staticsCoin.fullName;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.Tstx = Tstx;
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHN0eC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90c3R4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLCtCQUE0QjtBQUU1QixNQUFhLElBQUssU0FBUSxTQUFHO0lBRzNCLFlBQVksS0FBZ0IsRUFBRSxXQUF1QztRQUNuRSxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRTFCLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQ3BDLENBQUM7Q0FDRjtBQXhCRCxvQkF3QkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRlc3RuZXQgU3R4XG4gKlxuICogQGZvcm1hdFxuICovXG5pbXBvcnQgeyBCYXNlQ29pbiwgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCB7IFN0eCB9IGZyb20gJy4vc3R4JztcblxuZXhwb3J0IGNsYXNzIFRzdHggZXh0ZW5kcyBTdHgge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3N0YXRpY3NDb2luOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+O1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvLCBzdGF0aWNzQ29pbik7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBUc3R4KGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICBnZXRDaGFpbigpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4ubmFtZTtcbiAgfVxuXG4gIGdldEZ1bGxOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5mdWxsTmFtZTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { SignTransactionOptions, TransactionExplanation, TransactionPrebuild as BaseTransactionPrebuild } from '@bitgo/sdk-core';
|
|
2
|
+
export interface TransactionFee {
|
|
3
|
+
fee: string;
|
|
4
|
+
}
|
|
5
|
+
export interface StxTransactionExplanation extends TransactionExplanation {
|
|
6
|
+
memo?: string;
|
|
7
|
+
type?: number;
|
|
8
|
+
contractAddress?: string;
|
|
9
|
+
contractName?: string;
|
|
10
|
+
contractFunction?: string;
|
|
11
|
+
contractFunctionArgs?: {
|
|
12
|
+
type: string;
|
|
13
|
+
value: string;
|
|
14
|
+
}[];
|
|
15
|
+
}
|
|
16
|
+
export interface ExplainTransactionOptions {
|
|
17
|
+
txHex?: string;
|
|
18
|
+
halfSigned?: {
|
|
19
|
+
txHex: string;
|
|
20
|
+
};
|
|
21
|
+
publicKeys?: string[];
|
|
22
|
+
feeInfo: TransactionFee;
|
|
23
|
+
}
|
|
24
|
+
export interface StxSignTransactionOptions extends SignTransactionOptions {
|
|
25
|
+
txPrebuild: TransactionPrebuild;
|
|
26
|
+
prv: string | string[];
|
|
27
|
+
pubKeys?: string[];
|
|
28
|
+
numberSignature?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface TransactionPrebuild extends BaseTransactionPrebuild {
|
|
31
|
+
txHex: string;
|
|
32
|
+
source: string;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,IAAI,uBAAuB,EAC/C,MAAM,iBAAiB,CAAC;AAOzB,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,yBAA0B,SAAQ,sBAAsB;IACvE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,oBAAoB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1D;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,yBAA0B,SAAQ,sBAAsB;IACvE,UAAU,EAAE,mBAAmB,CAAC;IAChC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAoB,SAAQ,uBAAuB;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIFRyYW5zYWN0aW9uUHJlYnVpbGQgYXMgQmFzZVRyYW5zYWN0aW9uUHJlYnVpbGQsXG59IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmludGVyZmFjZSBTdXBwbGVtZW50R2VuZXJhdGVXYWxsZXRPcHRpb25zIHtcbiAgcm9vdFByaXZhdGVLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25GZWUge1xuICBmZWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdHhUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGV4dGVuZHMgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB7XG4gIG1lbW8/OiBzdHJpbmc7XG4gIHR5cGU/OiBudW1iZXI7XG4gIGNvbnRyYWN0QWRkcmVzcz86IHN0cmluZztcbiAgY29udHJhY3ROYW1lPzogc3RyaW5nO1xuICBjb250cmFjdEZ1bmN0aW9uPzogc3RyaW5nO1xuICBjb250cmFjdEZ1bmN0aW9uQXJncz86IHsgdHlwZTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhIZXg/OiBzdHJpbmc7XG4gIGhhbGZTaWduZWQ/OiB7XG4gICAgdHhIZXg6IHN0cmluZztcbiAgfTtcbiAgcHVibGljS2V5cz86IHN0cmluZ1tdO1xuICBmZWVJbmZvOiBUcmFuc2FjdGlvbkZlZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdHhTaWduVHJhbnNhY3Rpb25PcHRpb25zIGV4dGVuZHMgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ7XG4gIHBydjogc3RyaW5nIHwgc3RyaW5nW107XG4gIHB1YktleXM/OiBzdHJpbmdbXTtcbiAgbnVtYmVyU2lnbmF0dXJlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uUHJlYnVpbGQgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25QcmVidWlsZCB7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIHNvdXJjZTogc3RyaW5nO1xufVxuIl19
|
package/package.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bitgo/sdk-coin-stx",
|
|
3
|
+
"version": "1.1.0-rc.0",
|
|
4
|
+
"description": "BitGo SDK coin library for Stacks",
|
|
5
|
+
"main": "./dist/src/index.js",
|
|
6
|
+
"types": "./dist/src/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "yarn tsc --build --incremental --verbose .",
|
|
9
|
+
"fmt": "prettier --write .",
|
|
10
|
+
"check-fmt": "prettier --check .",
|
|
11
|
+
"clean": "rm -r ./dist",
|
|
12
|
+
"lint": "eslint --quiet .",
|
|
13
|
+
"precommit": "yarn lint-staged",
|
|
14
|
+
"prepare": "npm run build",
|
|
15
|
+
"test": "npm run coverage",
|
|
16
|
+
"coverage": "nyc -- npm run unit-test",
|
|
17
|
+
"unit-test": "mocha"
|
|
18
|
+
},
|
|
19
|
+
"author": "BitGo SDK Team <sdkteam@bitgo.com>",
|
|
20
|
+
"license": "MIT",
|
|
21
|
+
"engines": {
|
|
22
|
+
"node": ">=14 <17"
|
|
23
|
+
},
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "https://github.com/BitGo/BitGoJS.git",
|
|
27
|
+
"directory": "modules/sdk-coin-stx"
|
|
28
|
+
},
|
|
29
|
+
"lint-staged": {
|
|
30
|
+
"*.{js,ts}": [
|
|
31
|
+
"yarn prettier --write",
|
|
32
|
+
"yarn eslint --fix"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public"
|
|
37
|
+
},
|
|
38
|
+
"nyc": {
|
|
39
|
+
"extension": [
|
|
40
|
+
".ts"
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@bitgo/ethereumjs-utils-old": "npm:ethereumjs-util@5.2.0",
|
|
45
|
+
"@bitgo/sdk-core": "^1.1.0-rc.24",
|
|
46
|
+
"@bitgo/statics": "^7.0.0-rc.0",
|
|
47
|
+
"@stacks/network": "^4.3.0",
|
|
48
|
+
"@stacks/transactions": "2.0.1",
|
|
49
|
+
"bignumber.js": "^9.0.0",
|
|
50
|
+
"bip32": "^2.0.6",
|
|
51
|
+
"bitcoinjs-lib": "npm:@bitgo/bitcoinjs-lib@6.1.0-rc.3",
|
|
52
|
+
"bn.js": "^5.2.1",
|
|
53
|
+
"elliptic": "^6.5.2",
|
|
54
|
+
"lodash": "^4.17.15"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@bitgo/sdk-api": "^1.1.0-rc.27",
|
|
58
|
+
"@bitgo/sdk-test": "^1.0.1-rc.13",
|
|
59
|
+
"@types/elliptic": "^6.4.12"
|
|
60
|
+
},
|
|
61
|
+
"gitHead": "38711bb617dec1af06bcc5c43302c4152be97ec9"
|
|
62
|
+
}
|