@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.
- package/LICENSE +21 -0
- package/README.md +103 -0
- package/dist/package.json +72 -0
- package/dist/src/bin/helpers.d.ts +91 -0
- package/dist/src/bin/helpers.d.ts.map +1 -0
- package/dist/src/bin/helpers.js +816 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +47 -0
- package/dist/src/lib/crypto/account.d.ts +32 -0
- package/dist/src/lib/crypto/account.d.ts.map +1 -0
- package/dist/src/lib/crypto/account.js +106 -0
- package/dist/src/lib/crypto/coinbase.d.ts +10 -0
- package/dist/src/lib/crypto/coinbase.d.ts.map +1 -0
- package/dist/src/lib/crypto/coinbase.js +28 -0
- package/dist/src/lib/crypto/index.d.ts +8 -0
- package/dist/src/lib/crypto/index.d.ts.map +1 -0
- package/dist/src/lib/crypto/index.js +30 -0
- package/dist/src/lib/crypto/interfaces.d.ts +85 -0
- package/dist/src/lib/crypto/interfaces.d.ts.map +1 -0
- package/dist/src/lib/crypto/interfaces.js +3 -0
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts +55 -0
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/DataRequestPayload.js +339 -0
- package/dist/src/lib/crypto/payloads/StakePayload.d.ts +28 -0
- package/dist/src/lib/crypto/payloads/StakePayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/StakePayload.js +142 -0
- package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts +36 -0
- package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/UnstakePayload.js +154 -0
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts +25 -0
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +128 -0
- package/dist/src/lib/crypto/payloads.d.ts +57 -0
- package/dist/src/lib/crypto/payloads.d.ts.map +1 -0
- package/dist/src/lib/crypto/payloads.js +170 -0
- package/dist/src/lib/crypto/signer.d.ts +33 -0
- package/dist/src/lib/crypto/signer.d.ts.map +1 -0
- package/dist/src/lib/crypto/signer.js +194 -0
- package/dist/src/lib/crypto/transmitters/DataRequests.d.ts +15 -0
- package/dist/src/lib/crypto/transmitters/DataRequests.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/DataRequests.js +23 -0
- package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts +12 -0
- package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/StakeDeposits.js +17 -0
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts +18 -0
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +53 -0
- package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts +11 -0
- package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters/ValueTransfers.js +16 -0
- package/dist/src/lib/crypto/transmitters.d.ts +47 -0
- package/dist/src/lib/crypto/transmitters.d.ts.map +1 -0
- package/dist/src/lib/crypto/transmitters.js +416 -0
- package/dist/src/lib/crypto/types.d.ts +161 -0
- package/dist/src/lib/crypto/types.d.ts.map +1 -0
- package/dist/src/lib/crypto/types.js +273 -0
- package/dist/src/lib/crypto/utils.d.ts +21 -0
- package/dist/src/lib/crypto/utils.d.ts.map +1 -0
- package/dist/src/lib/crypto/utils.js +156 -0
- package/dist/src/lib/crypto/wallet.d.ts +120 -0
- package/dist/src/lib/crypto/wallet.d.ts.map +1 -0
- package/dist/src/lib/crypto/wallet.js +258 -0
- package/dist/src/lib/index.d.ts +5 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +44 -0
- package/dist/src/lib/radon/ccdr/eth.d.ts +160 -0
- package/dist/src/lib/radon/ccdr/eth.d.ts.map +1 -0
- package/dist/src/lib/radon/ccdr/eth.js +272 -0
- package/dist/src/lib/radon/ccdr/index.d.ts +14 -0
- package/dist/src/lib/radon/ccdr/index.d.ts.map +1 -0
- package/dist/src/lib/radon/ccdr/index.js +39 -0
- package/dist/src/lib/radon/ccdr/wit.d.ts +23 -0
- package/dist/src/lib/radon/ccdr/wit.d.ts.map +1 -0
- package/dist/src/lib/radon/ccdr/wit.js +35 -0
- package/dist/src/lib/radon/filters.d.ts +14 -0
- package/dist/src/lib/radon/filters.d.ts.map +1 -0
- package/dist/src/lib/radon/filters.js +45 -0
- package/dist/src/lib/radon/index.d.ts +296 -0
- package/dist/src/lib/radon/index.d.ts.map +1 -0
- package/dist/src/lib/radon/index.js +707 -0
- package/dist/src/lib/radon/reducers.d.ts +29 -0
- package/dist/src/lib/radon/reducers.d.ts.map +1 -0
- package/dist/src/lib/radon/reducers.js +66 -0
- package/dist/src/lib/radon/types.d.ts +521 -0
- package/dist/src/lib/radon/types.d.ts.map +1 -0
- package/dist/src/lib/radon/types.js +936 -0
- package/dist/src/lib/radon/utils.d.ts +53 -0
- package/dist/src/lib/radon/utils.d.ts.map +1 -0
- package/dist/src/lib/radon/utils.js +153 -0
- package/dist/src/lib/rpc/index.d.ts +3 -0
- package/dist/src/lib/rpc/index.d.ts.map +1 -0
- package/dist/src/lib/rpc/index.js +19 -0
- package/dist/src/lib/rpc/nodes.d.ts +40 -0
- package/dist/src/lib/rpc/nodes.d.ts.map +1 -0
- package/dist/src/lib/rpc/nodes.js +293 -0
- package/dist/src/lib/rpc/provider.d.ts +88 -0
- package/dist/src/lib/rpc/provider.d.ts.map +1 -0
- package/dist/src/lib/rpc/provider.js +336 -0
- package/dist/src/lib/rpc/reporter.d.ts +18 -0
- package/dist/src/lib/rpc/reporter.d.ts.map +1 -0
- package/dist/src/lib/rpc/reporter.js +30 -0
- package/dist/src/lib/rpc/types.d.ts +409 -0
- package/dist/src/lib/rpc/types.d.ts.map +1 -0
- package/dist/src/lib/rpc/types.js +81 -0
- package/dist/src/lib/types.d.ts +18 -0
- package/dist/src/lib/types.d.ts.map +1 -0
- package/dist/src/lib/types.js +7 -0
- package/dist/src/lib/utils.d.ts +13 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +97 -0
- package/dist/witnet/assets/index.d.ts +30 -0
- package/dist/witnet/assets/index.d.ts.map +1 -0
- package/dist/witnet/assets/index.js +6 -0
- package/dist/witnet/assets/modals/index.d.ts +18 -0
- package/dist/witnet/assets/modals/index.d.ts.map +1 -0
- package/dist/witnet/assets/modals/index.js +21 -0
- package/dist/witnet/assets/modals/web3/eth.d.ts +5 -0
- package/dist/witnet/assets/modals/web3/eth.d.ts.map +1 -0
- package/dist/witnet/assets/modals/web3/eth.js +26 -0
- package/dist/witnet/assets/modals/web3/wit.d.ts +4 -0
- package/dist/witnet/assets/modals/web3/wit.d.ts.map +1 -0
- package/dist/witnet/assets/modals/web3/wit.js +20 -0
- package/dist/witnet/assets/requests.d.ts +11 -0
- package/dist/witnet/assets/requests.d.ts.map +1 -0
- package/dist/witnet/assets/requests.js +88 -0
- package/dist/witnet/witnet.proto.json +1325 -0
- package/package.json +72 -0
- package/src/bin/cli/history.js +31 -0
- package/src/bin/cli/inspect.js +359 -0
- package/src/bin/cli/network.js +592 -0
- package/src/bin/cli/nodes.js +364 -0
- package/src/bin/cli/radon.js +814 -0
- package/src/bin/cli/wallet.js +1000 -0
- package/src/bin/helpers.js +829 -0
- package/src/bin/postinstall.js +9 -0
- package/src/bin/toolkit.js +294 -0
- package/witnet/assets/_index.js +8 -0
- package/witnet/assets/_requests.js +25 -0
- package/witnet/assets/_sources.js +36 -0
- package/witnet/assets/_templates.js +36 -0
- package/witnet/assets/index.js +4 -0
- package/witnet/assets/modals/index.js +25 -0
- package/witnet/assets/modals/web3/btc.js +0 -0
- package/witnet/assets/modals/web3/eth.js +29 -0
- package/witnet/assets/modals/web3/sol.js +0 -0
- package/witnet/assets/modals/web3/wit.js +23 -0
- package/witnet/assets/requests.js +94 -0
- 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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"}
|