@bitgo-beta/sdk-coin-stx 1.1.1-beta.232 → 1.1.1-beta.2321

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 (108) hide show
  1. package/dist/src/index.d.ts +2 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +25 -9
  4. package/dist/src/lib/abstractContractBuilder.js +4 -4
  5. package/dist/src/lib/btcAddressUtils.d.ts +30 -0
  6. package/dist/src/lib/btcAddressUtils.d.ts.map +1 -0
  7. package/dist/src/lib/btcAddressUtils.js +134 -0
  8. package/dist/src/lib/constants.d.ts +16 -1
  9. package/dist/src/lib/constants.d.ts.map +1 -1
  10. package/dist/src/lib/constants.js +30 -3
  11. package/dist/src/lib/contractBuilder.d.ts.map +1 -1
  12. package/dist/src/lib/contractBuilder.js +44 -12
  13. package/dist/src/lib/fungibleTokenTransferBuilder.d.ts +62 -0
  14. package/dist/src/lib/fungibleTokenTransferBuilder.d.ts.map +1 -0
  15. package/dist/src/lib/fungibleTokenTransferBuilder.js +131 -0
  16. package/dist/src/lib/iface.d.ts +61 -0
  17. package/dist/src/lib/iface.d.ts.map +1 -1
  18. package/dist/src/lib/iface.js +1 -1
  19. package/dist/src/lib/index.d.ts +5 -0
  20. package/dist/src/lib/index.d.ts.map +1 -1
  21. package/dist/src/lib/index.js +28 -9
  22. package/dist/src/lib/keyPair.js +18 -19
  23. package/dist/src/lib/network.d.ts +16 -0
  24. package/dist/src/lib/network.d.ts.map +1 -0
  25. package/dist/src/lib/network.js +29 -0
  26. package/dist/src/lib/pox5Builder.d.ts +78 -0
  27. package/dist/src/lib/pox5Builder.d.ts.map +1 -0
  28. package/dist/src/lib/pox5Builder.js +148 -0
  29. package/dist/src/lib/sbtcWithdrawBuilder.d.ts +38 -0
  30. package/dist/src/lib/sbtcWithdrawBuilder.d.ts.map +1 -0
  31. package/dist/src/lib/sbtcWithdrawBuilder.js +150 -0
  32. package/dist/src/lib/sendmanyBuilder.js +12 -12
  33. package/dist/src/lib/transaction.d.ts.map +1 -1
  34. package/dist/src/lib/transaction.js +31 -15
  35. package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
  36. package/dist/src/lib/transactionBuilder.js +16 -17
  37. package/dist/src/lib/transactionBuilderFactory.d.ts +6 -0
  38. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
  39. package/dist/src/lib/transactionBuilderFactory.js +23 -2
  40. package/dist/src/lib/transferBuilder.js +7 -7
  41. package/dist/src/lib/utils.d.ts +45 -3
  42. package/dist/src/lib/utils.d.ts.map +1 -1
  43. package/dist/src/lib/utils.js +199 -64
  44. package/dist/src/register.d.ts.map +1 -1
  45. package/dist/src/register.js +7 -1
  46. package/dist/src/sip10Token.d.ts +22 -0
  47. package/dist/src/sip10Token.d.ts.map +1 -0
  48. package/dist/src/sip10Token.js +130 -0
  49. package/dist/src/stx.d.ts +154 -2
  50. package/dist/src/stx.d.ts.map +1 -1
  51. package/dist/src/stx.js +489 -11
  52. package/dist/src/tstx.js +1 -1
  53. package/dist/src/tstxsignet.d.ts +20 -0
  54. package/dist/src/tstxsignet.d.ts.map +1 -0
  55. package/dist/src/tstxsignet.js +36 -0
  56. package/dist/test/fixtures.d.ts +119 -0
  57. package/dist/test/fixtures.d.ts.map +1 -0
  58. package/dist/test/fixtures.js +147 -0
  59. package/dist/test/unit/btcAddressUtils.d.ts +2 -0
  60. package/dist/test/unit/btcAddressUtils.d.ts.map +1 -0
  61. package/dist/test/unit/btcAddressUtils.js +82 -0
  62. package/dist/test/unit/keyPair.d.ts +2 -0
  63. package/dist/test/unit/keyPair.d.ts.map +1 -0
  64. package/dist/test/unit/keyPair.js +144 -0
  65. package/dist/test/unit/network.d.ts +2 -0
  66. package/dist/test/unit/network.d.ts.map +1 -0
  67. package/dist/test/unit/network.js +50 -0
  68. package/dist/test/unit/resources.d.ts +97 -0
  69. package/dist/test/unit/resources.d.ts.map +1 -0
  70. package/dist/test/unit/resources.js +144 -0
  71. package/dist/test/unit/sip10Token.d.ts +2 -0
  72. package/dist/test/unit/sip10Token.d.ts.map +1 -0
  73. package/dist/test/unit/sip10Token.js +374 -0
  74. package/dist/test/unit/stx.d.ts +2 -0
  75. package/dist/test/unit/stx.d.ts.map +1 -0
  76. package/dist/test/unit/stx.js +624 -0
  77. package/dist/test/unit/transaction.d.ts +2 -0
  78. package/dist/test/unit/transaction.d.ts.map +1 -0
  79. package/dist/test/unit/transaction.js +83 -0
  80. package/dist/test/unit/transactionBuilder/contractBuilder.d.ts +2 -0
  81. package/dist/test/unit/transactionBuilder/contractBuilder.d.ts.map +1 -0
  82. package/dist/test/unit/transactionBuilder/contractBuilder.js +463 -0
  83. package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.d.ts +2 -0
  84. package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.d.ts.map +1 -0
  85. package/dist/test/unit/transactionBuilder/fungibleTokenTransferBuilder.js +191 -0
  86. package/dist/test/unit/transactionBuilder/pox5Builder.d.ts +2 -0
  87. package/dist/test/unit/transactionBuilder/pox5Builder.d.ts.map +1 -0
  88. package/dist/test/unit/transactionBuilder/pox5Builder.js +418 -0
  89. package/dist/test/unit/transactionBuilder/sbtcWithdrawBuilder.d.ts +2 -0
  90. package/dist/test/unit/transactionBuilder/sbtcWithdrawBuilder.d.ts.map +1 -0
  91. package/dist/test/unit/transactionBuilder/sbtcWithdrawBuilder.js +306 -0
  92. package/dist/test/unit/transactionBuilder/sendmanyBuilder.d.ts +2 -0
  93. package/dist/test/unit/transactionBuilder/sendmanyBuilder.d.ts.map +1 -0
  94. package/dist/test/unit/transactionBuilder/sendmanyBuilder.js +140 -0
  95. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts +2 -0
  96. package/dist/test/unit/transactionBuilder/transferBuilder.d.ts.map +1 -0
  97. package/dist/test/unit/transactionBuilder/transferBuilder.js +347 -0
  98. package/dist/test/unit/tstxsignet.d.ts +2 -0
  99. package/dist/test/unit/tstxsignet.d.ts.map +1 -0
  100. package/dist/test/unit/tstxsignet.js +60 -0
  101. package/dist/test/unit/util.d.ts +2 -0
  102. package/dist/test/unit/util.d.ts.map +1 -0
  103. package/dist/test/unit/util.js +340 -0
  104. package/dist/tsconfig.tsbuildinfo +1 -0
  105. package/package.json +16 -12
  106. package/.eslintignore +0 -5
  107. package/.mocharc.yml +0 -8
  108. package/CHANGELOG.md +0 -127
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAIjD,eAAO,MAAM,QAAQ,QAAS,SAAS,KAAG,IAGzC,CAAC"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAMjD,eAAO,MAAM,QAAQ,QAAS,SAAS,KAAG,IAOzC,CAAC"}
@@ -3,9 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.register = void 0;
4
4
  const stx_1 = require("./stx");
5
5
  const tstx_1 = require("./tstx");
6
+ const tstxsignet_1 = require("./tstxsignet");
7
+ const sip10Token_1 = require("./sip10Token");
6
8
  const register = (sdk) => {
7
9
  sdk.register('stx', stx_1.Stx.createInstance);
8
10
  sdk.register('tstx', tstx_1.Tstx.createInstance);
11
+ sdk.register('tstxsignet', tstxsignet_1.Tstxsignet.createInstance);
12
+ sip10Token_1.Sip10Token.createTokenConstructors().forEach(({ name, coinConstructor }) => {
13
+ sdk.register(name, coinConstructor);
14
+ });
9
15
  };
10
16
  exports.register = register;
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0JBQTRCO0FBQzVCLGlDQUE4QjtBQUV2QixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQWMsRUFBUSxFQUFFO0lBQy9DLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFNBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN4QyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxXQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDO0FBSFcsUUFBQSxRQUFRLFlBR25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgU3R4IH0gZnJvbSAnLi9zdHgnO1xuaW1wb3J0IHsgVHN0eCB9IGZyb20gJy4vdHN0eCc7XG5cbmV4cG9ydCBjb25zdCByZWdpc3RlciA9IChzZGs6IEJpdEdvQmFzZSk6IHZvaWQgPT4ge1xuICBzZGsucmVnaXN0ZXIoJ3N0eCcsIFN0eC5jcmVhdGVJbnN0YW5jZSk7XG4gIHNkay5yZWdpc3RlcigndHN0eCcsIFRzdHguY3JlYXRlSW5zdGFuY2UpO1xufTtcbiJdfQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsK0JBQTRCO0FBQzVCLGlDQUE4QjtBQUM5Qiw2Q0FBMEM7QUFDMUMsNkNBQTBDO0FBRW5DLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBYyxFQUFRLEVBQUU7SUFDL0MsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsU0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFdBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSx1QkFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3RELHVCQUFVLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFO1FBQ3pFLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBUFcsUUFBQSxRQUFRLFlBT25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgU3R4IH0gZnJvbSAnLi9zdHgnO1xuaW1wb3J0IHsgVHN0eCB9IGZyb20gJy4vdHN0eCc7XG5pbXBvcnQgeyBUc3R4c2lnbmV0IH0gZnJvbSAnLi90c3R4c2lnbmV0JztcbmltcG9ydCB7IFNpcDEwVG9rZW4gfSBmcm9tICcuL3NpcDEwVG9rZW4nO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXIgPSAoc2RrOiBCaXRHb0Jhc2UpOiB2b2lkID0+IHtcbiAgc2RrLnJlZ2lzdGVyKCdzdHgnLCBTdHguY3JlYXRlSW5zdGFuY2UpO1xuICBzZGsucmVnaXN0ZXIoJ3RzdHgnLCBUc3R4LmNyZWF0ZUluc3RhbmNlKTtcbiAgc2RrLnJlZ2lzdGVyKCd0c3R4c2lnbmV0JywgVHN0eHNpZ25ldC5jcmVhdGVJbnN0YW5jZSk7XG4gIFNpcDEwVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoKS5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgc2RrLnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gIH0pO1xufTtcbiJdfQ==
@@ -0,0 +1,22 @@
1
+ import { BitGoBase, CoinConstructor, NamedCoinConstructor, VerifyTransactionOptions } from '@bitgo-beta/sdk-core';
2
+ import { BaseCoin as StaticsBaseCoin, Sip10TokenConfig } from '@bitgo-beta/statics';
3
+ import { Stx } from './stx';
4
+ import { TransactionBuilder } from './lib/transactionBuilder';
5
+ export declare class Sip10Token extends Stx {
6
+ readonly tokenConfig: Sip10TokenConfig;
7
+ constructor(bitgo: BitGoBase, tokenConfig: Sip10TokenConfig);
8
+ static createTokenConstructor(config: Sip10TokenConfig): CoinConstructor;
9
+ static createTokenConstructors(tokenConfigs?: Sip10TokenConfig[]): NamedCoinConstructor[];
10
+ get name(): string;
11
+ get coin(): string;
12
+ get network(): string;
13
+ get assetId(): string;
14
+ get decimalPlaces(): number;
15
+ getChain(): string;
16
+ getBaseChain(): string;
17
+ getFullName(): string;
18
+ getBaseFactor(): number;
19
+ getTransaction(coinConfig: Readonly<StaticsBaseCoin>): TransactionBuilder;
20
+ verifyTransaction(params: VerifyTransactionOptions): Promise<boolean>;
21
+ }
22
+ //# sourceMappingURL=sip10Token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sip10Token.d.ts","sourceRoot":"","sources":["../../src/sip10Token.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAClH,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAS,gBAAgB,EAAU,MAAM,qBAAqB,CAAC;AAEnG,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAE5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,qBAAa,UAAW,SAAQ,GAAG;IACjC,SAAgB,WAAW,EAAE,gBAAgB,CAAC;gBAElC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,gBAAgB;IAQ3D,MAAM,CAAC,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,eAAe;IAIxE,MAAM,CAAC,uBAAuB,CAC5B,YAAY,GAAE,gBAAgB,EAAiE,GAC9F,oBAAoB,EAAE;IASzB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,QAAQ,IAAI,MAAM;IAIlB,YAAY,IAAI,MAAM;IAItB,WAAW,IAAI,MAAM;IAIrB,aAAa,IAAI,MAAM;IAIvB,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,kBAAkB;IAInE,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;CAmE5E"}
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Sip10Token = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
9
+ const statics_1 = require("@bitgo-beta/statics");
10
+ const stx_1 = require("./stx");
11
+ const lib_1 = require("./lib");
12
+ const utils_1 = require("./lib/utils");
13
+ class Sip10Token extends stx_1.Stx {
14
+ constructor(bitgo, tokenConfig) {
15
+ // tokenConfig.coin is derived by statics from the token's network, so it stays correct for
16
+ // deployments beyond the stock mainnet/testnet pair (e.g. tstxsignet, chain ID 1280).
17
+ const staticsCoin = statics_1.coins.get(tokenConfig.coin);
18
+ super(bitgo, staticsCoin);
19
+ this.tokenConfig = tokenConfig;
20
+ }
21
+ static createTokenConstructor(config) {
22
+ return (bitgo) => new Sip10Token(bitgo, config);
23
+ }
24
+ static createTokenConstructors(tokenConfigs = [...statics_1.tokens.bitcoin.stx.tokens, ...statics_1.tokens.testnet.stx.tokens]) {
25
+ const tokensCtors = [];
26
+ for (const token of tokenConfigs) {
27
+ const tokenConstructor = Sip10Token.createTokenConstructor(token);
28
+ tokensCtors.push({ name: token.type, coinConstructor: tokenConstructor });
29
+ }
30
+ return tokensCtors;
31
+ }
32
+ get name() {
33
+ return this.tokenConfig.name;
34
+ }
35
+ get coin() {
36
+ return this.tokenConfig.coin;
37
+ }
38
+ get network() {
39
+ return this.tokenConfig.network;
40
+ }
41
+ get assetId() {
42
+ return this.tokenConfig.assetId;
43
+ }
44
+ get decimalPlaces() {
45
+ return this.tokenConfig.decimalPlaces;
46
+ }
47
+ getChain() {
48
+ return this.tokenConfig.type;
49
+ }
50
+ getBaseChain() {
51
+ return this.coin;
52
+ }
53
+ getFullName() {
54
+ return 'Sip10 Token';
55
+ }
56
+ getBaseFactor() {
57
+ return Math.pow(10, this.tokenConfig.decimalPlaces);
58
+ }
59
+ getTransaction(coinConfig) {
60
+ return new lib_1.TransactionBuilderFactory(coinConfig).getFungibleTokenTransferBuilder();
61
+ }
62
+ async verifyTransaction(params) {
63
+ const { txPrebuild: txPrebuild, txParams: txParams } = params;
64
+ const { memo } = txParams;
65
+ if (Array.isArray(txParams.recipients) && txParams.recipients.length > 1) {
66
+ throw new Error(`${this.getChain()} doesn't support sending to more than 1 destination address within a single transaction. Try again, using only a single recipient.`);
67
+ }
68
+ const rawTx = txPrebuild.txHex;
69
+ if (!rawTx) {
70
+ throw new Error('missing required tx prebuild property txHex');
71
+ }
72
+ const coinConfig = statics_1.coins.get(this.getChain());
73
+ const transaction = this.getTransaction(coinConfig);
74
+ transaction.from(rawTx);
75
+ const explainedTx = await this.explainTransaction({ txHex: rawTx, feeInfo: { fee: '' } });
76
+ if (txParams.recipients !== undefined && explainedTx) {
77
+ const filteredRecipients = txParams.recipients?.map((recipient) => {
78
+ const addressDetails = (0, utils_1.getMemoIdAndBaseAddressFromAddress)(recipient.address);
79
+ const recipientData = {
80
+ address: addressDetails.address,
81
+ amount: BigInt(recipient.amount),
82
+ };
83
+ if (recipient.tokenName) {
84
+ recipientData['tokenName'] = recipient.tokenName;
85
+ }
86
+ return recipientData;
87
+ });
88
+ const filteredOutputs = explainedTx.outputs.map((output) => {
89
+ const recipientData = {
90
+ address: output.address,
91
+ amount: BigInt(output.amount),
92
+ };
93
+ if (output.tokenName) {
94
+ recipientData['tokenName'] = output.tokenName;
95
+ }
96
+ return recipientData;
97
+ });
98
+ if (!lodash_1.default.isEqual(filteredOutputs, filteredRecipients)) {
99
+ throw new Error('Tx outputs does not match with expected txParams recipients');
100
+ }
101
+ // compare memo
102
+ let memoInput = '';
103
+ let memoOutput = '';
104
+ if (memo && memo.value) {
105
+ memoInput = memo.value;
106
+ }
107
+ else if (txParams.recipients.length) {
108
+ const addressDetails = (0, utils_1.getMemoIdAndBaseAddressFromAddress)(txParams.recipients[0].address);
109
+ memoInput = addressDetails.memoId ? addressDetails.memoId : '';
110
+ }
111
+ if (explainedTx.memo) {
112
+ memoOutput = explainedTx.memo;
113
+ }
114
+ if (!lodash_1.default.isEqual(memoInput, memoOutput)) {
115
+ throw new Error('Tx memo does not match with expected txParams recipient memo');
116
+ }
117
+ // compare send amount
118
+ let totalAmount = new bignumber_js_1.default(0);
119
+ for (const recipients of txParams.recipients) {
120
+ totalAmount = totalAmount.plus(recipients.amount);
121
+ }
122
+ if (!totalAmount.isEqualTo(explainedTx.outputAmount)) {
123
+ throw new Error('Tx total amount does not match with expected total amount field');
124
+ }
125
+ }
126
+ return true;
127
+ }
128
+ }
129
+ exports.Sip10Token = Sip10Token;
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lwMTBUb2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaXAxMFRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUF1QjtBQUN2QixnRUFBcUM7QUFHckMsaURBQW1HO0FBRW5HLCtCQUE0QjtBQUM1QiwrQkFBa0Q7QUFFbEQsdUNBQWlFO0FBRWpFLE1BQWEsVUFBVyxTQUFRLFNBQUc7SUFHakMsWUFBWSxLQUFnQixFQUFFLFdBQTZCO1FBQ3pELDJGQUEyRjtRQUMzRixzRkFBc0Y7UUFDdEYsTUFBTSxXQUFXLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUNqQyxDQUFDO0lBRUQsTUFBTSxDQUFDLHNCQUFzQixDQUFDLE1BQXdCO1FBQ3BELE9BQU8sQ0FBQyxLQUFnQixFQUFFLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELE1BQU0sQ0FBQyx1QkFBdUIsQ0FDNUIsZUFBbUMsQ0FBQyxHQUFHLGdCQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxnQkFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBRS9GLE1BQU0sV0FBVyxHQUEyQixFQUFFLENBQUM7UUFDL0MsS0FBSyxNQUFNLEtBQUssSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQyxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLENB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QUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pFLENBQUM7WUFDRCxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDckIsVUFBVSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDaEMsQ0FBQztZQUNELElBQUksQ0FBQyxnQkFBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO1lBQ2xGLENBQUM7WUFDRCxzQkFBc0I7WUFDdEIsSUFBSSxXQUFXLEdBQUcsSUFBSSxzQkFBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25DLEtBQUssTUFBTSxVQUFVLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUM3QyxXQUFXLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLGlFQUFpRSxDQUFDLENBQUM7WUFDckYsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRjtBQXJJRCxnQ0FxSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuXG5pbXBvcnQgeyBCaXRHb0Jhc2UsIENvaW5Db25zdHJ1Y3RvciwgTmFtZWRDb2luQ29uc3RydWN0b3IsIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgY29pbnMsIFNpcDEwVG9rZW5Db25maWcsIHRva2VucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuXG5pbXBvcnQgeyBTdHggfSBmcm9tICcuL3N0eCc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi9saWInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9saWIvdHJhbnNhY3Rpb25CdWlsZGVyJztcbmltcG9ydCB7IGdldE1lbW9JZEFuZEJhc2VBZGRyZXNzRnJvbUFkZHJlc3MgfSBmcm9tICcuL2xpYi91dGlscyc7XG5cbmV4cG9ydCBjbGFzcyBTaXAxMFRva2VuIGV4dGVuZHMgU3R4IHtcbiAgcHVibGljIHJlYWRvbmx5IHRva2VuQ29uZmlnOiBTaXAxMFRva2VuQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHRva2VuQ29uZmlnOiBTaXAxMFRva2VuQ29uZmlnKSB7XG4gICAgLy8gdG9rZW5Db25maWcuY29pbiBpcyBkZXJpdmVkIGJ5IHN0YXRpY3MgZnJvbSB0aGUgdG9rZW4ncyBuZXR3b3JrLCBzbyBpdCBzdGF5cyBjb3JyZWN0IGZvclxuICAgIC8vIGRlcGxveW1lbnRzIGJleW9uZCB0aGUgc3RvY2sgbWFpbm5ldC90ZXN0bmV0IHBhaXIgKGUuZy4gdHN0eHNpZ25ldCwgY2hhaW4gSUQgMTI4MCkuXG4gICAgY29uc3Qgc3RhdGljc0NvaW4gPSBjb2lucy5nZXQodG9rZW5Db25maWcuY29pbik7XG4gICAgc3VwZXIoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgICB0aGlzLnRva2VuQ29uZmlnID0gdG9rZW5Db25maWc7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcihjb25maWc6IFNpcDEwVG9rZW5Db25maWcpOiBDb2luQ29uc3RydWN0b3Ige1xuICAgIHJldHVybiAoYml0Z286IEJpdEdvQmFzZSkgPT4gbmV3IFNpcDEwVG9rZW4oYml0Z28sIGNvbmZpZyk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoXG4gICAgdG9rZW5Db25maWdzOiBTaXAxMFRva2VuQ29uZmlnW10gPSBbLi4udG9rZW5zLmJpdGNvaW4uc3R4LnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQuc3R4LnRva2Vuc11cbiAgKTogTmFtZWRDb2luQ29uc3RydWN0b3JbXSB7XG4gICAgY29uc3QgdG9rZW5zQ3RvcnM6IE5hbWVkQ29pbkNvbnN0cnVjdG9yW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2VuQ29uZmlncykge1xuICAgICAgY29uc3QgdG9rZW5Db25zdHJ1Y3RvciA9IFNpcDEwVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbik7XG4gICAgICB0b2tlbnNDdG9ycy5wdXNoKHsgbmFtZTogdG9rZW4udHlwZSwgY29pbkNvbnN0cnVjdG9yOiB0b2tlbkNvbnN0cnVjdG9yIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdG9rZW5zQ3RvcnM7XG4gIH1cblxuICBnZXQgbmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLm5hbWU7XG4gIH1cblxuICBnZXQgY29pbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLmNvaW47XG4gIH1cblxuICBnZXQgbmV0d29yaygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLm5ldHdvcms7XG4gIH1cblxuICBnZXQgYXNzZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLmFzc2V0SWQ7XG4gIH1cblxuICBnZXQgZGVjaW1hbFBsYWNlcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLmRlY2ltYWxQbGFjZXM7XG4gIH1cblxuICBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLnR5cGU7XG4gIH1cblxuICBnZXRCYXNlQ2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb2luO1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ1NpcDEwIFRva2VuJztcbiAgfVxuXG4gIGdldEJhc2VGYWN0b3IoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMTAsIHRoaXMudG9rZW5Db25maWcuZGVjaW1hbFBsYWNlcyk7XG4gIH1cblxuICBnZXRUcmFuc2FjdGlvbihjb2luQ29uZmlnOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogVHJhbnNhY3Rpb25CdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IFRyYW5zYWN0aW9uQnVpbGRlckZhY3RvcnkoY29pbkNvbmZpZykuZ2V0RnVuZ2libGVUb2tlblRyYW5zZmVyQnVpbGRlcigpO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb24ocGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHR4UHJlYnVpbGQ6IHR4UHJlYnVpbGQsIHR4UGFyYW1zOiB0eFBhcmFtcyB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHsgbWVtbyB9ID0gdHhQYXJhbXM7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodHhQYXJhbXMucmVjaXBpZW50cykgJiYgdHhQYXJhbXMucmVjaXBpZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke3RoaXMuZ2V0Q2hhaW4oKX0gZG9lc24ndCBzdXBwb3J0IHNlbmRpbmcgdG8gbW9yZSB0aGFuIDEgZGVzdGluYXRpb24gYWRkcmVzcyB3aXRoaW4gYSBzaW5nbGUgdHJhbnNhY3Rpb24uIFRyeSBhZ2FpbiwgdXNpbmcgb25seSBhIHNpbmdsZSByZWNpcGllbnQuYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgcmF3VHggPSB0eFByZWJ1aWxkLnR4SGV4O1xuICAgIGlmICghcmF3VHgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCB0eCBwcmVidWlsZCBwcm9wZXJ0eSB0eEhleCcpO1xuICAgIH1cbiAgICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KHRoaXMuZ2V0Q2hhaW4oKSk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmdldFRyYW5zYWN0aW9uKGNvaW5Db25maWcpO1xuICAgIHRyYW5zYWN0aW9uLmZyb20ocmF3VHgpO1xuICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gYXdhaXQgdGhpcy5leHBsYWluVHJhbnNhY3Rpb24oeyB0eEhleDogcmF3VHgsIGZlZUluZm86IHsgZmVlOiAnJyB9IH0pO1xuICAgIGlmICh0eFBhcmFtcy5yZWNpcGllbnRzICE9PSB1bmRlZmluZWQgJiYgZXhwbGFpbmVkVHgpIHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkUmVjaXBpZW50cyA9IHR4UGFyYW1zLnJlY2lwaWVudHM/Lm1hcCgocmVjaXBpZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gZ2V0TWVtb0lkQW5kQmFzZUFkZHJlc3NGcm9tQWRkcmVzcyhyZWNpcGllbnQuYWRkcmVzcyk7XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudERhdGEgPSB7XG4gICAgICAgICAgYWRkcmVzczogYWRkcmVzc0RldGFpbHMuYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IEJpZ0ludChyZWNpcGllbnQuYW1vdW50KSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHJlY2lwaWVudC50b2tlbk5hbWUpIHtcbiAgICAgICAgICByZWNpcGllbnREYXRhWyd0b2tlbk5hbWUnXSA9IHJlY2lwaWVudC50b2tlbk5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlY2lwaWVudERhdGE7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZpbHRlcmVkT3V0cHV0cyA9IGV4cGxhaW5lZFR4Lm91dHB1dHMubWFwKChvdXRwdXQpID0+IHtcbiAgICAgICAgY29uc3QgcmVjaXBpZW50RGF0YSA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IEJpZ0ludChvdXRwdXQuYW1vdW50KSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG91dHB1dC50b2tlbk5hbWUpIHtcbiAgICAgICAgICByZWNpcGllbnREYXRhWyd0b2tlbk5hbWUnXSA9IG91dHB1dC50b2tlbk5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlY2lwaWVudERhdGE7XG4gICAgICB9KTtcbiAgICAgIGlmICghXy5pc0VxdWFsKGZpbHRlcmVkT3V0cHV0cywgZmlsdGVyZWRSZWNpcGllbnRzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnRzJyk7XG4gICAgICB9XG4gICAgICAvLyBjb21wYXJlIG1lbW9cbiAgICAgIGxldCBtZW1vSW5wdXQgPSAnJztcbiAgICAgIGxldCBtZW1vT3V0cHV0ID0gJyc7XG4gICAgICBpZiAobWVtbyAmJiBtZW1vLnZhbHVlKSB7XG4gICAgICAgIG1lbW9JbnB1dCA9IG1lbW8udmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGFkZHJlc3NEZXRhaWxzID0gZ2V0TWVtb0lkQW5kQmFzZUFkZHJlc3NGcm9tQWRkcmVzcyh0eFBhcmFtcy5yZWNpcGllbnRzWzBdLmFkZHJlc3MpO1xuICAgICAgICBtZW1vSW5wdXQgPSBhZGRyZXNzRGV0YWlscy5tZW1vSWQgPyBhZGRyZXNzRGV0YWlscy5tZW1vSWQgOiAnJztcbiAgICAgIH1cbiAgICAgIGlmIChleHBsYWluZWRUeC5tZW1vKSB7XG4gICAgICAgIG1lbW9PdXRwdXQgPSBleHBsYWluZWRUeC5tZW1vO1xuICAgICAgfVxuICAgICAgaWYgKCFfLmlzRXF1YWwobWVtb0lucHV0LCBtZW1vT3V0cHV0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IG1lbW8gZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnQgbWVtbycpO1xuICAgICAgfVxuICAgICAgLy8gY29tcGFyZSBzZW5kIGFtb3VudFxuICAgICAgbGV0IHRvdGFsQW1vdW50ID0gbmV3IEJpZ051bWJlcigwKTtcbiAgICAgIGZvciAoY29uc3QgcmVjaXBpZW50cyBvZiB0eFBhcmFtcy5yZWNpcGllbnRzKSB7XG4gICAgICAgIHRvdGFsQW1vdW50ID0gdG90YWxBbW91bnQucGx1cyhyZWNpcGllbnRzLmFtb3VudCk7XG4gICAgICB9XG4gICAgICBpZiAoIXRvdGFsQW1vdW50LmlzRXF1YWxUbyhleHBsYWluZWRUeC5vdXRwdXRBbW91bnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHggdG90YWwgYW1vdW50IGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdG90YWwgYW1vdW50IGZpZWxkJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG4iXX0=
package/dist/src/stx.d.ts CHANGED
@@ -1,7 +1,10 @@
1
- /// <reference types="node" />
2
- import { BaseCoin, BitGoBase, KeyPair, SignedTransaction, VerifyAddressOptions, VerifyTransactionOptions } from '@bitgo-beta/sdk-core';
1
+ import { AuditDecryptedKeyParams, BaseCoin, BaseTransaction, BitGoBase, KeyPair, MultisigType, SignedTransaction, VerifyAddressOptions, VerifyTransactionOptions } from '@bitgo-beta/sdk-core';
3
2
  import { BaseCoin as StaticsBaseCoin, CoinFamily } from '@bitgo-beta/statics';
4
3
  import { ExplainTransactionOptions, StxSignTransactionOptions, StxTransactionExplanation } from './types';
4
+ import { TransactionBuilder } from './lib/transactionBuilder';
5
+ import { AddressDetails, NativeStxBalance, RecoveryInfo, RecoveryOptions, RecoveryTransaction, SingleFungibleTokenBalance, StxNonceResponse } from './lib/iface';
6
+ import { TransferBuilder } from './lib/transferBuilder';
7
+ import { FungibleTokenTransferBuilder } from './lib/fungibleTokenTransferBuilder';
5
8
  export declare class Stx extends BaseCoin {
6
9
  protected readonly _staticsCoin: Readonly<StaticsBaseCoin>;
7
10
  constructor(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>);
@@ -10,7 +13,18 @@ export declare class Stx extends BaseCoin {
10
13
  getFamily(): CoinFamily;
11
14
  getFullName(): string;
12
15
  getBaseFactor(): string | number;
16
+ getTransaction(coinConfig: Readonly<StaticsBaseCoin>): TransactionBuilder;
17
+ /** inherited doc */
18
+ getDefaultMultisigType(): MultisigType;
13
19
  verifyTransaction(params: VerifyTransactionOptions): Promise<boolean>;
20
+ private hasSbtcWithdrawParams;
21
+ /**
22
+ * Verify an sBTC withdrawal (burn) transaction matches the expected withdrawal params.
23
+ *
24
+ * @param rawTx - the raw (built) transaction hex from txPrebuild
25
+ * @param expected - the sbtcWithdrawParams supplied by the caller in txParams
26
+ */
27
+ private verifySbtcWithdrawTransaction;
14
28
  /**
15
29
  * Check if address is valid, then make sure it matches the base address.
16
30
  *
@@ -52,5 +66,143 @@ export declare class Stx extends BaseCoin {
52
66
  * @param params
53
67
  */
54
68
  explainTransaction(params: ExplainTransactionOptions): Promise<StxTransactionExplanation | undefined>;
69
+ /**
70
+ * Get URLs of some active public nodes
71
+ * @returns {String} node url
72
+ */
73
+ getPublicNodeUrl(): string;
74
+ /**
75
+ * Get native stacks balance for an account
76
+ * @param {String} address - stacks address
77
+ * @returns {Promise<NativeStxBalance>}
78
+ */
79
+ protected getNativeStxBalanceFromNode({ address }: {
80
+ address: string;
81
+ }): Promise<NativeStxBalance>;
82
+ /**
83
+ * Get single fungible token balance for an account
84
+ * @param {String} address - stacks address
85
+ * @param {String} assetId - fungible token asset id
86
+ * @returns {Promise<SingleFungibleTokenBalance>}
87
+ */
88
+ protected getSingleFungibleTokenBalanceFromNode({ address, assetId, }: {
89
+ address: string;
90
+ assetId: string;
91
+ }): Promise<SingleFungibleTokenBalance>;
92
+ /**
93
+ * Get nonce data specific to an account from a public node
94
+ * @param {String} address - stacks address
95
+ * @returns {Promise<StxNonceResponse>}
96
+ */
97
+ protected getAccountNonceFromNode({ address }: {
98
+ address: string;
99
+ }): Promise<StxNonceResponse>;
100
+ /**
101
+ * Get stacks transaction estimated fee
102
+ * @param {String} txHex - hex of stacks transaction payload
103
+ * @param {Number} txHexLength - length of built serialized transaction
104
+ * @returns {Promise<Number>} - fee estimate (taking the lowest)
105
+ */
106
+ protected getTransactionFeeEstimation({ txHex, txHexLength, }: {
107
+ txHex: string;
108
+ txHexLength: number;
109
+ }): Promise<number>;
110
+ /**
111
+ * Format for offline vault signing
112
+ * @param {BaseTransaction} tx - base transaction
113
+ * @returns {Promise<RecoveryInfo>}
114
+ */
115
+ protected formatForOfflineVault(tx: BaseTransaction): Promise<RecoveryInfo>;
116
+ /**
117
+ * Get the recoverable amount & fee after subtracting the txn fee
118
+ * @param {String} serializedHex - serialized txn hex
119
+ * @param {Number} txHexLength - deserialized txn length
120
+ * @param {String} balance - total account balance
121
+ * @param {String} tokenBalance - total token balance
122
+ * @returns {Promise<Record<string, string>>}
123
+ */
124
+ protected getRecoverableAmountAndFee(serializedHex: string, txHexLength: number, balance: string, tokenBalance?: string): Promise<Record<string, string>>;
125
+ /**
126
+ * Method to find the right builder for token or native coin transfer
127
+ * @param {String} contractAddress - token contract address
128
+ * @param {String} contractName - token contract name
129
+ * @returns {TransferBuilder|FungibleTokenTransferBuilder}
130
+ */
131
+ protected getTokenOrNativeTransferBuilder(contractAddress?: string, contractName?: string): TransferBuilder | FungibleTokenTransferBuilder;
132
+ /**
133
+ * Method to build fungible token transfer transaction
134
+ * @param {FungibleTokenTransferBuilder} builder - fungible token transfer builder
135
+ * @param {String} contractAddress - token contract address
136
+ * @param {String} contractName - token contract name
137
+ * @param {String[]} pubs - account public keys
138
+ * @param {Number} nonce - account nonce
139
+ * @param {AddressDetails} rootAddressDetails - root address details
140
+ * @param {AddressDetails} destinationAddressDetails - receive address details
141
+ * @param {String} stxBalance - native stx balance
142
+ * @returns {Promise<BaseTransaction>} - built transaction
143
+ */
144
+ protected buildTokenTransferTransaction({ builder, contractAddress, contractName, pubs, nonce, rootAddressDetails, destinationAddressDetails, stxBalance, }: {
145
+ builder: FungibleTokenTransferBuilder;
146
+ contractAddress: string;
147
+ contractName: string;
148
+ pubs: string[];
149
+ nonce: number;
150
+ rootAddressDetails: AddressDetails;
151
+ destinationAddressDetails: AddressDetails;
152
+ stxBalance: string;
153
+ }): Promise<BaseTransaction>;
154
+ /**
155
+ * Method to build native transfer transaction
156
+ * @param {TransferBuilder} builder - transfer builder
157
+ * @param {String[]} pubs - account public keys
158
+ * @param {Number} nonce - account nonce
159
+ * @param {AddressDetails} destinationAddressDetails - receive address details
160
+ * @param {String} stxBalance - native stx balance
161
+ * @returns {Promise<BaseTransaction>} - built transaction
162
+ */
163
+ protected buildNativeTransferTransaction({ builder, pubs, nonce, destinationAddressDetails, stxBalance, }: {
164
+ builder: TransferBuilder;
165
+ pubs: string[];
166
+ nonce: number;
167
+ destinationAddressDetails: AddressDetails;
168
+ stxBalance: string;
169
+ }): Promise<BaseTransaction>;
170
+ /**
171
+ * Method that uses appropriate builder and builds transaction depending on token or native coin
172
+ * @param {String[]} pubs - public keys
173
+ * @param {AddressDetails} rootAddressDetails - sender address detail
174
+ * @param {AddressDetails} destinationAddressDetails - receiver address detail
175
+ * @param {Number} nonce - wallet nonce
176
+ * @param {String} balance - wallet balance
177
+ * @param {String | undefined} contractAddress - token contract address
178
+ * @param {String | undefined} contractName - token contract name
179
+ * @returns {Promise<BaseTransaction>} built transaction
180
+ */
181
+ protected getNativeOrTokenTransaction({ pubs, rootAddressDetails, destinationAddressDetails, nonce, stxBalance, contractAddressInput, contractName, }: {
182
+ pubs: string[];
183
+ rootAddressDetails: AddressDetails;
184
+ destinationAddressDetails: AddressDetails;
185
+ nonce: number;
186
+ stxBalance: string;
187
+ contractAddressInput?: string;
188
+ contractName?: string;
189
+ }): Promise<{
190
+ tx: BaseTransaction;
191
+ builder: TransferBuilder | FungibleTokenTransferBuilder;
192
+ }>;
193
+ /**
194
+ * Method to recover native stx or sip10 tokens from bitgo hot & cold wallets
195
+ * @param {String} params.backupKey - encrypted wallet backup key (public or private)
196
+ * @param {String} params.userKey - encrypted wallet user key (public or private)
197
+ * @param {String} params.rootAddress - wallet root address
198
+ * @param {String} params.recoveryDestination - receive address
199
+ * @param {String} params.bitgoKey - encrypted bitgo public key
200
+ * @param {String} params.walletPassphrase - wallet password
201
+ * @param {String} params.contractId - contract id of the token (mandatory for token recovery)
202
+ * @returns {Promise<RecoveryInfo|RecoveryTransaction>} RecoveryTransaction.txHex - hex of serialized transaction (signed or unsigned)
203
+ */
204
+ recover(params: RecoveryOptions): Promise<RecoveryInfo | RecoveryTransaction>;
205
+ /** @inheritDoc */
206
+ auditDecryptedKey(params: AuditDecryptedKeyParams): void;
55
207
  }
56
208
  //# sourceMappingURL=stx.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stx.d.ts","sourceRoot":"","sources":["../../src/stx.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,QAAQ,EACR,SAAS,EACT,OAAO,EACP,iBAAiB,EAGjB,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,UAAU,EAAS,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAG1G,qBAAa,GAAI,SAAQ,QAAQ;IAC/B,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,IAAI,MAAM;IAIlB,SAAS,IAAI,UAAU;IAIvB,WAAW,IAAI,MAAM;IAIrB,aAAa,IAAI,MAAM,GAAG,MAAM;IAI1B,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAK3E;;;;;;OAMG;IACG,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAWrE;;;;;OAKG;IACH,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAcvC;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAQhC;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAQhC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAQxC;;;OAGG;IACG,eAAe,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkB9E,gBAAgB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAIjD;;;OAGG;IACG,kBAAkB,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,yBAAyB,GAAG,SAAS,CAAC;CAqE5G"}
1
+ {"version":3,"file":"stx.d.ts","sourceRoot":"","sources":["../../src/stx.ts"],"names":[],"mappings":"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"}