@bitgo-beta/utxo-staking 1.1.1-beta.91 → 1.1.1-beta.911

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 (137) hide show
  1. package/dist/cjs/scripts/babylon-sync.d.ts +2 -0
  2. package/dist/cjs/scripts/babylon-sync.d.ts.map +1 -0
  3. package/dist/cjs/scripts/babylon-sync.js +126 -0
  4. package/dist/cjs/src/babylon/delegationMessage.d.ts +38 -0
  5. package/dist/cjs/src/babylon/delegationMessage.d.ts.map +1 -0
  6. package/dist/cjs/src/babylon/delegationMessage.js +285 -0
  7. package/dist/cjs/src/babylon/descriptor.d.ts +48 -0
  8. package/dist/cjs/src/babylon/descriptor.d.ts.map +1 -0
  9. package/dist/cjs/src/babylon/descriptor.js +97 -0
  10. package/dist/cjs/src/babylon/index.d.ts +8 -0
  11. package/dist/cjs/src/babylon/index.d.ts.map +1 -0
  12. package/dist/cjs/src/babylon/index.js +51 -0
  13. package/dist/cjs/src/babylon/network.d.ts +7 -0
  14. package/dist/cjs/src/babylon/network.d.ts.map +1 -0
  15. package/dist/cjs/src/babylon/network.js +66 -0
  16. package/dist/cjs/src/babylon/params.mainnet.json +152 -0
  17. package/dist/cjs/src/babylon/params.testnet.json +212 -0
  18. package/dist/cjs/src/babylon/parseDescriptor.d.ts +26 -0
  19. package/dist/cjs/src/babylon/parseDescriptor.d.ts.map +1 -0
  20. package/dist/cjs/src/babylon/parseDescriptor.js +159 -0
  21. package/dist/cjs/src/babylon/stakingManager.d.ts +6 -0
  22. package/dist/cjs/src/babylon/stakingManager.d.ts.map +1 -0
  23. package/dist/cjs/src/babylon/stakingManager.js +120 -0
  24. package/dist/cjs/src/babylon/stakingParams.d.ts +40 -0
  25. package/dist/cjs/src/babylon/stakingParams.d.ts.map +1 -0
  26. package/dist/cjs/src/babylon/stakingParams.js +132 -0
  27. package/dist/cjs/src/babylon/undelegation/UndelegationResponse.d.ts +24 -0
  28. package/dist/cjs/src/babylon/undelegation/UndelegationResponse.d.ts.map +1 -0
  29. package/dist/cjs/src/babylon/undelegation/UndelegationResponse.js +55 -0
  30. package/dist/cjs/src/babylon/undelegation/index.d.ts +3 -0
  31. package/dist/cjs/src/babylon/undelegation/index.d.ts.map +1 -0
  32. package/dist/{src → cjs/src/babylon/undelegation}/index.js +3 -4
  33. package/dist/cjs/src/babylon/undelegation/unbonding.d.ts +16 -0
  34. package/dist/cjs/src/babylon/undelegation/unbonding.d.ts.map +1 -0
  35. package/dist/cjs/src/babylon/undelegation/unbonding.js +111 -0
  36. package/dist/cjs/src/coreDao/descriptor.d.ts.map +1 -0
  37. package/dist/cjs/src/coreDao/descriptor.js +38 -0
  38. package/dist/cjs/src/coreDao/index.d.ts.map +1 -0
  39. package/dist/{src → cjs/src}/coreDao/index.js +1 -1
  40. package/dist/cjs/src/coreDao/opReturn.d.ts.map +1 -0
  41. package/dist/cjs/src/coreDao/opReturn.js +183 -0
  42. package/dist/{src → cjs/src}/coreDao/transaction.d.ts +16 -7
  43. package/dist/cjs/src/coreDao/transaction.d.ts.map +1 -0
  44. package/dist/cjs/src/coreDao/transaction.js +34 -0
  45. package/dist/cjs/src/index.d.ts +3 -0
  46. package/dist/cjs/src/index.d.ts.map +1 -0
  47. package/dist/cjs/src/index.js +39 -0
  48. package/dist/cjs/test/unit/babylon/bug71.d.ts +2 -0
  49. package/dist/cjs/test/unit/babylon/bug71.d.ts.map +1 -0
  50. package/dist/cjs/test/unit/babylon/bug71.js +108 -0
  51. package/dist/cjs/test/unit/babylon/key.utils.d.ts +6 -0
  52. package/dist/cjs/test/unit/babylon/key.utils.d.ts.map +1 -0
  53. package/dist/cjs/test/unit/babylon/key.utils.js +68 -0
  54. package/dist/cjs/test/unit/babylon/transactions.d.ts +2 -0
  55. package/dist/cjs/test/unit/babylon/transactions.d.ts.map +1 -0
  56. package/dist/cjs/test/unit/babylon/transactions.js +338 -0
  57. package/dist/cjs/test/unit/babylon/undelegation.d.ts +2 -0
  58. package/dist/cjs/test/unit/babylon/undelegation.d.ts.map +1 -0
  59. package/dist/cjs/test/unit/babylon/undelegation.js +156 -0
  60. package/dist/cjs/test/unit/babylon/vendor.utils.d.ts +13 -0
  61. package/dist/cjs/test/unit/babylon/vendor.utils.d.ts.map +1 -0
  62. package/dist/cjs/test/unit/babylon/vendor.utils.js +78 -0
  63. package/dist/cjs/test/unit/coreDao/descriptor.d.ts +2 -0
  64. package/dist/cjs/test/unit/coreDao/descriptor.d.ts.map +1 -0
  65. package/dist/cjs/test/unit/coreDao/descriptor.js +144 -0
  66. package/dist/cjs/test/unit/coreDao/opReturn.d.ts +2 -0
  67. package/dist/cjs/test/unit/coreDao/opReturn.d.ts.map +1 -0
  68. package/dist/cjs/test/unit/coreDao/opReturn.js +275 -0
  69. package/dist/cjs/test/unit/coreDao/utils.d.ts +5 -0
  70. package/dist/cjs/test/unit/coreDao/utils.d.ts.map +1 -0
  71. package/dist/cjs/test/unit/coreDao/utils.js +54 -0
  72. package/dist/cjs/test/unit/fixtures.utils.d.ts +9 -0
  73. package/dist/cjs/test/unit/fixtures.utils.d.ts.map +1 -0
  74. package/dist/cjs/test/unit/fixtures.utils.js +91 -0
  75. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  76. package/dist/esm/babylon/delegationMessage.d.ts +38 -0
  77. package/dist/esm/babylon/delegationMessage.d.ts.map +1 -0
  78. package/dist/esm/babylon/delegationMessage.js +239 -0
  79. package/dist/esm/babylon/descriptor.d.ts +48 -0
  80. package/dist/esm/babylon/descriptor.d.ts.map +1 -0
  81. package/dist/esm/babylon/descriptor.js +91 -0
  82. package/dist/esm/babylon/index.d.ts +8 -0
  83. package/dist/esm/babylon/index.d.ts.map +1 -0
  84. package/dist/esm/babylon/index.js +13 -0
  85. package/dist/esm/babylon/network.d.ts +7 -0
  86. package/dist/esm/babylon/network.d.ts.map +1 -0
  87. package/dist/esm/babylon/network.js +29 -0
  88. package/dist/esm/babylon/params.mainnet.json +152 -0
  89. package/dist/esm/babylon/params.testnet.json +212 -0
  90. package/dist/esm/babylon/parseDescriptor.d.ts +26 -0
  91. package/dist/esm/babylon/parseDescriptor.d.ts.map +1 -0
  92. package/dist/esm/babylon/parseDescriptor.js +155 -0
  93. package/dist/esm/babylon/stakingManager.d.ts +6 -0
  94. package/dist/esm/babylon/stakingManager.d.ts.map +1 -0
  95. package/dist/esm/babylon/stakingManager.js +83 -0
  96. package/dist/esm/babylon/stakingParams.d.ts +40 -0
  97. package/dist/esm/babylon/stakingParams.d.ts.map +1 -0
  98. package/dist/esm/babylon/stakingParams.js +86 -0
  99. package/dist/esm/babylon/undelegation/UndelegationResponse.d.ts +24 -0
  100. package/dist/esm/babylon/undelegation/UndelegationResponse.d.ts.map +1 -0
  101. package/dist/esm/babylon/undelegation/UndelegationResponse.js +18 -0
  102. package/dist/esm/babylon/undelegation/index.d.ts +3 -0
  103. package/dist/esm/babylon/undelegation/index.d.ts.map +1 -0
  104. package/dist/esm/babylon/undelegation/index.js +3 -0
  105. package/dist/esm/babylon/undelegation/unbonding.d.ts +16 -0
  106. package/dist/esm/babylon/undelegation/unbonding.d.ts.map +1 -0
  107. package/dist/esm/babylon/undelegation/unbonding.js +70 -0
  108. package/dist/esm/coreDao/descriptor.d.ts +18 -0
  109. package/dist/{src → esm}/coreDao/descriptor.d.ts.map +1 -1
  110. package/dist/esm/coreDao/descriptor.js +35 -0
  111. package/dist/esm/coreDao/index.d.ts +4 -0
  112. package/dist/esm/coreDao/index.js +4 -0
  113. package/dist/esm/coreDao/opReturn.d.ts +41 -0
  114. package/dist/esm/coreDao/opReturn.js +175 -0
  115. package/dist/esm/coreDao/transaction.d.ts +28 -0
  116. package/dist/esm/coreDao/transaction.d.ts.map +1 -0
  117. package/dist/esm/coreDao/transaction.js +30 -0
  118. package/dist/esm/index.d.ts +3 -0
  119. package/dist/{src → esm}/index.d.ts.map +1 -1
  120. package/dist/esm/index.js +3 -0
  121. package/package.json +42 -12
  122. package/.eslintignore +0 -5
  123. package/.mocharc.yml +0 -8
  124. package/CHANGELOG.md +0 -63
  125. package/dist/src/coreDao/descriptor.js +0 -37
  126. package/dist/src/coreDao/opReturn.js +0 -183
  127. package/dist/src/coreDao/transaction.d.ts.map +0 -1
  128. package/dist/src/coreDao/transaction.js +0 -26
  129. package/dist/src/index.d.ts +0 -3
  130. package/dist/src/transaction.d.ts +0 -32
  131. package/dist/src/transaction.d.ts.map +0 -1
  132. package/dist/src/transaction.js +0 -54
  133. /package/dist/{src → cjs/src}/coreDao/descriptor.d.ts +0 -0
  134. /package/dist/{src → cjs/src}/coreDao/index.d.ts +0 -0
  135. /package/dist/{src → cjs/src}/coreDao/opReturn.d.ts +0 -0
  136. /package/dist/{src → esm}/coreDao/index.d.ts.map +0 -0
  137. /package/dist/{src → esm}/coreDao/opReturn.d.ts.map +0 -0
@@ -0,0 +1,175 @@
1
+ import { payments, networks } from '@bitgo-beta/utxo-lib';
2
+ // Source: https://docs.coredao.org/docs/Learn/products/btc-staking/design
3
+ export const CORE_DAO_DEVNET_CHAIN_ID = Buffer.from('0458', 'hex');
4
+ export const CORE_DAO_TESTNET2_CHAIN_ID = Buffer.from('045a', 'hex');
5
+ export const CORE_DAO_TESTNET_CHAIN_ID = Buffer.from('045b', 'hex');
6
+ export const CORE_DAO_MAINNET_CHAIN_ID = Buffer.from('045c', 'hex');
7
+ export const CORE_DAO_SATOSHI_PLUS_IDENTIFIER = Buffer.from('5341542b', 'hex');
8
+ // https://github.com/bitcoin/bitcoin/blob/5961b23898ee7c0af2626c46d5d70e80136578d3/src/script/script.h#L47
9
+ const OP_RETURN_IDENTIFIER = Buffer.from('6a', 'hex');
10
+ export function encodeTimelock(timelock) {
11
+ const buff = Buffer.alloc(4);
12
+ buff.writeUInt32LE(timelock);
13
+ return buff;
14
+ }
15
+ export function decodeTimelock(buffer) {
16
+ if (buffer.length !== 4) {
17
+ throw new Error('Invalid timelock buffer length');
18
+ }
19
+ return buffer.readUInt32LE();
20
+ }
21
+ /**
22
+ * Create a CoreDAO OP_RETURN output script
23
+ *
24
+ * @param version Version of the OP_RETURN
25
+ * @param chainId Chain ID
26
+ * @param delegator Delegator address
27
+ * @param validator Validator address
28
+ * @param fee Fee for relayer
29
+ * @param redeemScript Redeem script of the staking output
30
+ * @param timelock Timelock for the staking output
31
+ * @returns Buffer OP_RETURN buffer
32
+ */
33
+ export function createCoreDaoOpReturnOutputScript({ version, chainId, delegator, validator, fee, ...rest }) {
34
+ /**
35
+ * As of v2, this is the construction of the OP_RETURN:
36
+ * Source: https://docs.coredao.org/docs/Learn/products/btc-staking/design#op_return-output
37
+ *
38
+ * The OP_RETURN output should contain all staking information in order, and be composed in the following format:
39
+ *
40
+ * Satoshi Plus Identifier: (SAT+) 4 bytes
41
+ * Version: (0x01) 1 byte
42
+ * Chain ID: (0x045b (1115) for Core Testnet and 0x045c (1116) for Core Mainnet) 2 bytes
43
+ * Delegator: The Core address to receive rewards, 20 bytes
44
+ * Validator: The Core validator address to stake to, 20 bytes
45
+ * Fee: Fee for relayer, 1 byte, range [0,255], measured in CORE
46
+ * (Optional) RedeemScript
47
+ * (Optional) Timelock: 4 bytes
48
+ *
49
+ * Either RedeemScript or Timelock must be available, the purpose is to allow relayer to
50
+ * obtain the RedeemScript and submit transactions on Core. If a RedeemScript is provided,
51
+ * relayer will use it directly. Otherwise, relayer will construct the redeem script based
52
+ * on the timelock and the information in the transaction inputs.
53
+ *
54
+ * Note that any length > 80 bytes wont be relayed by nodes and therefore we will throw an error.
55
+ */
56
+ if (version < 0 || version > 255) {
57
+ throw new Error('Invalid version - out of range');
58
+ }
59
+ const versionBuffer = Buffer.alloc(1, version);
60
+ if (!(chainId.equals(CORE_DAO_TESTNET_CHAIN_ID) ||
61
+ chainId.equals(CORE_DAO_TESTNET2_CHAIN_ID) ||
62
+ chainId.equals(CORE_DAO_MAINNET_CHAIN_ID) ||
63
+ chainId.equals(CORE_DAO_DEVNET_CHAIN_ID))) {
64
+ throw new Error('Invalid chain ID');
65
+ }
66
+ if (delegator.length !== 20) {
67
+ throw new Error('Invalid delegator address');
68
+ }
69
+ if (validator.length !== 20) {
70
+ throw new Error('Invalid validator address');
71
+ }
72
+ if (fee < 0 || fee > 255) {
73
+ throw new Error('Invalid fee - out of range');
74
+ }
75
+ const feeBuffer = Buffer.alloc(1, fee);
76
+ if (feeBuffer.length !== 1) {
77
+ throw new Error('Invalid fee');
78
+ }
79
+ const redeemScriptBuffer = 'redeemScript' in rest ? rest.redeemScript : Buffer.from([]);
80
+ if ('timelock' in rest && (rest.timelock < 0 || rest.timelock > 4294967295)) {
81
+ throw new Error('Invalid timelock - out of range');
82
+ }
83
+ // encode the number into a 4-byte buffer
84
+ // if timelock is provided, write it into 32-bit little-endian
85
+ const timelockBuffer = 'timelock' in rest ? encodeTimelock(rest.timelock) : Buffer.from([]);
86
+ const data = Buffer.concat([
87
+ CORE_DAO_SATOSHI_PLUS_IDENTIFIER,
88
+ versionBuffer,
89
+ chainId,
90
+ delegator,
91
+ validator,
92
+ feeBuffer,
93
+ redeemScriptBuffer,
94
+ timelockBuffer,
95
+ ]);
96
+ if (data.length > 80) {
97
+ throw new Error('OP_RETURN outputs cannot have a length larger than 80 bytes');
98
+ }
99
+ const payment = payments.embed({
100
+ data: [data],
101
+ network: chainId.equals(CORE_DAO_DEVNET_CHAIN_ID) ? networks.testnet : networks.bitcoin,
102
+ });
103
+ if (!payment.output) {
104
+ throw new Error('Unable to create OP_RETURN output');
105
+ }
106
+ return payment.output;
107
+ }
108
+ /**
109
+ * Parse a CoreDAO OP_RETURN output script into the constituent parts
110
+ * @param script
111
+ * @returns OpReturnParams
112
+ */
113
+ export function parseCoreDaoOpReturnOutputScript(script) {
114
+ if (!script.subarray(0, 1).equals(OP_RETURN_IDENTIFIER)) {
115
+ throw new Error('First byte must be an OP_RETURN');
116
+ }
117
+ const payment = payments.embed({
118
+ output: script,
119
+ });
120
+ const data = payment.data;
121
+ if (!data || data.length !== 1) {
122
+ throw new Error('Invalid OP_RETURN output');
123
+ }
124
+ const dataBuffer = data[0];
125
+ if (dataBuffer.length > 80) {
126
+ throw new Error(`OP_RETURN outputs cannot have a length larger than 80 bytes`);
127
+ }
128
+ let offset = 0;
129
+ // Decode satoshi+ identifier
130
+ if (!dataBuffer.subarray(offset, offset + 4).equals(CORE_DAO_SATOSHI_PLUS_IDENTIFIER)) {
131
+ throw new Error('Invalid satoshi+ identifier');
132
+ }
133
+ offset += 4;
134
+ // Decode version
135
+ const version = dataBuffer[offset];
136
+ offset += 1;
137
+ // Decode chainId
138
+ const chainId = Buffer.from(dataBuffer.subarray(offset, offset + 2));
139
+ if (!(chainId.equals(CORE_DAO_DEVNET_CHAIN_ID) ||
140
+ chainId.equals(CORE_DAO_TESTNET_CHAIN_ID) ||
141
+ chainId.equals(CORE_DAO_TESTNET2_CHAIN_ID) ||
142
+ chainId.equals(CORE_DAO_MAINNET_CHAIN_ID))) {
143
+ throw new Error(`Invalid ChainID: ${chainId.toString('hex')}. Must be either 0x0458 (devnet), 0x045b (testnet), or 0x045c (mainnet).`);
144
+ }
145
+ offset += 2;
146
+ // Decode delegator
147
+ const delegator = Buffer.from(dataBuffer.subarray(offset, offset + 20));
148
+ offset += 20;
149
+ // Decode validator
150
+ const validator = Buffer.from(dataBuffer.subarray(offset, offset + 20));
151
+ offset += 20;
152
+ // Decode fee
153
+ const fee = dataBuffer[offset];
154
+ offset += 1;
155
+ const baseParams = { version, chainId, delegator, validator, fee };
156
+ // Decode redeemScript or timelock
157
+ if (offset === dataBuffer.length - 4) {
158
+ return { ...baseParams, timelock: decodeTimelock(dataBuffer.subarray(offset)) };
159
+ }
160
+ else {
161
+ return { ...baseParams, redeemScript: Buffer.from(dataBuffer.subarray(offset)) };
162
+ }
163
+ }
164
+ export function toString(params) {
165
+ return JSON.stringify({
166
+ version: params.version,
167
+ chainId: params.chainId.toString('hex'),
168
+ delegator: params.delegator.toString('hex'),
169
+ validator: params.validator.toString('hex'),
170
+ fee: params.fee,
171
+ ...('redeemScript' in params ? { redeemScript: params.redeemScript.toString('hex') } : {}),
172
+ ...('timelock' in params ? { timelock: params.timelock } : {}),
173
+ });
174
+ }
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BSZXR1cm4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZURhby9vcFJldHVybi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTFELDBFQUEwRTtBQUMxRSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNuRSxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNyRSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvRSwyR0FBMkc7QUFDM0csTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUV0RCxNQUFNLFVBQVUsY0FBYyxDQUFDLFFBQWdCO0lBQzdDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QixPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQWM7SUFDM0MsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3hCLE1B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LEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRixHQUFHLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDL0QsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHBheW1lbnRzLCBuZXR3b3JrcyB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcblxuLy8gU291cmNlOiBodHRwczovL2RvY3MuY29yZWRhby5vcmcvZG9jcy9MZWFybi9wcm9kdWN0cy9idGMtc3Rha2luZy9kZXNpZ25cbmV4cG9ydCBjb25zdCBDT1JFX0RBT19ERVZORVRfQ0hBSU5fSUQgPSBCdWZmZXIuZnJvbSgnMDQ1OCcsICdoZXgnKTtcbmV4cG9ydCBjb25zdCBDT1JFX0RBT19URVNUTkVUMl9DSEFJTl9JRCA9IEJ1ZmZlci5mcm9tKCcwNDVhJywgJ2hleCcpO1xuZXhwb3J0IGNvbnN0IENPUkVfREFPX1RFU1RORVRfQ0hBSU5fSUQgPSBCdWZmZXIuZnJvbSgnMDQ1YicsICdoZXgnKTtcbmV4cG9ydCBjb25zdCBDT1JFX0RBT19NQUlOTkVUX0NIQUlOX0lEID0gQnVmZmVyLmZyb20oJzA0NWMnLCAnaGV4Jyk7XG5leHBvcnQgY29uc3QgQ09SRV9EQU9fU0FUT1NISV9QTFVTX0lERU5USUZJRVIgPSBCdWZmZXIuZnJvbSgnNTM0MTU0MmInLCAnaGV4Jyk7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbi9iaXRjb2luL2Jsb2IvNTk2MWIyMzg5OGVlN2MwYWYyNjI2YzQ2ZDVkNzBlODAxMzY1NzhkMy9zcmMvc2NyaXB0L3NjcmlwdC5oI0w0N1xuY29uc3QgT1BfUkVUVVJOX0lERU5USUZJRVIgPSBCdWZmZXIuZnJvbSgnNmEnLCAnaGV4Jyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVUaW1lbG9jayh0aW1lbG9jazogbnVtYmVyKTogQnVmZmVyIHtcbiAgY29uc3QgYnVmZiA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgYnVmZi53cml0ZVVJbnQzMkxFKHRpbWVsb2NrKTtcbiAgcmV0dXJuIGJ1ZmY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVUaW1lbG9jayhidWZmZXI6IEJ1ZmZlcik6IG51bWJlciB7XG4gIGlmIChidWZmZXIubGVuZ3RoICE9PSA0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHRpbWVsb2NrIGJ1ZmZlciBsZW5ndGgnKTtcbiAgfVxuICByZXR1cm4gYnVmZmVyLnJlYWRVSW50MzJMRSgpO1xufVxuXG50eXBlIEJhc2VQYXJhbXMgPSB7XG4gIHZlcnNpb246IG51bWJlcjtcbiAgY2hhaW5JZDogQnVmZmVyO1xuICBkZWxlZ2F0b3I6IEJ1ZmZlcjtcbiAgdmFsaWRhdG9yOiBCdWZmZXI7XG4gIGZlZTogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgT3BSZXR1cm5QYXJhbXMgPSBCYXNlUGFyYW1zICYgKHsgcmVkZWVtU2NyaXB0OiBCdWZmZXIgfSB8IHsgdGltZWxvY2s6IG51bWJlciB9KTtcblxuLyoqXG4gKiBDcmVhdGUgYSBDb3JlREFPIE9QX1JFVFVSTiBvdXRwdXQgc2NyaXB0XG4gKlxuICogQHBhcmFtIHZlcnNpb24gVmVyc2lvbiBvZiB0aGUgT1BfUkVUVVJOXG4gKiBAcGFyYW0gY2hhaW5JZCBDaGFpbiBJRFxuICogQHBhcmFtIGRlbGVnYXRvciBEZWxlZ2F0b3IgYWRkcmVzc1xuICogQHBhcmFtIHZhbGlkYXRvciBWYWxpZGF0b3IgYWRkcmVzc1xuICogQHBhcmFtIGZlZSBGZWUgZm9yIHJlbGF5ZXJcbiAqIEBwYXJhbSByZWRlZW1TY3JpcHQgUmVkZWVtIHNjcmlwdCBvZiB0aGUgc3Rha2luZyBvdXRwdXRcbiAqIEBwYXJhbSB0aW1lbG9jayBUaW1lbG9jayBmb3IgdGhlIHN0YWtpbmcgb3V0cHV0XG4gKiBAcmV0dXJucyBCdWZmZXIgT1BfUkVUVVJOIGJ1ZmZlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29yZURhb09wUmV0dXJuT3V0cHV0U2NyaXB0KHtcbiAgdmVyc2lvbixcbiAgY2hhaW5JZCxcbiAgZGVsZWdhdG9yLFxuICB2YWxpZGF0b3IsXG4gIGZlZSxcbiAgLi4ucmVzdFxufTogT3BSZXR1cm5QYXJhbXMpOiBCdWZmZXIge1xuICAvKipcbiAgICogQXMgb2YgdjIsIHRoaXMgaXMgdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGUgT1BfUkVUVVJOOlxuICAgKiBTb3VyY2U6IGh0dHBzOi8vZG9jcy5jb3JlZGFvLm9yZy9kb2NzL0xlYXJuL3Byb2R1Y3RzL2J0Yy1zdGFraW5nL2Rlc2lnbiNvcF9yZXR1cm4tb3V0cHV0XG4gICAqXG4gICAqIFRoZSBPUF9SRVRVUk4gb3V0cHV0IHNob3VsZCBjb250YWluIGFsbCBzdGFraW5nIGluZm9ybWF0aW9uIGluIG9yZGVyLCBhbmQgYmUgY29tcG9zZWQgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4gICAqXG4gICAqIFNhdG9zaGkgUGx1cyBJZGVudGlmaWVyOiAoU0FUKykgNCBieXRlc1xuICAgKiBWZXJzaW9uOiAoMHgwMSkgMSBieXRlXG4gICAqIENoYWluIElEOiAoMHgwNDViICgxMTE1KSBmb3IgQ29yZSBUZXN0bmV0IGFuZCAweDA0NWMgKDExMTYpIGZvciBDb3JlIE1haW5uZXQpIDIgYnl0ZXNcbiAgICogRGVsZWdhdG9yOiBUaGUgQ29yZSBhZGRyZXNzIHRvIHJlY2VpdmUgcmV3YXJkcywgMjAgYnl0ZXNcbiAgICogVmFsaWRhdG9yOiBUaGUgQ29yZSB2YWxpZGF0b3IgYWRkcmVzcyB0byBzdGFrZSB0bywgMjAgYnl0ZXNcbiAgICogRmVlOiBGZWUgZm9yIHJlbGF5ZXIsIDEgYnl0ZSwgcmFuZ2UgWzAsMjU1XSwgbWVhc3VyZWQgaW4gQ09SRVxuICAgKiAoT3B0aW9uYWwpIFJlZGVlbVNjcmlwdFxuICAgKiAoT3B0aW9uYWwpIFRpbWVsb2NrOiA0IGJ5dGVzXG4gICAqXG4gICAqIEVpdGhlciBSZWRlZW1TY3JpcHQgb3IgVGltZWxvY2sgbXVzdCBiZSBhdmFpbGFibGUsIHRoZSBwdXJwb3NlIGlzIHRvIGFsbG93IHJlbGF5ZXIgdG9cbiAgICogb2J0YWluIHRoZSBSZWRlZW1TY3JpcHQgYW5kIHN1Ym1pdCB0cmFuc2FjdGlvbnMgb24gQ29yZS4gSWYgYSBSZWRlZW1TY3JpcHQgaXMgcHJvdmlkZWQsXG4gICAqIHJlbGF5ZXIgd2lsbCB1c2UgaXQgZGlyZWN0bHkuIE90aGVyd2lzZSwgcmVsYXllciB3aWxsIGNvbnN0cnVjdCB0aGUgcmVkZWVtIHNjcmlwdCBiYXNlZFxuICAgKiBvbiB0aGUgdGltZWxvY2sgYW5kIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgdHJhbnNhY3Rpb24gaW5wdXRzLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgYW55IGxlbmd0aCA+IDgwIGJ5dGVzIHdvbnQgYmUgcmVsYXllZCBieSBub2RlcyBhbmQgdGhlcmVmb3JlIHdlIHdpbGwgdGhyb3cgYW4gZXJyb3IuXG4gICAqL1xuICBpZiAodmVyc2lvbiA8IDAgfHwgdmVyc2lvbiA+IDI1NSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB2ZXJzaW9uIC0gb3V0IG9mIHJhbmdlJyk7XG4gIH1cbiAgY29uc3QgdmVyc2lvbkJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygxLCB2ZXJzaW9uKTtcblxuICBpZiAoXG4gICAgIShcbiAgICAgIGNoYWluSWQuZXF1YWxzKENPUkVfREFPX1RFU1RORVRfQ0hBSU5fSUQpIHx8XG4gICAgICBjaGFpbklkLmVxdWFscyhDT1JFX0RBT19URVNUTkVUMl9DSEFJTl9JRCkgfHxcbiAgICAgIGNoYWluSWQuZXF1YWxzKENPUkVfREFPX01BSU5ORVRfQ0hBSU5fSUQpIHx8XG4gICAgICBjaGFpbklkLmVxdWFscyhDT1JFX0RBT19ERVZORVRfQ0hBSU5fSUQpXG4gICAgKVxuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY2hhaW4gSUQnKTtcbiAgfVxuXG4gIGlmIChkZWxlZ2F0b3IubGVuZ3RoICE9PSAyMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkZWxlZ2F0b3IgYWRkcmVzcycpO1xuICB9XG5cbiAgaWYgKHZhbGlkYXRvci5sZW5ndGggIT09IDIwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbGlkYXRvciBhZGRyZXNzJyk7XG4gIH1cblxuICBpZiAoZmVlIDwgMCB8fCBmZWUgPiAyNTUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZmVlIC0gb3V0IG9mIHJhbmdlJyk7XG4gIH1cbiAgY29uc3QgZmVlQnVmZmVyID0gQnVmZmVyLmFsbG9jKDEsIGZlZSk7XG5cbiAgaWYgKGZlZUJ1ZmZlci5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZmVlJyk7XG4gIH1cblxuICBjb25zdCByZWRlZW1TY3JpcHRCdWZmZXIgPSAncmVkZWVtU2NyaXB0JyBpbiByZXN0ID8gcmVzdC5yZWRlZW1TY3JpcHQgOiBCdWZmZXIuZnJvbShbXSk7XG4gIGlmICgndGltZWxvY2snIGluIHJlc3QgJiYgKHJlc3QudGltZWxvY2sgPCAwIHx8IHJlc3QudGltZWxvY2sgPiA0Mjk0OTY3Mjk1KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB0aW1lbG9jayAtIG91dCBvZiByYW5nZScpO1xuICB9XG5cbiAgLy8gZW5jb2RlIHRoZSBudW1iZXIgaW50byBhIDQtYnl0ZSBidWZmZXJcbiAgLy8gaWYgdGltZWxvY2sgaXMgcHJvdmlkZWQsIHdyaXRlIGl0IGludG8gMzItYml0IGxpdHRsZS1lbmRpYW5cbiAgY29uc3QgdGltZWxvY2tCdWZmZXIgPSAndGltZWxvY2snIGluIHJlc3QgPyBlbmNvZGVUaW1lbG9jayhyZXN0LnRpbWVsb2NrKSA6IEJ1ZmZlci5mcm9tKFtdKTtcbiAgY29uc3QgZGF0YSA9IEJ1ZmZlci5jb25jYXQoW1xuICAgIENPUkVfREFPX1NBVE9TSElfUExVU19JREVOVElGSUVSLFxuICAgIHZlcnNpb25CdWZmZXIsXG4gICAgY2hhaW5JZCxcbiAgICBkZWxlZ2F0b3IsXG4gICAgdmFsaWRhdG9yLFxuICAgIGZlZUJ1ZmZlcixcbiAgICByZWRlZW1TY3JpcHRCdWZmZXIsXG4gICAgdGltZWxvY2tCdWZmZXIsXG4gIF0pO1xuICBpZiAoZGF0YS5sZW5ndGggPiA4MCkge1xuICAgIHRocm93IG5ldyBFcnJvcignT1BfUkVUVVJOIG91dHB1dHMgY2Fubm90IGhhdmUgYSBsZW5ndGggbGFyZ2VyIHRoYW4gODAgYnl0ZXMnKTtcbiAgfVxuXG4gIGNvbnN0IHBheW1lbnQgPSBwYXltZW50cy5lbWJlZCh7XG4gICAgZGF0YTogW2RhdGFdLFxuICAgIG5ldHdvcms6IGNoYWluSWQuZXF1YWxzKENPUkVfREFPX0RFVk5FVF9DSEFJTl9JRCkgPyBuZXR3b3Jrcy50ZXN0bmV0IDogbmV0d29ya3MuYml0Y29pbixcbiAgfSk7XG4gIGlmICghcGF5bWVudC5vdXRwdXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgT1BfUkVUVVJOIG91dHB1dCcpO1xuICB9XG5cbiAgcmV0dXJuIHBheW1lbnQub3V0cHV0O1xufVxuXG4vKipcbiAqIFBhcnNlIGEgQ29yZURBTyBPUF9SRVRVUk4gb3V0cHV0IHNjcmlwdCBpbnRvIHRoZSBjb25zdGl0dWVudCBwYXJ0c1xuICogQHBhcmFtIHNjcmlwdFxuICogQHJldHVybnMgT3BSZXR1cm5QYXJhbXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29yZURhb09wUmV0dXJuT3V0cHV0U2NyaXB0KHNjcmlwdDogQnVmZmVyKTogT3BSZXR1cm5QYXJhbXMge1xuICBpZiAoIXNjcmlwdC5zdWJhcnJheSgwLCAxKS5lcXVhbHMoT1BfUkVUVVJOX0lERU5USUZJRVIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGaXJzdCBieXRlIG11c3QgYmUgYW4gT1BfUkVUVVJOJyk7XG4gIH1cblxuICBjb25zdCBwYXltZW50ID0gcGF5bWVudHMuZW1iZWQoe1xuICAgIG91dHB1dDogc2NyaXB0LFxuICB9KTtcbiAgY29uc3QgZGF0YSA9IHBheW1lbnQuZGF0YTtcbiAgaWYgKCFkYXRhIHx8IGRhdGEubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIE9QX1JFVFVSTiBvdXRwdXQnKTtcbiAgfVxuICBjb25zdCBkYXRhQnVmZmVyID0gZGF0YVswXTtcbiAgaWYgKGRhdGFCdWZmZXIubGVuZ3RoID4gODApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE9QX1JFVFVSTiBvdXRwdXRzIGNhbm5vdCBoYXZlIGEgbGVuZ3RoIGxhcmdlciB0aGFuIDgwIGJ5dGVzYCk7XG4gIH1cbiAgbGV0IG9mZnNldCA9IDA7XG5cbiAgLy8gRGVjb2RlIHNhdG9zaGkrIGlkZW50aWZpZXJcbiAgaWYgKCFkYXRhQnVmZmVyLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgNCkuZXF1YWxzKENPUkVfREFPX1NBVE9TSElfUExVU19JREVOVElGSUVSKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzYXRvc2hpKyBpZGVudGlmaWVyJyk7XG4gIH1cbiAgb2Zmc2V0ICs9IDQ7XG5cbiAgLy8gRGVjb2RlIHZlcnNpb25cbiAgY29uc3QgdmVyc2lvbiA9IGRhdGFCdWZmZXJbb2Zmc2V0XTtcbiAgb2Zmc2V0ICs9IDE7XG5cbiAgLy8gRGVjb2RlIGNoYWluSWRcbiAgY29uc3QgY2hhaW5JZCA9IEJ1ZmZlci5mcm9tKGRhdGFCdWZmZXIuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyAyKSk7XG4gIGlmIChcbiAgICAhKFxuICAgICAgY2hhaW5JZC5lcXVhbHMoQ09SRV9EQU9fREVWTkVUX0NIQUlOX0lEKSB8fFxuICAgICAgY2hhaW5JZC5lcXVhbHMoQ09SRV9EQU9fVEVTVE5FVF9DSEFJTl9JRCkgfHxcbiAgICAgIGNoYWluSWQuZXF1YWxzKENPUkVfREFPX1RFU1RORVQyX0NIQUlOX0lEKSB8fFxuICAgICAgY2hhaW5JZC5lcXVhbHMoQ09SRV9EQU9fTUFJTk5FVF9DSEFJTl9JRClcbiAgICApXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIENoYWluSUQ6ICR7Y2hhaW5JZC50b1N0cmluZyhcbiAgICAgICAgJ2hleCdcbiAgICAgICl9LiBNdXN0IGJlIGVpdGhlciAweDA0NTggKGRldm5ldCksIDB4MDQ1YiAodGVzdG5ldCksIG9yIDB4MDQ1YyAobWFpbm5ldCkuYFxuICAgICk7XG4gIH1cbiAgb2Zmc2V0ICs9IDI7XG5cbiAgLy8gRGVjb2RlIGRlbGVnYXRvclxuICBjb25zdCBkZWxlZ2F0b3IgPSBCdWZmZXIuZnJvbShkYXRhQnVmZmVyLnN1YmFycmF5KG9mZnNldCwgb2Zmc2V0ICsgMjApKTtcbiAgb2Zmc2V0ICs9IDIwO1xuXG4gIC8vIERlY29kZSB2YWxpZGF0b3JcbiAgY29uc3QgdmFsaWRhdG9yID0gQnVmZmVyLmZyb20oZGF0YUJ1ZmZlci5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIDIwKSk7XG4gIG9mZnNldCArPSAyMDtcblxuICAvLyBEZWNvZGUgZmVlXG4gIGNvbnN0IGZlZSA9IGRhdGFCdWZmZXJbb2Zmc2V0XTtcbiAgb2Zmc2V0ICs9IDE7XG5cbiAgY29uc3QgYmFzZVBhcmFtcyA9IHsgdmVyc2lvbiwgY2hhaW5JZCwgZGVsZWdhdG9yLCB2YWxpZGF0b3IsIGZlZSB9O1xuXG4gIC8vIERlY29kZSByZWRlZW1TY3JpcHQgb3IgdGltZWxvY2tcbiAgaWYgKG9mZnNldCA9PT0gZGF0YUJ1ZmZlci5sZW5ndGggLSA0KSB7XG4gICAgcmV0dXJuIHsgLi4uYmFzZVBhcmFtcywgdGltZWxvY2s6IGRlY29kZVRpbWVsb2NrKGRhdGFCdWZmZXIuc3ViYXJyYXkob2Zmc2V0KSkgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyAuLi5iYXNlUGFyYW1zLCByZWRlZW1TY3JpcHQ6IEJ1ZmZlci5mcm9tKGRhdGFCdWZmZXIuc3ViYXJyYXkob2Zmc2V0KSkgfTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcocGFyYW1zOiBPcFJldHVyblBhcmFtcyk6IHN0cmluZyB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgdmVyc2lvbjogcGFyYW1zLnZlcnNpb24sXG4gICAgY2hhaW5JZDogcGFyYW1zLmNoYWluSWQudG9TdHJpbmcoJ2hleCcpLFxuICAgIGRlbGVnYXRvcjogcGFyYW1zLmRlbGVnYXRvci50b1N0cmluZygnaGV4JyksXG4gICAgdmFsaWRhdG9yOiBwYXJhbXMudmFsaWRhdG9yLnRvU3RyaW5nKCdoZXgnKSxcbiAgICBmZWU6IHBhcmFtcy5mZWUsXG4gICAgLi4uKCdyZWRlZW1TY3JpcHQnIGluIHBhcmFtcyA/IHsgcmVkZWVtU2NyaXB0OiBwYXJhbXMucmVkZWVtU2NyaXB0LnRvU3RyaW5nKCdoZXgnKSB9IDoge30pLFxuICAgIC4uLigndGltZWxvY2snIGluIHBhcmFtcyA/IHsgdGltZWxvY2s6IHBhcmFtcy50aW1lbG9jayB9IDoge30pLFxuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,28 @@
1
+ import { Output } from '@bitgo-beta/utxo-core';
2
+ import { Descriptor } from '@bitgo/wasm-utxo';
3
+ import { OpReturnParams } from './opReturn';
4
+ type StakingParams = {
5
+ amount: bigint;
6
+ descriptor: Descriptor;
7
+ index?: number;
8
+ };
9
+ /**
10
+ * Create the staking outputs for a CoreDAO staking transaction. This is the ordering
11
+ * in which to add into the transaction.
12
+ * @param stakingParams how to create the timelocked stake output
13
+ * @param stakingParams.descriptor if stakingParams.index is not provided, then this is assumed to be a `definite` descriptor.
14
+ * If stakingParams.index is provided, then this is assumed to be a `derivable` descriptor.
15
+ * @param opReturnParams to create the OP_RETURN output
16
+ */
17
+ export declare function createStakingOutputsCore(stakingParams: StakingParams, opReturnParams: OpReturnParams): Output<bigint>[];
18
+ type LegacyOutput = {
19
+ script: Buffer;
20
+ amount: bigint;
21
+ };
22
+ /**
23
+ * @see createStakingOutputsCore
24
+ * @deprecated - use createStakingOutputsCore instead
25
+ */
26
+ export declare function createStakingOutputs(stakingParams: StakingParams, opReturnParams: OpReturnParams): LegacyOutput[];
27
+ export {};
28
+ //# sourceMappingURL=transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/coreDao/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAqC,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/E,KAAK,aAAa,GAAG;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc,GAC7B,MAAM,CAAC,MAAM,CAAC,EAAE,CAgBlB;AAED,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,GAAG,YAAY,EAAE,CAEjH"}
@@ -0,0 +1,30 @@
1
+ import { createCoreDaoOpReturnOutputScript } from './opReturn';
2
+ /**
3
+ * Create the staking outputs for a CoreDAO staking transaction. This is the ordering
4
+ * in which to add into the transaction.
5
+ * @param stakingParams how to create the timelocked stake output
6
+ * @param stakingParams.descriptor if stakingParams.index is not provided, then this is assumed to be a `definite` descriptor.
7
+ * If stakingParams.index is provided, then this is assumed to be a `derivable` descriptor.
8
+ * @param opReturnParams to create the OP_RETURN output
9
+ */
10
+ export function createStakingOutputsCore(stakingParams, opReturnParams) {
11
+ if (stakingParams.descriptor.hasWildcard() && stakingParams.index === undefined) {
12
+ throw new Error('Cannot create staking outputs with a wildcard descriptor and no derivation index');
13
+ }
14
+ const outputScript = Buffer.from(stakingParams.index === undefined
15
+ ? stakingParams.descriptor.scriptPubkey()
16
+ : stakingParams.descriptor.atDerivationIndex(stakingParams.index).scriptPubkey());
17
+ const opReturnScript = createCoreDaoOpReturnOutputScript(opReturnParams);
18
+ return [
19
+ { script: outputScript, value: stakingParams.amount },
20
+ { script: opReturnScript, value: BigInt(0) },
21
+ ];
22
+ }
23
+ /**
24
+ * @see createStakingOutputsCore
25
+ * @deprecated - use createStakingOutputsCore instead
26
+ */
27
+ export function createStakingOutputs(stakingParams, opReturnParams) {
28
+ return createStakingOutputsCore(stakingParams, opReturnParams).map(({ value, ...o }) => ({ ...o, amount: value }));
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29yZURhby90cmFuc2FjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsaUNBQWlDLEVBQWtCLE1BQU0sWUFBWSxDQUFDO0FBUS9FOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLGFBQTRCLEVBQzVCLGNBQThCO0lBRTlCLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxhQUFhLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQ2hGLE1BQU0sSUFBSSxLQUFLLENBQUMsa0ZBQWtGLENBQUMsQ0FBQztJQUN0RyxDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FDOUIsYUFBYSxDQUFDLEtBQUssS0FBSyxTQUFTO1FBQy9CLENBQUMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRTtRQUN6QyxDQUFDLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxFQUFFLENBQ25GLENBQUM7SUFDRixNQUFNLGNBQWMsR0FBRyxpQ0FBaUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUV6RSxPQUFPO1FBQ0wsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFO1FBQ3JELEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO0tBQzdDLENBQUM7QUFDSixDQUFDO0FBT0Q7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLGFBQTRCLEVBQUUsY0FBOEI7SUFDL0YsT0FBTyx3QkFBd0IsQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE91dHB1dCB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tY29yZSc7XG5pbXBvcnQgeyBEZXNjcmlwdG9yIH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5cbmltcG9ydCB7IGNyZWF0ZUNvcmVEYW9PcFJldHVybk91dHB1dFNjcmlwdCwgT3BSZXR1cm5QYXJhbXMgfSBmcm9tICcuL29wUmV0dXJuJztcblxudHlwZSBTdGFraW5nUGFyYW1zID0ge1xuICBhbW91bnQ6IGJpZ2ludDtcbiAgZGVzY3JpcHRvcjogRGVzY3JpcHRvcjtcbiAgaW5kZXg/OiBudW1iZXI7XG59O1xuXG4vKipcbiAqIENyZWF0ZSB0aGUgc3Rha2luZyBvdXRwdXRzIGZvciBhIENvcmVEQU8gc3Rha2luZyB0cmFuc2FjdGlvbi4gVGhpcyBpcyB0aGUgb3JkZXJpbmdcbiAqIGluIHdoaWNoIHRvIGFkZCBpbnRvIHRoZSB0cmFuc2FjdGlvbi5cbiAqIEBwYXJhbSBzdGFraW5nUGFyYW1zIGhvdyB0byBjcmVhdGUgdGhlIHRpbWVsb2NrZWQgc3Rha2Ugb3V0cHV0XG4gKiBAcGFyYW0gc3Rha2luZ1BhcmFtcy5kZXNjcmlwdG9yIGlmIHN0YWtpbmdQYXJhbXMuaW5kZXggaXMgbm90IHByb3ZpZGVkLCB0aGVuIHRoaXMgaXMgYXNzdW1lZCB0byBiZSBhIGBkZWZpbml0ZWAgZGVzY3JpcHRvci5cbiAqIElmIHN0YWtpbmdQYXJhbXMuaW5kZXggaXMgcHJvdmlkZWQsIHRoZW4gdGhpcyBpcyBhc3N1bWVkIHRvIGJlIGEgYGRlcml2YWJsZWAgZGVzY3JpcHRvci5cbiAqIEBwYXJhbSBvcFJldHVyblBhcmFtcyB0byBjcmVhdGUgdGhlIE9QX1JFVFVSTiBvdXRwdXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0YWtpbmdPdXRwdXRzQ29yZShcbiAgc3Rha2luZ1BhcmFtczogU3Rha2luZ1BhcmFtcyxcbiAgb3BSZXR1cm5QYXJhbXM6IE9wUmV0dXJuUGFyYW1zXG4pOiBPdXRwdXQ8YmlnaW50PltdIHtcbiAgaWYgKHN0YWtpbmdQYXJhbXMuZGVzY3JpcHRvci5oYXNXaWxkY2FyZCgpICYmIHN0YWtpbmdQYXJhbXMuaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNyZWF0ZSBzdGFraW5nIG91dHB1dHMgd2l0aCBhIHdpbGRjYXJkIGRlc2NyaXB0b3IgYW5kIG5vIGRlcml2YXRpb24gaW5kZXgnKTtcbiAgfVxuXG4gIGNvbnN0IG91dHB1dFNjcmlwdCA9IEJ1ZmZlci5mcm9tKFxuICAgIHN0YWtpbmdQYXJhbXMuaW5kZXggPT09IHVuZGVmaW5lZFxuICAgICAgPyBzdGFraW5nUGFyYW1zLmRlc2NyaXB0b3Iuc2NyaXB0UHVia2V5KClcbiAgICAgIDogc3Rha2luZ1BhcmFtcy5kZXNjcmlwdG9yLmF0RGVyaXZhdGlvbkluZGV4KHN0YWtpbmdQYXJhbXMuaW5kZXgpLnNjcmlwdFB1YmtleSgpXG4gICk7XG4gIGNvbnN0IG9wUmV0dXJuU2NyaXB0ID0gY3JlYXRlQ29yZURhb09wUmV0dXJuT3V0cHV0U2NyaXB0KG9wUmV0dXJuUGFyYW1zKTtcblxuICByZXR1cm4gW1xuICAgIHsgc2NyaXB0OiBvdXRwdXRTY3JpcHQsIHZhbHVlOiBzdGFraW5nUGFyYW1zLmFtb3VudCB9LFxuICAgIHsgc2NyaXB0OiBvcFJldHVyblNjcmlwdCwgdmFsdWU6IEJpZ0ludCgwKSB9LFxuICBdO1xufVxuXG50eXBlIExlZ2FjeU91dHB1dCA9IHtcbiAgc2NyaXB0OiBCdWZmZXI7XG4gIGFtb3VudDogYmlnaW50O1xufTtcblxuLyoqXG4gKiBAc2VlIGNyZWF0ZVN0YWtpbmdPdXRwdXRzQ29yZVxuICogQGRlcHJlY2F0ZWQgLSB1c2UgY3JlYXRlU3Rha2luZ091dHB1dHNDb3JlIGluc3RlYWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVN0YWtpbmdPdXRwdXRzKHN0YWtpbmdQYXJhbXM6IFN0YWtpbmdQYXJhbXMsIG9wUmV0dXJuUGFyYW1zOiBPcFJldHVyblBhcmFtcyk6IExlZ2FjeU91dHB1dFtdIHtcbiAgcmV0dXJuIGNyZWF0ZVN0YWtpbmdPdXRwdXRzQ29yZShzdGFraW5nUGFyYW1zLCBvcFJldHVyblBhcmFtcykubWFwKCh7IHZhbHVlLCAuLi5vIH0pID0+ICh7IC4uLm8sIGFtb3VudDogdmFsdWUgfSkpO1xufVxuIl19
@@ -0,0 +1,3 @@
1
+ export * as coreDao from './coreDao';
2
+ export * as babylon from './babylon';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AAErC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,OAAO,MAAM,WAAW,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * as coreDao from './coreDao';
2
+ export * as babylon from './babylon';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxLQUFLLE9BQU8sTUFBTSxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBhcyBjb3JlRGFvIGZyb20gJy4vY29yZURhbyc7XG5leHBvcnQgKiBhcyBiYWJ5bG9uIGZyb20gJy4vYmFieWxvbic7XG4iXX0=
package/package.json CHANGED
@@ -1,24 +1,43 @@
1
1
  {
2
2
  "name": "@bitgo-beta/utxo-staking",
3
- "version": "1.1.1-beta.91",
3
+ "version": "1.1.1-beta.911",
4
4
  "description": "BitGo SDK for build UTXO staking transactions",
5
- "main": "./dist/src/index.js",
6
- "types": "./dist/src/index.d.ts",
5
+ "main": "./dist/cjs/src/index.js",
6
+ "module": "./dist/esm/index.js",
7
+ "browser": "./dist/esm/index.js",
8
+ "types": "./dist/cjs/src/index.d.ts",
9
+ "files": [
10
+ "dist/cjs",
11
+ "dist/esm"
12
+ ],
13
+ "exports": {
14
+ ".": {
15
+ "import": {
16
+ "types": "./dist/esm/index.d.ts",
17
+ "default": "./dist/esm/index.js"
18
+ },
19
+ "require": {
20
+ "types": "./dist/cjs/src/index.d.ts",
21
+ "default": "./dist/cjs/src/index.js"
22
+ }
23
+ }
24
+ },
7
25
  "scripts": {
8
- "build": "yarn tsc --build --incremental --verbose .",
26
+ "build": "npm run build:cjs && npm run build:esm",
27
+ "build:cjs": "yarn tsc --build --incremental --verbose .",
28
+ "build:esm": "yarn tsc --project tsconfig.esm.json",
9
29
  "fmt": "prettier --write .",
10
- "check-fmt": "prettier --check .",
30
+ "check-fmt": "prettier --check '**/*.{ts,js,json}'",
11
31
  "clean": "rm -r ./dist",
12
32
  "lint": "eslint --quiet .",
13
33
  "prepare": "npm run build",
14
- "test": "npm run coverage",
15
34
  "coverage": "nyc -- npm run unit-test",
16
- "unit-test": "mocha"
35
+ "unit-test": "mocha --recursive \"test/**/*.ts\""
17
36
  },
18
37
  "author": "BitGo SDK Team <sdkteam@bitgo.com>",
19
38
  "license": "MIT",
20
39
  "engines": {
21
- "node": ">=18 <21"
40
+ "node": ">=20 <23"
22
41
  },
23
42
  "repository": {
24
43
  "type": "git",
@@ -40,9 +59,20 @@
40
59
  ]
41
60
  },
42
61
  "dependencies": {
43
- "@bitgo-beta/unspents": "0.13.2-beta.650",
44
- "@bitgo-beta/utxo-lib": "8.0.3-beta.651",
45
- "@bitgo/wasm-miniscript": "^2.0.0-beta.2"
62
+ "@babylonlabs-io/babylon-proto-ts": "1.7.2",
63
+ "@bitgo-beta/babylonlabs-io-btc-staking-ts": "0.4.0-beta.716",
64
+ "@bitgo-beta/utxo-core": "1.8.1-beta.587",
65
+ "@bitgo-beta/utxo-lib": "8.0.3-beta.1471",
66
+ "@bitgo/wasm-utxo": "1.11.0",
67
+ "bip174": "npm:@bitgo-forks/bip174@3.1.0-master.4",
68
+ "bip322-js": "^2.0.0",
69
+ "bitcoinjs-lib": "^6.1.7",
70
+ "fp-ts": "^2.16.2",
71
+ "io-ts": "npm:@bitgo-forks/io-ts@2.1.4",
72
+ "io-ts-types": "^0.5.19"
73
+ },
74
+ "devDependencies": {
75
+ "yargs": "^17.7.2"
46
76
  },
47
- "gitHead": "570f77e679adc0d12bb4c6e857fd242303d929c9"
77
+ "gitHead": "3810e94c7933d6623722f7782af89fb894b57f27"
48
78
  }
package/.eslintignore DELETED
@@ -1,5 +0,0 @@
1
- node_modules
2
- .idea
3
- public
4
- dist
5
-
package/.mocharc.yml DELETED
@@ -1,8 +0,0 @@
1
- require: 'ts-node/register'
2
- timeout: '60000'
3
- reporter: 'min'
4
- reporter-option:
5
- - 'cdn=true'
6
- - 'json=false'
7
- exit: true
8
- spec: ['test/unit/**/*.ts']
package/CHANGELOG.md DELETED
@@ -1,63 +0,0 @@
1
- # Change Log
2
-
3
- All notable changes to this project will be documented in this file.
4
- See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
-
6
- # [1.5.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/utxo-staking@1.3.5...@bitgo/utxo-staking@1.5.0) (2024-12-17)
7
-
8
- ### Features
9
-
10
- - **utxo-staking:** add support for wsh script type ([c3632a4](https://github.com/BitGo/BitGoJS/commit/c3632a456a92953ee52340c79740bcd9e6f66215))
11
-
12
- # [1.4.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/utxo-staking@1.3.5...@bitgo/utxo-staking@1.4.0) (2024-12-17)
13
-
14
- ### Features
15
-
16
- - **utxo-staking:** add support for wsh script type ([c3632a4](https://github.com/BitGo/BitGoJS/commit/c3632a456a92953ee52340c79740bcd9e6f66215))
17
-
18
- ## [1.3.5](https://github.com/BitGo/BitGoJS/compare/@bitgo/utxo-staking@1.3.4...@bitgo/utxo-staking@1.3.5) (2024-12-12)
19
-
20
- **Note:** Version bump only for package @bitgo/utxo-staking
21
-
22
- ## [1.3.4](https://github.com/BitGo/BitGoJS/compare/@bitgo/utxo-staking@1.3.3...@bitgo/utxo-staking@1.3.4) (2024-12-11)
23
-
24
- **Note:** Version bump only for package @bitgo/utxo-staking
25
-
26
- ## [1.3.3](https://github.com/BitGo/BitGoJS/compare/@bitgo/utxo-staking@1.3.2...@bitgo/utxo-staking@1.3.3) (2024-12-03)
27
-
28
- **Note:** Version bump only for package @bitgo/utxo-staking
29
-
30
- ## [1.3.2](https://github.com/BitGo/BitGoJS/compare/@bitgo/utxo-staking@1.3.1...@bitgo/utxo-staking@1.3.2) (2024-11-26)
31
-
32
- **Note:** Version bump only for package @bitgo/utxo-staking
33
-
34
- ## [1.3.1](https://github.com/BitGo/BitGoJS/compare/@bitgo/utxo-staking@1.3.0...@bitgo/utxo-staking@1.3.1) (2024-11-21)
35
-
36
- **Note:** Version bump only for package @bitgo/utxo-staking
37
-
38
- # 1.3.0 (2024-11-19)
39
-
40
- ### Features
41
-
42
- - **utxo-staking:** build staking transaction ([73b33bc](https://github.com/BitGo/BitGoJS/commit/73b33bc93e46934fe5e6002c52c0b1443a3d0d8d))
43
- - **utxo-staking:** create coredao staking outputs ([6b5ca4b](https://github.com/BitGo/BitGoJS/commit/6b5ca4b7c726fb6a4380526391416f6db356e0b7))
44
-
45
- # 1.2.0 (2024-11-14)
46
-
47
- ### Features
48
-
49
- - **utxo-staking:** build staking transaction ([73b33bc](https://github.com/BitGo/BitGoJS/commit/73b33bc93e46934fe5e6002c52c0b1443a3d0d8d))
50
- - **utxo-staking:** create coredao staking outputs ([6b5ca4b](https://github.com/BitGo/BitGoJS/commit/6b5ca4b7c726fb6a4380526391416f6db356e0b7))
51
-
52
- # 1.1.0 (2024-11-01)
53
-
54
- ### Bug Fixes
55
-
56
- - **utxo-coredao:** clarifications from the coredao team ([56157b3](https://github.com/BitGo/BitGoJS/commit/56157b34e6802895489928d8e7a87f8f5c8129ed))
57
- - **utxo-coredao:** fix json encoding to add newline ([bb5be2f](https://github.com/BitGo/BitGoJS/commit/bb5be2f91e0e7f1d59d94a1786fdd2cccc4ebad6))
58
-
59
- ### Features
60
-
61
- - **utxo-coredao:** descriptor for CoreDao ([791f9e4](https://github.com/BitGo/BitGoJS/commit/791f9e47033a8224759d98f0483f5b0bb9bbc524))
62
- - **utxo-coredao:** init repo and op-return ([60fa058](https://github.com/BitGo/BitGoJS/commit/60fa058f693cf722db8d5e7507539a5ec1c8b1a5))
63
- - **utxo-coredao:** parse and verify op-return ([32dc7c4](https://github.com/BitGo/BitGoJS/commit/32dc7c49f0ff5baeb0db4a20853f70745f71c02b))
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createMultiSigDescriptor = createMultiSigDescriptor;
4
- function asDescriptorKey(key, neutered) {
5
- if (Buffer.isBuffer(key)) {
6
- return key.toString('hex');
7
- }
8
- return (neutered ? key.neutered() : key).toBase58() + '/*';
9
- }
10
- /**
11
- * Create a multi-sig descriptor to produce a coredao staking address
12
- * @param scriptType segwit or legacy
13
- * @param locktime locktime for CLTV
14
- * @param m Total number of keys required to unlock
15
- * @param orderedKeys If Bip32Interfaces, these are xprvs or xpubs and are derivable.
16
- * If they are buffers, then they are pub/prv keys and are not derivable.
17
- * @param neutered If true, neuter the keys. Default to true
18
- */
19
- function createMultiSigDescriptor(scriptType, locktime, m, orderedKeys, neutered = true) {
20
- if (m > orderedKeys.length || m < 1) {
21
- throw new Error(`m (${m}) must be less than or equal to the number of keys (${orderedKeys.length}) and greater than 0`);
22
- }
23
- if (locktime <= 0) {
24
- throw new Error(`locktime (${locktime}) must be greater than 0`);
25
- }
26
- const keys = orderedKeys.map((key) => asDescriptorKey(key, neutered));
27
- const inner = `and_v(r:after(${locktime}),multi(${m},${keys.join(',')}))`;
28
- switch (scriptType) {
29
- case 'sh':
30
- return `sh(${inner})`;
31
- case 'sh-wsh':
32
- return `sh(wsh(${inner}))`;
33
- case 'wsh':
34
- return `wsh(${inner})`;
35
- }
36
- }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb3JlRGFvL2Rlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUF5QkEsNERBeUJDO0FBekNELFNBQVMsZUFBZSxDQUFDLEdBQTRCLEVBQUUsUUFBaUI7SUFDdEUsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQztBQUM3RCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQix3QkFBd0IsQ0FDdEMsVUFBc0IsRUFDdEIsUUFBZ0IsRUFDaEIsQ0FBUyxFQUNULFdBQXdDLEVBQ3hDLFFBQVEsR0FBRyxJQUFJO0lBRWYsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FDYixNQUFNLENBQUMsdURBQXVELFdBQVcsQ0FBQyxNQUFNLHNCQUFzQixDQUN2RyxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxRQUFRLDBCQUEwQixDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUN0RSxNQUFNLEtBQUssR0FBRyxpQkFBaUIsUUFBUSxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDMUUsUUFBUSxVQUFVLEVBQUUsQ0FBQztRQUNuQixLQUFLLElBQUk7WUFDUCxPQUFPLE1BQU0sS0FBSyxHQUFHLENBQUM7UUFDeEIsS0FBSyxRQUFRO1lBQ1gsT0FBTyxVQUFVLEtBQUssSUFBSSxDQUFDO1FBQzdCLEtBQUssS0FBSztZQUNSLE9BQU8sT0FBTyxLQUFLLEdBQUcsQ0FBQztJQUMzQixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJJUDMySW50ZXJmYWNlIH0gZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuXG4vKipcbiAqIFNjcmlwdCB0eXBlIGZvciBhIGRlc2NyaXB0b3IuXG4gKlxuICogU2VlIGh0dHBzOi8vZG9jcy5jb3JlZGFvLm9yZy9kb2NzL0xlYXJuL3Byb2R1Y3RzL2J0Yy1zdGFraW5nL2Rlc2lnbiNwMnNocDJ3c2gtb3V0cHV0XG4gKi9cbmV4cG9ydCB0eXBlIFNjcmlwdFR5cGUgPSAnc2gnIHwgJ3NoLXdzaCcgfCAnd3NoJztcblxuZnVuY3Rpb24gYXNEZXNjcmlwdG9yS2V5KGtleTogQklQMzJJbnRlcmZhY2UgfCBCdWZmZXIsIG5ldXRlcmVkOiBib29sZWFuKTogc3RyaW5nIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihrZXkpKSB7XG4gICAgcmV0dXJuIGtleS50b1N0cmluZygnaGV4Jyk7XG4gIH1cbiAgcmV0dXJuIChuZXV0ZXJlZCA/IGtleS5uZXV0ZXJlZCgpIDoga2V5KS50b0Jhc2U1OCgpICsgJy8qJztcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBtdWx0aS1zaWcgZGVzY3JpcHRvciB0byBwcm9kdWNlIGEgY29yZWRhbyBzdGFraW5nIGFkZHJlc3NcbiAqIEBwYXJhbSBzY3JpcHRUeXBlIHNlZ3dpdCBvciBsZWdhY3lcbiAqIEBwYXJhbSBsb2NrdGltZSBsb2NrdGltZSBmb3IgQ0xUVlxuICogQHBhcmFtIG0gVG90YWwgbnVtYmVyIG9mIGtleXMgcmVxdWlyZWQgdG8gdW5sb2NrXG4gKiBAcGFyYW0gb3JkZXJlZEtleXMgSWYgQmlwMzJJbnRlcmZhY2VzLCB0aGVzZSBhcmUgeHBydnMgb3IgeHB1YnMgYW5kIGFyZSBkZXJpdmFibGUuXG4gKiAgICAgICAgICAgICAgICAgICAgSWYgdGhleSBhcmUgYnVmZmVycywgdGhlbiB0aGV5IGFyZSBwdWIvcHJ2IGtleXMgYW5kIGFyZSBub3QgZGVyaXZhYmxlLlxuICogQHBhcmFtIG5ldXRlcmVkIElmIHRydWUsIG5ldXRlciB0aGUga2V5cy4gRGVmYXVsdCB0byB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNdWx0aVNpZ0Rlc2NyaXB0b3IoXG4gIHNjcmlwdFR5cGU6IFNjcmlwdFR5cGUsXG4gIGxvY2t0aW1lOiBudW1iZXIsXG4gIG06IG51bWJlcixcbiAgb3JkZXJlZEtleXM6IChCSVAzMkludGVyZmFjZSB8IEJ1ZmZlcilbXSxcbiAgbmV1dGVyZWQgPSB0cnVlXG4pOiBzdHJpbmcge1xuICBpZiAobSA+IG9yZGVyZWRLZXlzLmxlbmd0aCB8fCBtIDwgMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBtICgke219KSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIGtleXMgKCR7b3JkZXJlZEtleXMubGVuZ3RofSkgYW5kIGdyZWF0ZXIgdGhhbiAwYFxuICAgICk7XG4gIH1cbiAgaWYgKGxvY2t0aW1lIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGxvY2t0aW1lICgke2xvY2t0aW1lfSkgbXVzdCBiZSBncmVhdGVyIHRoYW4gMGApO1xuICB9XG4gIGNvbnN0IGtleXMgPSBvcmRlcmVkS2V5cy5tYXAoKGtleSkgPT4gYXNEZXNjcmlwdG9yS2V5KGtleSwgbmV1dGVyZWQpKTtcbiAgY29uc3QgaW5uZXIgPSBgYW5kX3YocjphZnRlcigke2xvY2t0aW1lfSksbXVsdGkoJHttfSwke2tleXMuam9pbignLCcpfSkpYDtcbiAgc3dpdGNoIChzY3JpcHRUeXBlKSB7XG4gICAgY2FzZSAnc2gnOlxuICAgICAgcmV0dXJuIGBzaCgke2lubmVyfSlgO1xuICAgIGNhc2UgJ3NoLXdzaCc6XG4gICAgICByZXR1cm4gYHNoKHdzaCgke2lubmVyfSkpYDtcbiAgICBjYXNlICd3c2gnOlxuICAgICAgcmV0dXJuIGB3c2goJHtpbm5lcn0pYDtcbiAgfVxufVxuIl19