@witnet/sdk 1.0.0-beta.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.
Files changed (149) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +103 -0
  3. package/dist/package.json +72 -0
  4. package/dist/src/bin/helpers.d.ts +91 -0
  5. package/dist/src/bin/helpers.d.ts.map +1 -0
  6. package/dist/src/bin/helpers.js +816 -0
  7. package/dist/src/index.d.ts +5 -0
  8. package/dist/src/index.d.ts.map +1 -0
  9. package/dist/src/index.js +47 -0
  10. package/dist/src/lib/crypto/account.d.ts +32 -0
  11. package/dist/src/lib/crypto/account.d.ts.map +1 -0
  12. package/dist/src/lib/crypto/account.js +106 -0
  13. package/dist/src/lib/crypto/coinbase.d.ts +10 -0
  14. package/dist/src/lib/crypto/coinbase.d.ts.map +1 -0
  15. package/dist/src/lib/crypto/coinbase.js +28 -0
  16. package/dist/src/lib/crypto/index.d.ts +8 -0
  17. package/dist/src/lib/crypto/index.d.ts.map +1 -0
  18. package/dist/src/lib/crypto/index.js +30 -0
  19. package/dist/src/lib/crypto/interfaces.d.ts +85 -0
  20. package/dist/src/lib/crypto/interfaces.d.ts.map +1 -0
  21. package/dist/src/lib/crypto/interfaces.js +3 -0
  22. package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts +55 -0
  23. package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -0
  24. package/dist/src/lib/crypto/payloads/DataRequestPayload.js +339 -0
  25. package/dist/src/lib/crypto/payloads/StakePayload.d.ts +28 -0
  26. package/dist/src/lib/crypto/payloads/StakePayload.d.ts.map +1 -0
  27. package/dist/src/lib/crypto/payloads/StakePayload.js +142 -0
  28. package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts +36 -0
  29. package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -0
  30. package/dist/src/lib/crypto/payloads/UnstakePayload.js +154 -0
  31. package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts +25 -0
  32. package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -0
  33. package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +128 -0
  34. package/dist/src/lib/crypto/payloads.d.ts +57 -0
  35. package/dist/src/lib/crypto/payloads.d.ts.map +1 -0
  36. package/dist/src/lib/crypto/payloads.js +170 -0
  37. package/dist/src/lib/crypto/signer.d.ts +33 -0
  38. package/dist/src/lib/crypto/signer.d.ts.map +1 -0
  39. package/dist/src/lib/crypto/signer.js +194 -0
  40. package/dist/src/lib/crypto/transmitters/DataRequests.d.ts +15 -0
  41. package/dist/src/lib/crypto/transmitters/DataRequests.d.ts.map +1 -0
  42. package/dist/src/lib/crypto/transmitters/DataRequests.js +23 -0
  43. package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts +12 -0
  44. package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -0
  45. package/dist/src/lib/crypto/transmitters/StakeDeposits.js +17 -0
  46. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts +18 -0
  47. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -0
  48. package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +53 -0
  49. package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts +11 -0
  50. package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -0
  51. package/dist/src/lib/crypto/transmitters/ValueTransfers.js +16 -0
  52. package/dist/src/lib/crypto/transmitters.d.ts +47 -0
  53. package/dist/src/lib/crypto/transmitters.d.ts.map +1 -0
  54. package/dist/src/lib/crypto/transmitters.js +416 -0
  55. package/dist/src/lib/crypto/types.d.ts +161 -0
  56. package/dist/src/lib/crypto/types.d.ts.map +1 -0
  57. package/dist/src/lib/crypto/types.js +273 -0
  58. package/dist/src/lib/crypto/utils.d.ts +21 -0
  59. package/dist/src/lib/crypto/utils.d.ts.map +1 -0
  60. package/dist/src/lib/crypto/utils.js +156 -0
  61. package/dist/src/lib/crypto/wallet.d.ts +120 -0
  62. package/dist/src/lib/crypto/wallet.d.ts.map +1 -0
  63. package/dist/src/lib/crypto/wallet.js +258 -0
  64. package/dist/src/lib/index.d.ts +5 -0
  65. package/dist/src/lib/index.d.ts.map +1 -0
  66. package/dist/src/lib/index.js +44 -0
  67. package/dist/src/lib/radon/ccdr/eth.d.ts +160 -0
  68. package/dist/src/lib/radon/ccdr/eth.d.ts.map +1 -0
  69. package/dist/src/lib/radon/ccdr/eth.js +272 -0
  70. package/dist/src/lib/radon/ccdr/index.d.ts +14 -0
  71. package/dist/src/lib/radon/ccdr/index.d.ts.map +1 -0
  72. package/dist/src/lib/radon/ccdr/index.js +39 -0
  73. package/dist/src/lib/radon/ccdr/wit.d.ts +23 -0
  74. package/dist/src/lib/radon/ccdr/wit.d.ts.map +1 -0
  75. package/dist/src/lib/radon/ccdr/wit.js +35 -0
  76. package/dist/src/lib/radon/filters.d.ts +14 -0
  77. package/dist/src/lib/radon/filters.d.ts.map +1 -0
  78. package/dist/src/lib/radon/filters.js +45 -0
  79. package/dist/src/lib/radon/index.d.ts +296 -0
  80. package/dist/src/lib/radon/index.d.ts.map +1 -0
  81. package/dist/src/lib/radon/index.js +707 -0
  82. package/dist/src/lib/radon/reducers.d.ts +29 -0
  83. package/dist/src/lib/radon/reducers.d.ts.map +1 -0
  84. package/dist/src/lib/radon/reducers.js +66 -0
  85. package/dist/src/lib/radon/types.d.ts +521 -0
  86. package/dist/src/lib/radon/types.d.ts.map +1 -0
  87. package/dist/src/lib/radon/types.js +936 -0
  88. package/dist/src/lib/radon/utils.d.ts +53 -0
  89. package/dist/src/lib/radon/utils.d.ts.map +1 -0
  90. package/dist/src/lib/radon/utils.js +153 -0
  91. package/dist/src/lib/rpc/index.d.ts +3 -0
  92. package/dist/src/lib/rpc/index.d.ts.map +1 -0
  93. package/dist/src/lib/rpc/index.js +19 -0
  94. package/dist/src/lib/rpc/nodes.d.ts +40 -0
  95. package/dist/src/lib/rpc/nodes.d.ts.map +1 -0
  96. package/dist/src/lib/rpc/nodes.js +293 -0
  97. package/dist/src/lib/rpc/provider.d.ts +88 -0
  98. package/dist/src/lib/rpc/provider.d.ts.map +1 -0
  99. package/dist/src/lib/rpc/provider.js +336 -0
  100. package/dist/src/lib/rpc/reporter.d.ts +18 -0
  101. package/dist/src/lib/rpc/reporter.d.ts.map +1 -0
  102. package/dist/src/lib/rpc/reporter.js +30 -0
  103. package/dist/src/lib/rpc/types.d.ts +409 -0
  104. package/dist/src/lib/rpc/types.d.ts.map +1 -0
  105. package/dist/src/lib/rpc/types.js +81 -0
  106. package/dist/src/lib/types.d.ts +18 -0
  107. package/dist/src/lib/types.d.ts.map +1 -0
  108. package/dist/src/lib/types.js +7 -0
  109. package/dist/src/lib/utils.d.ts +13 -0
  110. package/dist/src/lib/utils.d.ts.map +1 -0
  111. package/dist/src/lib/utils.js +97 -0
  112. package/dist/witnet/assets/index.d.ts +30 -0
  113. package/dist/witnet/assets/index.d.ts.map +1 -0
  114. package/dist/witnet/assets/index.js +6 -0
  115. package/dist/witnet/assets/modals/index.d.ts +18 -0
  116. package/dist/witnet/assets/modals/index.d.ts.map +1 -0
  117. package/dist/witnet/assets/modals/index.js +21 -0
  118. package/dist/witnet/assets/modals/web3/eth.d.ts +5 -0
  119. package/dist/witnet/assets/modals/web3/eth.d.ts.map +1 -0
  120. package/dist/witnet/assets/modals/web3/eth.js +26 -0
  121. package/dist/witnet/assets/modals/web3/wit.d.ts +4 -0
  122. package/dist/witnet/assets/modals/web3/wit.d.ts.map +1 -0
  123. package/dist/witnet/assets/modals/web3/wit.js +20 -0
  124. package/dist/witnet/assets/requests.d.ts +11 -0
  125. package/dist/witnet/assets/requests.d.ts.map +1 -0
  126. package/dist/witnet/assets/requests.js +88 -0
  127. package/dist/witnet/witnet.proto.json +1325 -0
  128. package/package.json +72 -0
  129. package/src/bin/cli/history.js +31 -0
  130. package/src/bin/cli/inspect.js +359 -0
  131. package/src/bin/cli/network.js +592 -0
  132. package/src/bin/cli/nodes.js +364 -0
  133. package/src/bin/cli/radon.js +814 -0
  134. package/src/bin/cli/wallet.js +1000 -0
  135. package/src/bin/helpers.js +829 -0
  136. package/src/bin/postinstall.js +9 -0
  137. package/src/bin/toolkit.js +294 -0
  138. package/witnet/assets/_index.js +8 -0
  139. package/witnet/assets/_requests.js +25 -0
  140. package/witnet/assets/_sources.js +36 -0
  141. package/witnet/assets/_templates.js +36 -0
  142. package/witnet/assets/index.js +4 -0
  143. package/witnet/assets/modals/index.js +25 -0
  144. package/witnet/assets/modals/web3/btc.js +0 -0
  145. package/witnet/assets/modals/web3/eth.js +29 -0
  146. package/witnet/assets/modals/web3/sol.js +0 -0
  147. package/witnet/assets/modals/web3/wit.js +23 -0
  148. package/witnet/assets/requests.js +94 -0
  149. package/witnet/witnet.proto.json +1325 -0
@@ -0,0 +1,36 @@
1
+ import { Epoch, ValueTransferOutput } from "../../types";
2
+ import { ILedger, IJsonRpcProvider } from "../interfaces";
3
+ import { TransactionPayload } from "../payloads";
4
+ import { Coins, PublicKeyHashString, TransactionParams, TransactionPriority } from "../types";
5
+ export type StakeWithdrawalParams = TransactionParams & {
6
+ nonce?: Epoch;
7
+ validator: PublicKeyHashString;
8
+ value: Coins;
9
+ };
10
+ export declare class UnstakePayload extends TransactionPayload<StakeWithdrawalParams> {
11
+ static MIN_TIMELOCK_SECS: number;
12
+ static WEIGHT: number;
13
+ protected _outputs: Array<ValueTransferOutput>;
14
+ constructor(protoTypeName: string, specs?: any);
15
+ get covered(): boolean;
16
+ get maxWeight(): number;
17
+ get outputs(): Array<ValueTransferOutput>;
18
+ get prepared(): boolean;
19
+ get value(): Coins;
20
+ get weight(): number;
21
+ consumeUtxos(ledger: ILedger): Promise<bigint>;
22
+ intoReceipt(target: StakeWithdrawalParams): {
23
+ withdrawer?: string | undefined;
24
+ nonce: number | undefined;
25
+ outputLock: number;
26
+ validator: string;
27
+ };
28
+ prepareOutputs(): any;
29
+ resetTarget(target: StakeWithdrawalParams): any;
30
+ toJSON(_humanize?: boolean): any;
31
+ toProtobuf(): any;
32
+ validateTarget(target?: any): StakeWithdrawalParams | undefined;
33
+ protected _cleanTargetExtras(target?: any): any;
34
+ protected _estimateNetworkFees(provider: IJsonRpcProvider, priority?: TransactionPriority): Promise<bigint>;
35
+ }
36
+ //# sourceMappingURL=UnstakePayload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnstakePayload.d.ts","sourceRoot":"","sources":["../../../../../src/lib/crypto/payloads/UnstakePayload.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,EAAE,KAAK,EAAiB,mBAAmB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAE5G,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,GAAG;IACpD,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,EAAE,mBAAmB,CAAC;IAC/B,KAAK,EAAE,KAAK,CAAC;CAChB,CAAA;AAED,qBAAa,cAAe,SAAQ,kBAAkB,CAAC,qBAAqB,CAAC;IAEzE,OAAc,iBAAiB,SAAa;IAC5C,OAAc,MAAM,SAAO;IAE3B,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAK;gBAEtC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG;IAI/C,IAAW,OAAO,IAAI,OAAO,CAG5B;IAED,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,OAAO,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAE/C;IAED,IAAW,QAAQ,IAAI,OAAO,CAK7B;IAED,IAAW,KAAK,IAAI,KAAK,CAExB;IAED,IAAW,MAAM,IAAI,MAAM,CAE1B;IAEY,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAiCpD,WAAW,CAAC,MAAM,EAAE,qBAAqB;;;;;;IASzC,cAAc,IAAI,GAAG;IAErB,WAAW,CAAC,MAAM,EAAE,qBAAqB,GAAG,GAAG;IAQ/C,MAAM,CAAC,SAAS,UAAQ,GAAG,GAAG;IAa9B,UAAU,IAAI,GAAG;IAejB,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,qBAAqB,GAAG,SAAS;IA+BtE,SAAS,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG;cAa/B,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,sBAA6B,GAAG,OAAO,CAAC,MAAM,CAAC;CAU3H"}
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnstakePayload = void 0;
4
+ const Long = require("long");
5
+ const payloads_1 = require("../payloads");
6
+ const types_1 = require("../types");
7
+ class UnstakePayload extends payloads_1.TransactionPayload {
8
+ constructor(protoTypeName, specs) {
9
+ super(protoTypeName, specs);
10
+ this._outputs = [];
11
+ }
12
+ get covered() {
13
+ return this._covered > 0
14
+ && this.outputs.length > 0;
15
+ }
16
+ get maxWeight() {
17
+ return UnstakePayload.WEIGHT;
18
+ }
19
+ get outputs() {
20
+ return this._outputs;
21
+ }
22
+ get prepared() {
23
+ return (this._target !== undefined
24
+ && this._outputs.length > 0);
25
+ }
26
+ get value() {
27
+ return this._target?.value || types_1.Coins.zero();
28
+ }
29
+ get weight() {
30
+ return UnstakePayload.WEIGHT;
31
+ }
32
+ async consumeUtxos(ledger) {
33
+ if (!this._target) {
34
+ throw new Error(`${this.constructor.name}: internal error: no in-flight params.`);
35
+ }
36
+ else if (!this._covered) {
37
+ const signer = ledger.getSigner();
38
+ if (!signer) {
39
+ throw new Error(`${this.constructor.name}: internal error: no default Signer for ${ledger.constructor.name} ${ledger.pkh}.`);
40
+ }
41
+ // settle fees if none specified
42
+ if (this._target?.fees instanceof types_1.Coins) {
43
+ this._fees = this._target.fees.pedros;
44
+ }
45
+ else {
46
+ const priority = this._target?.fees || types_1.TransactionPriority.Medium;
47
+ this._fees = await this._estimateNetworkFees(ledger.provider, priority);
48
+ }
49
+ // determine whether withdrawn amount covers MORE than the fees
50
+ this._change = this.value.pedros - this._fees;
51
+ if (this._change > 0) {
52
+ // settle nonce if none specified
53
+ this._covered = BigInt(this._target?.nonce || await signer.getStakeEntryNonce(this._target.validator));
54
+ this._outputs.push({
55
+ pkh: signer.pkh,
56
+ value: this.value.pedros - this._fees,
57
+ time_lock: UnstakePayload.MIN_TIMELOCK_SECS
58
+ });
59
+ }
60
+ }
61
+ return this._change;
62
+ }
63
+ intoReceipt(target) {
64
+ return {
65
+ nonce: target.nonce,
66
+ outputLock: UnstakePayload.MIN_TIMELOCK_SECS,
67
+ validator: target.validator,
68
+ ...(this._outputs ? { withdrawer: this._outputs[0].pkh } : {}),
69
+ };
70
+ }
71
+ prepareOutputs() { }
72
+ resetTarget(target) {
73
+ this._change = 0n;
74
+ this._covered = 0n;
75
+ this._fees = 0n;
76
+ this._outputs = [];
77
+ this._target = target;
78
+ }
79
+ toJSON(_humanize = false) {
80
+ return {
81
+ fee: this._fees.toString(),
82
+ nonce: Number(this._covered),
83
+ operator: this._target?.validator,
84
+ withdrawal: {
85
+ pkh: this.outputs[0].pkh,
86
+ value: this.outputs[0].value.toString(),
87
+ time_lock: UnstakePayload.MIN_TIMELOCK_SECS,
88
+ },
89
+ };
90
+ }
91
+ toProtobuf() {
92
+ if (this.prepared && this._target) {
93
+ return {
94
+ ...(this._fees > 0 ? { fee: Long.fromValue(this._fees) } : {}),
95
+ nonce: Number(this._covered),
96
+ operator: { hash: Array.from(types_1.PublicKeyHash.fromBech32(this._target.validator).toBytes20()) },
97
+ withdrawal: {
98
+ pkh: { hash: Array.from(types_1.PublicKeyHash.fromBech32(this.outputs[0].pkh).toBytes20()) },
99
+ value: Long.fromValue(this.outputs[0].value),
100
+ timeLock: this.outputs[0].time_lock,
101
+ },
102
+ };
103
+ }
104
+ }
105
+ validateTarget(target) {
106
+ target = this._cleanTargetExtras(target);
107
+ if (target && Object.keys(target).length > 0) {
108
+ if (!(target
109
+ && (!target?.fees
110
+ || (target.fees instanceof types_1.Coins && target.fees.pedros >= 0
111
+ || Object.values(types_1.TransactionPriority).includes(target.fees)))
112
+ && target?.value && target.value.pedros > 0
113
+ && target?.validator)) {
114
+ throw new TypeError(`${this.constructor.name}: invalid options: ${JSON.stringify(target)}`);
115
+ }
116
+ else {
117
+ if (target?.nonce || parseInt(target.nonce) <= 0) {
118
+ throw new TypeError(`${this.constructor.name}: nonce must be positive if provided.`);
119
+ }
120
+ // asume zero fees if not given in target params
121
+ if (!target?.fees) {
122
+ target.fees = types_1.Coins.zero();
123
+ }
124
+ return target;
125
+ }
126
+ }
127
+ else {
128
+ return undefined;
129
+ }
130
+ }
131
+ _cleanTargetExtras(target) {
132
+ if (target) {
133
+ return Object.fromEntries(Object.entries(target).filter(([key,]) => [
134
+ 'fees',
135
+ 'nonce',
136
+ 'value',
137
+ 'validator',
138
+ ].includes(key)));
139
+ }
140
+ }
141
+ async _estimateNetworkFees(provider, priority = types_1.TransactionPriority.Medium) {
142
+ if (!this._priorities) {
143
+ this._priorities = await provider.priorities();
144
+ }
145
+ return BigInt(Math.floor(
146
+ // todo: replace `vtt_` for `ut_`
147
+ this._priorities[`vtt_${priority}`].priority
148
+ * this.weight));
149
+ }
150
+ }
151
+ exports.UnstakePayload = UnstakePayload;
152
+ UnstakePayload.MIN_TIMELOCK_SECS = 1209600;
153
+ UnstakePayload.WEIGHT = 153;
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW5zdGFrZVBheWxvYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NyeXB0by9wYXlsb2Fkcy9VbnN0YWtlUGF5bG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7QUFJNUIsMENBQWdEO0FBQ2hELG9DQUE0RztBQVE1RyxNQUFhLGNBQWUsU0FBUSw2QkFBeUM7SUFPekUsWUFBYSxhQUFxQixFQUFFLEtBQVc7UUFDM0MsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUhyQixhQUFRLEdBQStCLEVBQUUsQ0FBQTtJQUluRCxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUM7ZUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDaEIsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFBO0lBQ2hDLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDZCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUE7SUFDeEIsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE9BQU8sQ0FDSCxJQUFJLENBQUMsT0FBTyxLQUFLLFNBQVM7ZUFDbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUNsQyxDQUFBO0lBQ0wsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksYUFBSyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzlDLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDYixPQUFPLGNBQWMsQ0FBQyxNQUFNLENBQUE7SUFDaEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBZTtRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9B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ZyA9IHJlcXVpcmUoXCJsb25nXCIpXHJcblxyXG5pbXBvcnQgeyBFcG9jaCwgVmFsdWVUcmFuc2Zlck91dHB1dCB9IGZyb20gXCIuLi8uLi90eXBlc1wiXHJcbmltcG9ydCB7IElMZWRnZXIsIElKc29uUnBjUHJvdmlkZXIgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiXHJcbmltcG9ydCB7IFRyYW5zYWN0aW9uUGF5bG9hZCB9IGZyb20gXCIuLi9wYXlsb2Fkc1wiXHJcbmltcG9ydCB7IENvaW5zLCBQdWJsaWNLZXlIYXNoLCBQdWJsaWNLZXlIYXNoU3RyaW5nLCBUcmFuc2FjdGlvblBhcmFtcywgVHJhbnNhY3Rpb25Qcmlvcml0eSB9IGZyb20gXCIuLi90eXBlc1wiXHJcblxyXG5leHBvcnQgdHlwZSBTdGFrZVdpdGhkcmF3YWxQYXJhbXMgPSBUcmFuc2FjdGlvblBhcmFtcyAmIHtcclxuICAgIG5vbmNlPzogRXBvY2gsXHJcbiAgICB2YWxpZGF0b3I6IFB1YmxpY0tleUhhc2hTdHJpbmcsXHJcbiAgICB2YWx1ZTogQ29pbnMsXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBVbnN0YWtlUGF5bG9hZCBleHRlbmRzIFRyYW5zYWN0aW9uUGF5bG9hZDxTdGFrZVdpdGhkcmF3YWxQYXJhbXM+IHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIE1JTl9USU1FTE9DS19TRUNTID0gMV8yMDlfNjAwO1xyXG4gICAgcHVibGljIHN0YXRpYyBXRUlHSFQgPSAxNTM7XHJcblxyXG4gICAgcHJvdGVjdGVkIF9vdXRwdXRzOiBBcnJheTxWYWx1ZVRyYW5zZmVyT3V0cHV0PiA9IFtdXHJcblxyXG4gICAgY29uc3RydWN0b3IgKHByb3RvVHlwZU5hbWU6IHN0cmluZywgc3BlY3M/OiBhbnkpIHtcclxuICAgICAgICBzdXBlcihwcm90b1R5cGVOYW1lLCBzcGVjcylcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGNvdmVyZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvdmVyZWQgPiAwXHJcbiAgICAgICAgICAgICYmIHRoaXMub3V0cHV0cy5sZW5ndGggPiAwIFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgbWF4V2VpZ2h0KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIFVuc3Rha2VQYXlsb2FkLldFSUdIVFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBBcnJheTxWYWx1ZVRyYW5zZmVyT3V0cHV0PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX291dHB1dHNcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHByZXBhcmVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuX3RhcmdldCAhPT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLl9vdXRwdXRzLmxlbmd0aCA+IDBcclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBDb2lucyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhcmdldD8udmFsdWUgfHwgQ29pbnMuemVybygpXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCB3ZWlnaHQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gVW5zdGFrZVBheWxvYWQuV0VJR0hUXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHB1YmxpYyBhc3luYyBjb25zdW1lVXR4b3MobGVkZ2VyOiBJTGVkZ2VyKTogUHJvbWlzZTxiaWdpbnQ+IHtcclxuICAgICAgICBpZiAoIXRoaXMuX3RhcmdldCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTogaW50ZXJuYWwgZXJyb3I6IG5vIGluLWZsaWdodCBwYXJhbXMuYClcclxuICAgICAgICBcclxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jb3ZlcmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpZ25lciA9IGxlZGdlci5nZXRTaWduZXIoKVxyXG4gICAgICAgICAgICBpZiAoIXNpZ25lcikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludGVybmFsIGVycm9yOiBubyBkZWZhdWx0IFNpZ25lciBmb3IgJHtsZWRnZXIuY29uc3RydWN0b3IubmFtZX0gJHtsZWRnZXIucGtofS5gXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gc2V0dGxlIGZlZXMgaWYgbm9uZSBzcGVjaWZpZWRcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3RhcmdldD8uZmVlcyBpbnN0YW5jZW9mIENvaW5zKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mZWVzID0gdGhpcy5fdGFyZ2V0LmZlZXMucGVkcm9zXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcmlvcml0eSA9IHRoaXMuX3RhcmdldD8uZmVlcyBhcyBUcmFuc2FjdGlvblByaW9yaXR5IHx8IFRyYW5zYWN0aW9uUHJpb3JpdHkuTWVkaXVtXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mZWVzID0gYXdhaXQgdGhpcy5fZXN0aW1hdGVOZXR3b3JrRmVlcyhsZWRnZXIucHJvdmlkZXIsIHByaW9yaXR5KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGRldGVybWluZSB3aGV0aGVyIHdpdGhkcmF3biBhbW91bnQgY292ZXJzIE1PUkUgdGhhbiB0aGUgZmVlc1xyXG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2UgPSB0aGlzLnZhbHVlLnBlZHJvcyAtIHRoaXMuX2ZlZXNcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2NoYW5nZSA+IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIHNldHRsZSBub25jZSBpZiBub25lIHNwZWNpZmllZFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY292ZXJlZCA9IEJpZ0ludCh0aGlzLl90YXJnZXQ/Lm5vbmNlIHx8IGF3YWl0IHNpZ25lci5nZXRTdGFrZUVudHJ5Tm9uY2UodGhpcy5fdGFyZ2V0LnZhbGlkYXRvcikpXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vdXRwdXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHBraDogc2lnbmVyLnBraCxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZS5wZWRyb3MgLSB0aGlzLl9mZWVzLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpbWVfbG9jazogVW5zdGFrZVBheWxvYWQuTUlOX1RJTUVMT0NLX1NFQ1NcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoYW5nZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW50b1JlY2VpcHQodGFyZ2V0OiBTdGFrZVdpdGhkcmF3YWxQYXJhbXMpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBub25jZTogdGFyZ2V0Lm5vbmNlLFxyXG4gICAgICAgICAgICBvdXRwdXRMb2NrOiBVbnN0YWtlUGF5bG9hZC5NSU5fVElNRUxPQ0tfU0VDUyxcclxuICAgICAgICAgICAgdmFsaWRhdG9yOiB0YXJnZXQudmFsaWRhdG9yLFxyXG4gICAgICAgICAgICAuLi4odGhpcy5fb3V0cHV0cyA/IHsgd2l0aGRyYXdlcjogdGhpcy5fb3V0cHV0c1swXS5wa2ggfSA6IHt9KSxcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHByZXBhcmVPdXRwdXRzKCk6IGFueSB7fVxyXG5cclxuICAgIHB1YmxpYyByZXNldFRhcmdldCh0YXJnZXQ6IFN0YWtlV2l0aGRyYXdhbFBhcmFtcyk6IGFueSB7XHJcbiAgICAgICAgdGhpcy5fY2hhbmdlID0gMG5cclxuICAgICAgICB0aGlzLl9jb3ZlcmVkID0gMG5cclxuICAgICAgICB0aGlzLl9mZWVzID0gMG5cclxuICAgICAgICB0aGlzLl9vdXRwdXRzID0gW11cclxuICAgICAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXRcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdG9KU09OKF9odW1hbml6ZSA9IGZhbHNlKTogYW55IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmZWU6IHRoaXMuX2ZlZXMudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgbm9uY2U6IE51bWJlcih0aGlzLl9jb3ZlcmVkKSxcclxuICAgICAgICAgICAgb3BlcmF0b3I6IHRoaXMuX3RhcmdldD8udmFsaWRhdG9yLFxyXG4gICAgICAgICAgICB3aXRoZHJhd2FsOiB7XHJcbiAgICAgICAgICAgICAgICBwa2g6IHRoaXMub3V0cHV0c1swXS5wa2gsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5vdXRwdXRzWzBdLnZhbHVlLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICB0aW1lX2xvY2s6IFVuc3Rha2VQYXlsb2FkLk1JTl9USU1FTE9DS19TRUNTLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH1cclxuICAgIH0gICBcclxuXHJcbiAgICBwdWJsaWMgdG9Qcm90b2J1ZigpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLnByZXBhcmVkICYmIHRoaXMuX3RhcmdldCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgLi4uKHRoaXMuX2ZlZXMgPiAwID8geyBmZWU6IExvbmcuZnJvbVZhbHVlKHRoaXMuX2ZlZXMpIH0gOiB7fSksXHJcbiAgICAgICAgICAgICAgICBub25jZTogTnVtYmVyKHRoaXMuX2NvdmVyZWQpLFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IHsgaGFzaDogQXJyYXkuZnJvbShQdWJsaWNLZXlIYXNoLmZyb21CZWNoMzIodGhpcy5fdGFyZ2V0LnZhbGlkYXRvcikudG9CeXRlczIwKCkpIH0sXHJcbiAgICAgICAgICAgICAgICB3aXRoZHJhd2FsOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGtoOiB7IGhhc2g6IEFycmF5LmZyb20oUHVibGljS2V5SGFzaC5mcm9tQmVjaDMyKHRoaXMub3V0cHV0c1swXS5wa2gpLnRvQnl0ZXMyMCgpKSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBMb25nLmZyb21WYWx1ZSh0aGlzLm91dHB1dHNbMF0udmFsdWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpbWVMb2NrOiB0aGlzLm91dHB1dHNbMF0udGltZV9sb2NrLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmFsaWRhdGVUYXJnZXQodGFyZ2V0PzogYW55KTogU3Rha2VXaXRoZHJhd2FsUGFyYW1zIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICB0YXJnZXQgPSB0aGlzLl9jbGVhblRhcmdldEV4dHJhcyh0YXJnZXQpXHJcbiAgICAgICAgaWYgKHRhcmdldCAmJiBPYmplY3Qua2V5cyh0YXJnZXQpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKCEoXHJcbiAgICAgICAgICAgICAgICB0YXJnZXRcclxuICAgICAgICAgICAgICAgICAgICAmJiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICF0YXJnZXQ/LmZlZXMgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5mZWVzIGluc3RhbmNlb2YgQ29pbnMgJiYgKHRhcmdldC5mZWVzIGFzIENvaW5zKS5wZWRyb3MgPj0gMCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IE9iamVjdC52YWx1ZXMoVHJhbnNhY3Rpb25Qcmlvcml0eSkuaW5jbHVkZXModGFyZ2V0LmZlZXMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgdGFyZ2V0Py52YWx1ZSAmJiAodGFyZ2V0LnZhbHVlIGFzIENvaW5zKS5wZWRyb3MgPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgdGFyZ2V0Py52YWxpZGF0b3JcclxuICAgICAgICAgICAgKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnZhbGlkIG9wdGlvbnM6ICR7SlNPTi5zdHJpbmdpZnkodGFyZ2V0KX1gKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldD8ubm9uY2UgfHwgcGFyc2VJbnQodGFyZ2V0Lm5vbmNlKSA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBub25jZSBtdXN0IGJlIHBvc2l0aXZlIGlmIHByb3ZpZGVkLmApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBhc3VtZSB6ZXJvIGZlZXMgaWYgbm90IGdpdmVuIGluIHRhcmdldCBwYXJhbXNcclxuICAgICAgICAgICAgICAgIGlmICghdGFyZ2V0Py5mZWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmZlZXMgPSBDb2lucy56ZXJvKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQgYXMgU3Rha2VXaXRoZHJhd2FsUGFyYW1zXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfY2xlYW5UYXJnZXRFeHRyYXModGFyZ2V0PzogYW55KTogYW55IHtcclxuICAgICAgICBpZiAodGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyh0YXJnZXQpLmZpbHRlcigoW2tleSxdKSA9PiBbXHJcbiAgICAgICAgICAgICAgICAgICAgJ2ZlZXMnLFxyXG4gICAgICAgICAgICAgICAgICAgICdub25jZScsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAndmFsaWRhdG9yJyxcclxuICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMoa2V5KSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgX2VzdGltYXRlTmV0d29ya0ZlZXMocHJvdmlkZXI6IElKc29uUnBjUHJvdmlkZXIsIHByaW9yaXR5ID0gVHJhbnNhY3Rpb25Qcmlvcml0eS5NZWRpdW0pOiBQcm9taXNlPGJpZ2ludD4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fcHJpb3JpdGllcykge1xyXG4gICAgICAgICAgICB0aGlzLl9wcmlvcml0aWVzID0gYXdhaXQgcHJvdmlkZXIucHJpb3JpdGllcygpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBCaWdJbnQoTWF0aC5mbG9vcihcclxuICAgICAgICAgICAgLy8gdG9kbzogcmVwbGFjZSBgdnR0X2AgZm9yIGB1dF9gXHJcbiAgICAgICAgICAgIHRoaXMuX3ByaW9yaXRpZXNbYHZ0dF8ke3ByaW9yaXR5fWBdLnByaW9yaXR5XHJcbiAgICAgICAgICAgICAgICAqIHRoaXMud2VpZ2h0XHJcbiAgICAgICAgKSk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,25 @@
1
+ import { IJsonRpcProvider } from "../../types";
2
+ import { TransactionPayloadMultiSig } from "../payloads";
3
+ import { Coins, PublicKeyHashString, TransactionParams, TransactionPriority } from "../types";
4
+ export type ValueTransferParams = TransactionParams & {
5
+ recipients: Array<[pkh: PublicKeyHashString, value: Coins]>;
6
+ timelock?: number;
7
+ };
8
+ export declare class ValueTransferPayload extends TransactionPayloadMultiSig<ValueTransferParams> {
9
+ static MAX_WEIGHT: number;
10
+ constructor(protoTypeName: string, initialTarget?: ValueTransferParams);
11
+ get maxWeight(): number;
12
+ get value(): Coins;
13
+ get weight(): number;
14
+ prepareOutputs(change?: {
15
+ value: bigint;
16
+ pkh: PublicKeyHashString;
17
+ }): any;
18
+ intoReceipt(target: ValueTransferParams): any;
19
+ toJSON(): any;
20
+ toProtobuf(): any;
21
+ validateTarget(target?: any): ValueTransferParams | undefined;
22
+ protected _cleanTargetExtras(target?: any): any;
23
+ protected _estimateNetworkFees(provider: IJsonRpcProvider, priority?: TransactionPriority): Promise<bigint>;
24
+ }
25
+ //# sourceMappingURL=ValueTransferPayload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ValueTransferPayload.d.ts","sourceRoot":"","sources":["../../../../../src/lib/crypto/payloads/ValueTransferPayload.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AACxD,OAAO,EAAE,KAAK,EAAiB,mBAAmB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAE5G,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,GAAG;IAClD,UAAU,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAAA;AAMD,qBAAa,oBAAqB,SAAQ,0BAA0B,CAAC,mBAAmB,CAAC;IAErF,OAAc,UAAU,SAAS;gBAEpB,aAAa,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,mBAAmB;IAIvE,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,IAAW,KAAK,IAAI,KAAK,CAExB;IAED,IAAW,MAAM,IAAI,MAAM,CAK1B;IAEM,cAAc,CAAC,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,mBAAmB,CAAA;KAAE,GAAG,GAAG;IAWzE,WAAW,CAAC,MAAM,EAAE,mBAAmB,GAAG,GAAG;IAO7C,MAAM,IAAI,GAAG;IAcb,UAAU,IAAI,GAAG;IAuBjB,cAAc,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,mBAAmB,GAAG,SAAS;IAsCpE,SAAS,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG;cAY/B,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,sBAA6B,GAAG,OAAO,CAAC,MAAM,CAAC;CAc3H"}
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ValueTransferPayload = void 0;
4
+ const Long = require("long");
5
+ const helpers_1 = require("../../../bin/helpers");
6
+ const payloads_1 = require("../payloads");
7
+ const types_1 = require("../types");
8
+ const TX_WEIGHT_INPUT_SIZE = 133;
9
+ const TX_WEIGHT_OUTPUT_SIZE = 36;
10
+ const TX_WEIGHT_GAMMA = 10;
11
+ class ValueTransferPayload extends payloads_1.TransactionPayloadMultiSig {
12
+ constructor(protoTypeName, initialTarget) {
13
+ super(protoTypeName, initialTarget);
14
+ }
15
+ get maxWeight() {
16
+ return ValueTransferPayload.MAX_WEIGHT;
17
+ }
18
+ get value() {
19
+ return types_1.Coins.fromPedros(this._target?.recipients.reduce((prev, [, curr]) => prev + curr.pedros, 0n) || 0n);
20
+ }
21
+ get weight() {
22
+ return (this._inputs.length * TX_WEIGHT_INPUT_SIZE
23
+ + this._outputs.length * TX_WEIGHT_OUTPUT_SIZE * TX_WEIGHT_GAMMA);
24
+ }
25
+ prepareOutputs(change) {
26
+ if (this._target && this._outputs.length === 0) {
27
+ this._outputs.push(...this._target.recipients.map(([pkh, value]) => ({
28
+ pkh,
29
+ value: value.pedros,
30
+ time_lock: this._target?.timelock || 0
31
+ })));
32
+ super.prepareOutputs(change);
33
+ }
34
+ }
35
+ intoReceipt(target) {
36
+ return {
37
+ outputLock: target.timelock,
38
+ recipients: target.recipients.map(([pkh,]) => pkh).filter((pkh, index, array) => index === array.indexOf(pkh)),
39
+ };
40
+ }
41
+ toJSON() {
42
+ return {
43
+ inputs: this.inputs
44
+ .map(utxo => {
45
+ return { output_pointer: utxo.output_pointer };
46
+ }),
47
+ outputs: this.outputs.map(vto => ({
48
+ pkh: vto.pkh,
49
+ time_lock: vto.time_lock,
50
+ value: vto.value.toString(),
51
+ }))
52
+ };
53
+ }
54
+ toProtobuf() {
55
+ if (this.prepared) {
56
+ return {
57
+ inputs: this.inputs
58
+ .map(utxo => {
59
+ const transactionId = utxo.output_pointer.split(':')[0];
60
+ const outputIndex = parseInt(utxo.output_pointer.split(':')[1]);
61
+ return {
62
+ outputPointer: {
63
+ transactionId: { SHA256: Array.from((0, helpers_1.fromHexString)(transactionId)) },
64
+ ...(outputIndex > 0 ? { outputIndex } : {}),
65
+ },
66
+ };
67
+ }),
68
+ outputs: this.outputs.map(vto => ({
69
+ pkh: { hash: Array.from(types_1.PublicKeyHash.fromBech32(vto.pkh).toBytes20()), },
70
+ value: Long.fromValue(vto.value),
71
+ ...(vto.time_lock > 0 ? { timeLock: vto.time_lock } : {}),
72
+ }))
73
+ };
74
+ }
75
+ }
76
+ validateTarget(target) {
77
+ target = this._cleanTargetExtras(target);
78
+ if (target && Object.keys(target).length > 0) {
79
+ if (!target) {
80
+ throw new TypeError(`${this.constructor.name}: no options passed.`);
81
+ }
82
+ else if (!(!target?.fees
83
+ || ((target.fees instanceof types_1.Coins && target.fees.pedros > 0)
84
+ || Object.values(types_1.TransactionPriority).includes(target.fees)))) {
85
+ throw new TypeError(`${this.constructor.name}: invalid fees: ${target.fees}`);
86
+ }
87
+ else if (!target?.recipients) {
88
+ throw new TypeError(`${this.constructor.name}: no recipients.`);
89
+ }
90
+ else if (!(Array.isArray(target.recipients)
91
+ && target.recipients.length > 0
92
+ && target.recipients.filter(([, value]) => value instanceof types_1.Coins))) {
93
+ throw new TypeError(`${this.constructor.name}: invalid recipients: ${target.recipients}`);
94
+ }
95
+ else if (!(!target?.timelock || target.timelock >= 0)) {
96
+ throw new TypeError(`${this.constructor.name}: invalid timelock: ${target.timelock}`);
97
+ }
98
+ else {
99
+ return target;
100
+ }
101
+ }
102
+ else {
103
+ return undefined;
104
+ }
105
+ }
106
+ _cleanTargetExtras(target) {
107
+ if (target) {
108
+ return Object.fromEntries(Object.entries(target).filter(([key,]) => [
109
+ 'fees',
110
+ 'recipients',
111
+ 'timelock',
112
+ ].includes(key)));
113
+ }
114
+ }
115
+ async _estimateNetworkFees(provider, priority = types_1.TransactionPriority.Medium) {
116
+ if (!this._priorities) {
117
+ this._priorities = await provider.priorities();
118
+ }
119
+ return BigInt(Math.floor(this._priorities[`vtt_${priority}`].priority * (this.covered ? this.weight : this.weight
120
+ // estimate one more input as to cover for network fees
121
+ + TX_WEIGHT_INPUT_SIZE
122
+ // estimate as many outputs as recipients plus one, as to cover for eventual change output
123
+ + TX_WEIGHT_OUTPUT_SIZE * (this._target?.recipients.length || 1 + 1) * TX_WEIGHT_GAMMA)));
124
+ }
125
+ }
126
+ exports.ValueTransferPayload = ValueTransferPayload;
127
+ ValueTransferPayload.MAX_WEIGHT = 20000;
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsdWVUcmFuc2ZlclBheWxvYWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NyeXB0by9wYXlsb2Fkcy9WYWx1ZVRyYW5zZmVyUGF5bG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7QUFFNUIsa0RBQW9EO0FBR3BELDBDQUF3RDtBQUN4RCxvQ0FBNEc7QUFPNUcsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLENBQUM7QUFDakMsTUFBTSxxQkFBcUIsR0FBRyxFQUFFLENBQUM7QUFDakMsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBRTNCLE1BQWEsb0JBQXFCLFNBQVEscUNBQStDO0lBSXJGLFlBQWEsYUFBcUIsRUFBRSxhQUFtQztRQUNuRSxLQUFLLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDaEIsT0FBTyxvQkFBb0IsQ0FBQyxVQUFVLENBQUE7SUFDMUMsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sYUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUM3RyxDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2IsT0FBTyxDQUNILElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLG9CQUFvQjtjQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsR0FBRyxlQUFlLENBQ3ZFLENBQUM7SUFDTixDQUFDO0lBRU0sY0FBYyxDQUFDLE1BQW9EO1FBQ3RFLElBQUksSUFBSSxD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RywyQkFBbUIsQ0FBQyxNQUFNO1FBQ2xHLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUNsRCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FDcEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxHQUFHLENBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQ3BDLHVEQUF1RDtjQUNyRCxvQkFBb0I7WUFDdEIsMEZBQTBGO2NBQ3hGLHFCQUFxQixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxlQUFlLENBQzdGLENBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7QUE3SUwsb0RBOElDO0FBNUlpQiwrQkFBVSxHQUFHLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IExvbmcgPSByZXF1aXJlKFwibG9uZ1wiKVxyXG5cclxuaW1wb3J0IHsgZnJvbUhleFN0cmluZyB9IGZyb20gXCIuLi8uLi8uLi9iaW4vaGVscGVyc1wiXHJcbmltcG9ydCB7IElKc29uUnBjUHJvdmlkZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIlxyXG5cclxuaW1wb3J0IHsgVHJhbnNhY3Rpb25QYXlsb2FkTXVsdGlTaWcgfSBmcm9tIFwiLi4vcGF5bG9hZHNcIlxyXG5pbXBvcnQgeyBDb2lucywgUHVibGljS2V5SGFzaCwgUHVibGljS2V5SGFzaFN0cmluZywgVHJhbnNhY3Rpb25QYXJhbXMsIFRyYW5zYWN0aW9uUHJpb3JpdHkgfSBmcm9tIFwiLi4vdHlwZXNcIlxyXG5cclxuZXhwb3J0IHR5cGUgVmFsdWVUcmFuc2ZlclBhcmFtcyA9IFRyYW5zYWN0aW9uUGFyYW1zICYge1xyXG4gICAgcmVjaXBpZW50czogQXJyYXk8W3BraDogUHVibGljS2V5SGFzaFN0cmluZywgdmFsdWU6IENvaW5zXT4sXHJcbiAgICB0aW1lbG9jaz86IG51bWJlcixcclxufVxyXG5cclxuY29uc3QgVFhfV0VJR0hUX0lOUFVUX1NJWkUgPSAxMzM7XHJcbmNvbnN0IFRYX1dFSUdIVF9PVVRQVVRfU0laRSA9IDM2O1xyXG5jb25zdCBUWF9XRUlHSFRfR0FNTUEgPSAxMDtcclxuXHJcbmV4cG9ydCBjbGFzcyBWYWx1ZVRyYW5zZmVyUGF5bG9hZCBleHRlbmRzIFRyYW5zYWN0aW9uUGF5bG9hZE11bHRpU2lnPFZhbHVlVHJhbnNmZXJQYXJhbXM+IHtcclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIE1BWF9XRUlHSFQgPSAyMDAwMDtcclxuICAgIFxyXG4gICAgY29uc3RydWN0b3IgKHByb3RvVHlwZU5hbWU6IHN0cmluZywgaW5pdGlhbFRhcmdldD86IFZhbHVlVHJhbnNmZXJQYXJhbXMpIHtcclxuICAgICAgICBzdXBlcihwcm90b1R5cGVOYW1lLCBpbml0aWFsVGFyZ2V0KVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgbWF4V2VpZ2h0KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIFZhbHVlVHJhbnNmZXJQYXlsb2FkLk1BWF9XRUlHSFRcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IENvaW5zIHtcclxuICAgICAgICByZXR1cm4gQ29pbnMuZnJvbVBlZHJvcyh0aGlzLl90YXJnZXQ/LnJlY2lwaWVudHMucmVkdWNlKChwcmV2LCBbLGN1cnJdKSA9PiBwcmV2ICsgY3Vyci5wZWRyb3MsIDBuKSB8fCAwbilcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHdlaWdodCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuX2lucHV0cy5sZW5ndGggKiBUWF9XRUlHSFRfSU5QVVRfU0laRSBcclxuICAgICAgICAgICAgICAgICsgdGhpcy5fb3V0cHV0cy5sZW5ndGggKiBUWF9XRUlHSFRfT1VUUFVUX1NJWkUgKiBUWF9XRUlHSFRfR0FNTUFcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwcmVwYXJlT3V0cHV0cyhjaGFuZ2U/OiB7IHZhbHVlOiBiaWdpbnQsIHBraDogUHVibGljS2V5SGFzaFN0cmluZyB9KTogYW55IHtcclxuICAgICAgICBpZiAodGhpcy5fdGFyZ2V0ICYmIHRoaXMuX291dHB1dHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX291dHB1dHMucHVzaCguLi50aGlzLl90YXJnZXQucmVjaXBpZW50cy5tYXAoKFtwa2gsIHZhbHVlXSkgPT4gKHtcclxuICAgICAgICAgICAgICAgIHBraCwgXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUucGVkcm9zLCBcclxuICAgICAgICAgICAgICAgIHRpbWVfbG9jazogdGhpcy5fdGFyZ2V0Py50aW1lbG9jayB8fCAwXHJcbiAgICAgICAgICAgIH0pKSk7XHJcbiAgICAgICAgICAgIHN1cGVyLnByZXBhcmVPdXRwdXRzKGNoYW5nZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGludG9SZWNlaXB0KHRhcmdldDogVmFsdWVUcmFuc2ZlclBhcmFtcyk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgb3V0cHV0TG9jazogdGFyZ2V0LnRpbWVsb2NrLFxyXG4gICAgICAgICAgICByZWNpcGllbnRzOiB0YXJnZXQucmVjaXBpZW50cy5tYXAoKFtwa2gsXSkgPT4gcGtoKS5maWx0ZXIoKHBraCwgaW5kZXgsIGFycmF5KSA9PiBpbmRleCA9PT0gYXJyYXkuaW5kZXhPZihwa2gpKSxcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvSlNPTigpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlucHV0czogdGhpcy5pbnB1dHNcclxuICAgICAgICAgICAgICAgIC5tYXAodXR4byA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgb3V0cHV0X3BvaW50ZXI6IHV0eG8ub3V0cHV0X3BvaW50ZXIgfVxyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG91dHB1dHM6IHRoaXMub3V0cHV0cy5tYXAodnRvID0+ICh7XHJcbiAgICAgICAgICAgICAgICBwa2g6IHZ0by5wa2gsXHJcbiAgICAgICAgICAgICAgICB0aW1lX2xvY2s6IHZ0by50aW1lX2xvY2ssXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdnRvLnZhbHVlLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgIH1cclxuICAgIH0gICBcclxuXHJcbiAgICBwdWJsaWMgdG9Qcm90b2J1ZigpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLnByZXBhcmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7ICAgIFxyXG4gICAgICAgICAgICAgICAgaW5wdXRzOiB0aGlzLmlucHV0c1xyXG4gICAgICAgICAgICAgICAgICAgIC5tYXAodXR4byA9PiB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbklkID0gdXR4by5vdXRwdXRfcG9pbnRlci5zcGxpdCgnOicpWzBdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dEluZGV4ID0gcGFyc2VJbnQodXR4by5vdXRwdXRfcG9pbnRlci5zcGxpdCgnOicpWzFdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0UG9pbnRlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uSWQ6IHsgU0hBMjU2OiBBcnJheS5mcm9tKGZyb21IZXhTdHJpbmcodHJhbnNhY3Rpb25JZCkpIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKG91dHB1dEluZGV4ID4gMCA/IHsgb3V0cHV0SW5kZXggfSA6IHt9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIG91dHB1dHM6IHRoaXMub3V0cHV0cy5tYXAodnRvID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgcGtoOiB7IGhhc2g6IEFycmF5LmZyb20oUHVibGljS2V5SGFzaC5mcm9tQmVjaDMyKHZ0by5wa2gpLnRvQnl0ZXMyMCgpKSwgfSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogTG9uZy5mcm9tVmFsdWUodnRvLnZhbHVlKSxcclxuICAgICAgICAgICAgICAgICAgICAuLi4odnRvLnRpbWVfbG9jayA+IDAgPyB7IHRpbWVMb2NrOiB2dG8udGltZV9sb2NrIH0gOiB7fSksXHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdmFsaWRhdGVUYXJnZXQodGFyZ2V0PzogYW55KTogVmFsdWVUcmFuc2ZlclBhcmFtcyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgdGFyZ2V0ID0gdGhpcy5fY2xlYW5UYXJnZXRFeHRyYXModGFyZ2V0KVxyXG4gICAgICAgIGlmICh0YXJnZXQgJiYgT2JqZWN0LmtleXModGFyZ2V0KS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICghdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IG5vIG9wdGlvbnMgcGFzc2VkLmApXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCEoXHJcbiAgICAgICAgICAgICAgICAhdGFyZ2V0Py5mZWVzIFxyXG4gICAgICAgICAgICAgICAgfHwgKFxyXG4gICAgICAgICAgICAgICAgICAgICh0YXJnZXQuZmVlcyBpbnN0YW5jZW9mIENvaW5zICYmICh0YXJnZXQuZmVlcyBhcyBDb2lucykucGVkcm9zID4gMClcclxuICAgICAgICAgICAgICAgICAgICB8fCBPYmplY3QudmFsdWVzKFRyYW5zYWN0aW9uUHJpb3JpdHkpLmluY2x1ZGVzKHRhcmdldC5mZWVzKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IGludmFsaWQgZmVlczogJHt0YXJnZXQuZmVlc31gKVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGFyZ2V0Py5yZWNpcGllbnRzKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX06IG5vIHJlY2lwaWVudHMuYClcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIShcclxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGFyZ2V0LnJlY2lwaWVudHMpXHJcbiAgICAgICAgICAgICAgICAmJiB0YXJnZXQucmVjaXBpZW50cy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAmJiAodGFyZ2V0LnJlY2lwaWVudHMgYXMgW1tQdWJsaWNLZXlIYXNoU3RyaW5nLCBDb2luc11dKS5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUgaW5zdGFuY2VvZiBDb2lucylcclxuICAgICAgICAgICAgKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnZhbGlkIHJlY2lwaWVudHM6ICR7dGFyZ2V0LnJlY2lwaWVudHN9YClcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZighKFxyXG4gICAgICAgICAgICAgICAgIXRhcmdldD8udGltZWxvY2sgfHwgdGFyZ2V0LnRpbWVsb2NrID49IDBcclxuICAgICAgICAgICAgKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9OiBpbnZhbGlkIHRpbWVsb2NrOiAke3RhcmdldC50aW1lbG9ja31gKVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQgYXMgVmFsdWVUcmFuc2ZlclBhcmFtc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2NsZWFuVGFyZ2V0RXh0cmFzKHRhcmdldD86IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKHRhcmdldCkge1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModGFyZ2V0KS5maWx0ZXIoKFtrZXksXSkgPT4gW1xyXG4gICAgICAgICAgICAgICAgICAgICdmZWVzJyxcclxuICAgICAgICAgICAgICAgICAgICAncmVjaXBpZW50cycsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3RpbWVsb2NrJyxcclxuICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMoa2V5KSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgX2VzdGltYXRlTmV0d29ya0ZlZXMocHJvdmlkZXI6IElKc29uUnBjUHJvdmlkZXIsIHByaW9yaXR5ID0gVHJhbnNhY3Rpb25Qcmlvcml0eS5NZWRpdW0pOiBQcm9taXNlPGJpZ2ludD4ge1xyXG4gICAgICAgIGlmICghdGhpcy5fcHJpb3JpdGllcykge1xyXG4gICAgICAgICAgICB0aGlzLl9wcmlvcml0aWVzID0gYXdhaXQgcHJvdmlkZXIucHJpb3JpdGllcygpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBCaWdJbnQoTWF0aC5mbG9vcihcclxuICAgICAgICAgICAgdGhpcy5fcHJpb3JpdGllc1tgdnR0XyR7cHJpb3JpdHl9YF0ucHJpb3JpdHkgKiAoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdmVyZWQgPyB0aGlzLndlaWdodCA6IHRoaXMud2VpZ2h0XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXN0aW1hdGUgb25lIG1vcmUgaW5wdXQgYXMgdG8gY292ZXIgZm9yIG5ldHdvcmsgZmVlc1xyXG4gICAgICAgICAgICAgICAgICAgICsgVFhfV0VJR0hUX0lOUFVUX1NJWkUgXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXN0aW1hdGUgYXMgbWFueSBvdXRwdXRzIGFzIHJlY2lwaWVudHMgcGx1cyBvbmUsIGFzIHRvIGNvdmVyIGZvciBldmVudHVhbCBjaGFuZ2Ugb3V0cHV0XHJcbiAgICAgICAgICAgICAgICAgICAgKyBUWF9XRUlHSFRfT1VUUFVUX1NJWkUgKiAodGhpcy5fdGFyZ2V0Py5yZWNpcGllbnRzLmxlbmd0aCB8fCAxICsgMSkgKiBUWF9XRUlHSFRfR0FNTUFcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICkpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,57 @@
1
+ import { Type as ProtoType } from "protobufjs";
2
+ import { Hash, NetworkPriorities, ValueTransferOutput } from "../types";
3
+ import { ILedger, IJsonRpcProvider, ITransactionPayload, ITransactionPayloadMultiSig } from "./interfaces";
4
+ import { Coins, PublicKeyHashString, TransactionPriority, Utxo } from "./types";
5
+ export declare abstract class TransactionPayload<Specs> implements ITransactionPayload<Specs> {
6
+ protected _change: bigint;
7
+ protected _covered: bigint;
8
+ protected _fees: bigint;
9
+ protected _priorities?: NetworkPriorities;
10
+ protected _protoType: ProtoType;
11
+ protected _target?: Specs;
12
+ constructor(protoTypeName: string, initialTarget?: Specs);
13
+ get bytecode(): Uint8Array | undefined;
14
+ get change(): Coins | undefined;
15
+ get covered(): boolean;
16
+ get fees(): Coins | undefined;
17
+ get hash(): Hash | undefined;
18
+ intoReceipt(target: Specs): any;
19
+ abstract consumeUtxos(ledger: ILedger): Promise<bigint>;
20
+ abstract prepareOutputs(change?: {
21
+ value: bigint;
22
+ pkh: PublicKeyHashString;
23
+ }, params?: any): any;
24
+ abstract resetTarget(target: Specs): any;
25
+ abstract toJSON(humanize: boolean): any;
26
+ abstract toProtobuf(): any;
27
+ abstract validateTarget(target?: any): Specs | undefined;
28
+ abstract get outputs(): Array<ValueTransferOutput>;
29
+ abstract get maxWeight(): number;
30
+ abstract get prepared(): boolean;
31
+ abstract get value(): Coins;
32
+ abstract get weight(): number;
33
+ protected abstract _cleanTargetExtras(params?: any): any;
34
+ protected abstract _estimateNetworkFees(provider: IJsonRpcProvider, priority?: TransactionPriority): Promise<bigint>;
35
+ }
36
+ export declare abstract class TransactionPayloadMultiSig<Specs> extends TransactionPayload<Specs> implements ITransactionPayloadMultiSig<Specs> {
37
+ protected _inputs: Array<Utxo>;
38
+ protected _outputs: Array<ValueTransferOutput>;
39
+ constructor(protoTypeName: string, initialTarget?: Specs);
40
+ get inputs(): Array<Utxo>;
41
+ get outputs(): Array<ValueTransferOutput>;
42
+ get prepared(): boolean;
43
+ consumeUtxos(ledger: ILedger, reload?: boolean): Promise<bigint>;
44
+ prepareOutputs(change?: {
45
+ value: bigint;
46
+ pkh: PublicKeyHashString;
47
+ }): any;
48
+ resetTarget(target: Specs): any;
49
+ abstract toJSON(humanize: boolean): any;
50
+ abstract toProtobuf(): any;
51
+ abstract validateTarget(target?: any): Specs | undefined;
52
+ abstract get maxWeight(): number;
53
+ abstract get value(): Coins;
54
+ abstract get weight(): number;
55
+ protected abstract _cleanTargetExtras(params?: any): any;
56
+ }
57
+ //# sourceMappingURL=payloads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"payloads.d.ts","sourceRoot":"","sources":["../../../../src/lib/crypto/payloads.ts"],"names":[],"mappings":"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"}