@cardano-sdk/tx-construction 0.18.7 → 0.19.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/dist/cjs/createTransactionInternals.d.ts +6 -2
- package/dist/cjs/createTransactionInternals.d.ts.map +1 -1
- package/dist/cjs/createTransactionInternals.js +11 -3
- package/dist/cjs/createTransactionInternals.js.map +1 -1
- package/dist/cjs/input-selection/selectionConstraints.d.ts +14 -3
- package/dist/cjs/input-selection/selectionConstraints.d.ts.map +1 -1
- package/dist/cjs/input-selection/selectionConstraints.js +61 -4
- package/dist/cjs/input-selection/selectionConstraints.js.map +1 -1
- package/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/cjs/tx-builder/GreedyTxEvaluator.d.ts +8 -0
- package/dist/cjs/tx-builder/GreedyTxEvaluator.d.ts.map +1 -0
- package/dist/cjs/tx-builder/GreedyTxEvaluator.js +39 -0
- package/dist/cjs/tx-builder/GreedyTxEvaluator.js.map +1 -0
- package/dist/cjs/tx-builder/OutputBuilder.d.ts +2 -1
- package/dist/cjs/tx-builder/OutputBuilder.d.ts.map +1 -1
- package/dist/cjs/tx-builder/OutputBuilder.js +14 -2
- package/dist/cjs/tx-builder/OutputBuilder.js.map +1 -1
- package/dist/cjs/tx-builder/TxBuilder.d.ts +5 -1
- package/dist/cjs/tx-builder/TxBuilder.d.ts.map +1 -1
- package/dist/cjs/tx-builder/TxBuilder.js +168 -42
- package/dist/cjs/tx-builder/TxBuilder.js.map +1 -1
- package/dist/cjs/tx-builder/costModels.d.ts +11 -0
- package/dist/cjs/tx-builder/costModels.d.ts.map +1 -0
- package/dist/cjs/tx-builder/costModels.js +77 -0
- package/dist/cjs/tx-builder/costModels.js.map +1 -0
- package/dist/cjs/tx-builder/index.d.ts +1 -0
- package/dist/cjs/tx-builder/index.d.ts.map +1 -1
- package/dist/cjs/tx-builder/index.js +1 -0
- package/dist/cjs/tx-builder/index.js.map +1 -1
- package/dist/cjs/tx-builder/initializeTx.d.ts.map +1 -1
- package/dist/cjs/tx-builder/initializeTx.js +18 -6
- package/dist/cjs/tx-builder/initializeTx.js.map +1 -1
- package/dist/cjs/tx-builder/types.d.ts +23 -0
- package/dist/cjs/tx-builder/types.d.ts.map +1 -1
- package/dist/cjs/tx-builder/utils.d.ts +23 -0
- package/dist/cjs/tx-builder/utils.d.ts.map +1 -0
- package/dist/cjs/tx-builder/utils.js +134 -0
- package/dist/cjs/tx-builder/utils.js.map +1 -0
- package/dist/cjs/types.d.ts +9 -1
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/esm/createTransactionInternals.d.ts +6 -2
- package/dist/esm/createTransactionInternals.d.ts.map +1 -1
- package/dist/esm/createTransactionInternals.js +11 -3
- package/dist/esm/createTransactionInternals.js.map +1 -1
- package/dist/esm/input-selection/selectionConstraints.d.ts +14 -3
- package/dist/esm/input-selection/selectionConstraints.d.ts.map +1 -1
- package/dist/esm/input-selection/selectionConstraints.js +62 -5
- package/dist/esm/input-selection/selectionConstraints.js.map +1 -1
- package/dist/esm/tsconfig.tsbuildinfo +1 -1
- package/dist/esm/tx-builder/GreedyTxEvaluator.d.ts +8 -0
- package/dist/esm/tx-builder/GreedyTxEvaluator.d.ts.map +1 -0
- package/dist/esm/tx-builder/GreedyTxEvaluator.js +35 -0
- package/dist/esm/tx-builder/GreedyTxEvaluator.js.map +1 -0
- package/dist/esm/tx-builder/OutputBuilder.d.ts +2 -1
- package/dist/esm/tx-builder/OutputBuilder.d.ts.map +1 -1
- package/dist/esm/tx-builder/OutputBuilder.js +14 -2
- package/dist/esm/tx-builder/OutputBuilder.js.map +1 -1
- package/dist/esm/tx-builder/TxBuilder.d.ts +5 -1
- package/dist/esm/tx-builder/TxBuilder.d.ts.map +1 -1
- package/dist/esm/tx-builder/TxBuilder.js +169 -43
- package/dist/esm/tx-builder/TxBuilder.js.map +1 -1
- package/dist/esm/tx-builder/costModels.d.ts +11 -0
- package/dist/esm/tx-builder/costModels.d.ts.map +1 -0
- package/dist/esm/tx-builder/costModels.js +72 -0
- package/dist/esm/tx-builder/costModels.js.map +1 -0
- package/dist/esm/tx-builder/index.d.ts +1 -0
- package/dist/esm/tx-builder/index.d.ts.map +1 -1
- package/dist/esm/tx-builder/index.js +1 -0
- package/dist/esm/tx-builder/index.js.map +1 -1
- package/dist/esm/tx-builder/initializeTx.d.ts.map +1 -1
- package/dist/esm/tx-builder/initializeTx.js +18 -6
- package/dist/esm/tx-builder/initializeTx.js.map +1 -1
- package/dist/esm/tx-builder/types.d.ts +23 -0
- package/dist/esm/tx-builder/types.d.ts.map +1 -1
- package/dist/esm/tx-builder/utils.d.ts +23 -0
- package/dist/esm/tx-builder/utils.d.ts.map +1 -0
- package/dist/esm/tx-builder/utils.js +122 -0
- package/dist/esm/tx-builder/utils.js.map +1 -0
- package/dist/esm/types.d.ts +9 -1
- package/dist/esm/types.d.ts.map +1 -1
- package/package.json +7 -7
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
import { Cardano } from '@cardano-sdk/core';
|
|
2
|
-
import { ComputeMinimumCoinQuantity, ComputeSelectionLimit,
|
|
2
|
+
import { ComputeMinimumCoinQuantity, ComputeSelectionLimit, EstimateTxCosts, ProtocolParametersForInputSelection, ProtocolParametersRequiredByInputSelection, SelectionConstraints, SelectionSkeleton, TokenBundleSizeExceedsLimit } from '@cardano-sdk/input-selection';
|
|
3
|
+
import { TxEvaluator, TxIdWithIndex } from '../tx-builder';
|
|
3
4
|
export declare const MAX_U64 = 18446744073709551615n;
|
|
4
5
|
export declare type BuildTx = (selection: SelectionSkeleton) => Promise<Cardano.Tx>;
|
|
6
|
+
export interface RedeemersByType {
|
|
7
|
+
spend?: Map<TxIdWithIndex, Cardano.Redeemer>;
|
|
8
|
+
mint?: Array<Cardano.Redeemer>;
|
|
9
|
+
certificate?: Array<Cardano.Redeemer>;
|
|
10
|
+
withdrawal?: Array<Cardano.Redeemer>;
|
|
11
|
+
propose?: Array<Cardano.Redeemer>;
|
|
12
|
+
vote?: Array<Cardano.Redeemer>;
|
|
13
|
+
}
|
|
5
14
|
export interface DefaultSelectionConstraintsProps {
|
|
6
15
|
protocolParameters: ProtocolParametersForInputSelection;
|
|
7
16
|
buildTx: BuildTx;
|
|
17
|
+
redeemersByType: RedeemersByType;
|
|
18
|
+
txEvaluator: TxEvaluator;
|
|
8
19
|
}
|
|
9
|
-
export declare const computeMinimumCost: ({ minFeeCoefficient, minFeeConstant, prices }: Pick<ProtocolParametersRequiredByInputSelection, 'minFeeCoefficient' | 'minFeeConstant' | 'prices'>, buildTx: BuildTx) =>
|
|
20
|
+
export declare const computeMinimumCost: ({ minFeeCoefficient, minFeeConstant, prices }: Pick<ProtocolParametersRequiredByInputSelection, 'minFeeCoefficient' | 'minFeeConstant' | 'prices'>, buildTx: BuildTx, txEvaluator: TxEvaluator, redeemersByType: RedeemersByType) => EstimateTxCosts;
|
|
10
21
|
export declare const computeMinimumCoinQuantity: (coinsPerUtxoByte: ProtocolParametersRequiredByInputSelection['coinsPerUtxoByte']) => ComputeMinimumCoinQuantity;
|
|
11
22
|
export declare const tokenBundleSizeExceedsLimit: (maxValueSize: ProtocolParametersRequiredByInputSelection['maxValueSize']) => TokenBundleSizeExceedsLimit;
|
|
12
23
|
export declare const computeSelectionLimit: (maxTxSize: ProtocolParametersRequiredByInputSelection['maxTxSize'], buildTx: BuildTx) => ComputeSelectionLimit;
|
|
13
|
-
export declare const defaultSelectionConstraints: ({ protocolParameters: { coinsPerUtxoByte, maxTxSize, maxValueSize, minFeeCoefficient, minFeeConstant, prices }, buildTx }: DefaultSelectionConstraintsProps) => SelectionConstraints;
|
|
24
|
+
export declare const defaultSelectionConstraints: ({ protocolParameters: { coinsPerUtxoByte, maxTxSize, maxValueSize, minFeeCoefficient, minFeeConstant, prices }, buildTx, redeemersByType, txEvaluator }: DefaultSelectionConstraintsProps) => SelectionConstraints;
|
|
14
25
|
//# sourceMappingURL=selectionConstraints.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectionConstraints.d.ts","sourceRoot":"","sources":["../../../src/input-selection/selectionConstraints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiD,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,
|
|
1
|
+
{"version":3,"file":"selectionConstraints.d.ts","sourceRoot":"","sources":["../../../src/input-selection/selectionConstraints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAiD,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,eAAe,EACf,mCAAmC,EACnC,0CAA0C,EAC1C,oBAAoB,EACpB,iBAAiB,EACjB,2BAA2B,EAE5B,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAsB,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE/E,eAAO,MAAM,OAAO,wBAA8B,CAAC;AAEnD,oBAAY,OAAO,GAAG,CAAC,SAAS,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAE5E,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/B,WAAW,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACtC,UAAU,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,gCAAgC;IAC/C,kBAAkB,EAAE,mCAAmC,CAAC;IACxD,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;CAC1B;AAwED,eAAO,MAAM,kBAAkB,kDAMxB,KAAK,0CAA0C,EAAE,mBAAmB,GAAG,gBAAgB,GAAG,QAAQ,CAAC,WAC7F,OAAO,eACH,WAAW,mBACP,eAAe,KAC/B,eAgBF,CAAC;AAEJ,eAAO,MAAM,0BAA0B,qBAClB,0CAA0C,CAAC,kBAAkB,CAAC,KAAG,0BAElC,CAAC;AAErD,eAAO,MAAM,2BAA2B,iBACvB,0CAA0C,CAAC,cAAc,CAAC,KAAG,2BAU3E,CAAC;AAWJ,eAAO,MAAM,qBAAqB,cACpB,0CAA0C,CAAC,WAAW,CAAC,WAAW,OAAO,KAAG,qBAQvF,CAAC;AAEJ,eAAO,MAAM,2BAA2B,4JAKrC,gCAAgC,KAAG,oBAiBrC,CAAC"}
|
|
@@ -1,9 +1,66 @@
|
|
|
1
|
-
import { InvalidProtocolParametersError, Serialization } from '@cardano-sdk/core';
|
|
1
|
+
import { Cardano, InvalidProtocolParametersError, Serialization } from '@cardano-sdk/core';
|
|
2
|
+
import { sortTxIn } from '@cardano-sdk/input-selection';
|
|
2
3
|
import { MinFeeCoefficient, MinFeeConstant, minAdaRequired, minFee } from '../fees';
|
|
3
4
|
export const MAX_U64 = 18446744073709551615n;
|
|
4
|
-
|
|
5
|
+
const updateRedeemers = (evaluation, redeemersByType, txInputs) => {
|
|
6
|
+
const result = [];
|
|
7
|
+
const redeemersMap = {
|
|
8
|
+
[Cardano.RedeemerPurpose.spend]: redeemersByType.spend,
|
|
9
|
+
[Cardano.RedeemerPurpose.mint]: redeemersByType.mint,
|
|
10
|
+
[Cardano.RedeemerPurpose.certificate]: redeemersByType.certificate,
|
|
11
|
+
[Cardano.RedeemerPurpose.withdrawal]: redeemersByType.withdrawal,
|
|
12
|
+
[Cardano.RedeemerPurpose.propose]: redeemersByType.propose,
|
|
13
|
+
[Cardano.RedeemerPurpose.vote]: redeemersByType.vote
|
|
14
|
+
};
|
|
15
|
+
for (const txEval of evaluation) {
|
|
16
|
+
const redeemers = redeemersMap[txEval.purpose];
|
|
17
|
+
if (!redeemers)
|
|
18
|
+
throw new Error(`No redeemers found for ${txEval.purpose} purpose`);
|
|
19
|
+
let knownRedeemer;
|
|
20
|
+
if (txEval.purpose === Cardano.RedeemerPurpose.spend) {
|
|
21
|
+
const input = txInputs[txEval.index];
|
|
22
|
+
knownRedeemer = redeemers.get(`${input.txId}#${input.index}`);
|
|
23
|
+
if (!knownRedeemer)
|
|
24
|
+
throw new Error(`Known Redeemer not found for tx id ${input.txId} and index ${input.index}`);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
const redeemerList = redeemers;
|
|
28
|
+
knownRedeemer = redeemerList.find((redeemer) => redeemer.index === txEval.index);
|
|
29
|
+
if (!knownRedeemer)
|
|
30
|
+
throw new Error(`Known Redeemer not found for index ${txEval.index}`);
|
|
31
|
+
}
|
|
32
|
+
result.push({ ...knownRedeemer, executionUnits: txEval.budget });
|
|
33
|
+
}
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
const reorgRedeemers = (redeemerByType, witness, txInputs) => {
|
|
37
|
+
let redeemers = [];
|
|
38
|
+
if (witness.redeemers) {
|
|
39
|
+
redeemers = witness.redeemers.filter((redeemer) => redeemer.purpose !== Cardano.RedeemerPurpose.spend);
|
|
40
|
+
if (redeemerByType.spend) {
|
|
41
|
+
for (const [key, value] of redeemerByType.spend) {
|
|
42
|
+
const index = txInputs.findIndex((input) => key === `${input.txId}#${input.index}`);
|
|
43
|
+
if (index < 0)
|
|
44
|
+
throw new Error(`Redeemer not found for tx id ${key}`);
|
|
45
|
+
value.index = index;
|
|
46
|
+
redeemers.push({ ...value });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return redeemers;
|
|
51
|
+
};
|
|
52
|
+
export const computeMinimumCost = ({ minFeeCoefficient, minFeeConstant, prices }, buildTx, txEvaluator, redeemersByType) => async (selection) => {
|
|
5
53
|
const tx = await buildTx(selection);
|
|
6
|
-
|
|
54
|
+
const utxos = [...selection.inputs];
|
|
55
|
+
const txIns = utxos.map((utxo) => utxo[0]).sort(sortTxIn);
|
|
56
|
+
if (tx.witness && tx.witness.redeemers && tx.witness.redeemers.length > 0) {
|
|
57
|
+
tx.witness.redeemers = reorgRedeemers(redeemersByType, tx.witness, txIns);
|
|
58
|
+
tx.witness.redeemers = updateRedeemers(await txEvaluator.evaluate(tx, utxos), redeemersByType, txIns);
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
fee: minFee(tx, prices, MinFeeConstant(minFeeConstant), MinFeeCoefficient(minFeeCoefficient)),
|
|
62
|
+
redeemers: tx.witness.redeemers
|
|
63
|
+
};
|
|
7
64
|
};
|
|
8
65
|
export const computeMinimumCoinQuantity = (coinsPerUtxoByte) => (output) => minAdaRequired(output, BigInt(coinsPerUtxoByte));
|
|
9
66
|
export const tokenBundleSizeExceedsLimit = (maxValueSize) => (tokenBundle) => {
|
|
@@ -23,13 +80,13 @@ export const computeSelectionLimit = (maxTxSize, buildTx) => async (selectionSke
|
|
|
23
80
|
}
|
|
24
81
|
return selectionSkeleton.inputs.size - 1;
|
|
25
82
|
};
|
|
26
|
-
export const defaultSelectionConstraints = ({ protocolParameters: { coinsPerUtxoByte, maxTxSize, maxValueSize, minFeeCoefficient, minFeeConstant, prices }, buildTx }) => {
|
|
83
|
+
export const defaultSelectionConstraints = ({ protocolParameters: { coinsPerUtxoByte, maxTxSize, maxValueSize, minFeeCoefficient, minFeeConstant, prices }, buildTx, redeemersByType, txEvaluator }) => {
|
|
27
84
|
if (!coinsPerUtxoByte || !maxTxSize || !maxValueSize || !minFeeCoefficient || !minFeeConstant || !prices) {
|
|
28
85
|
throw new InvalidProtocolParametersError('Missing one of: coinsPerUtxoByte, maxTxSize, maxValueSize, minFeeCoefficient, minFeeConstant, prices');
|
|
29
86
|
}
|
|
30
87
|
return {
|
|
31
88
|
computeMinimumCoinQuantity: computeMinimumCoinQuantity(coinsPerUtxoByte),
|
|
32
|
-
computeMinimumCost: computeMinimumCost({ minFeeCoefficient, minFeeConstant, prices }, buildTx),
|
|
89
|
+
computeMinimumCost: computeMinimumCost({ minFeeCoefficient, minFeeConstant, prices }, buildTx, txEvaluator, redeemersByType),
|
|
33
90
|
computeSelectionLimit: computeSelectionLimit(maxTxSize, buildTx),
|
|
34
91
|
tokenBundleSizeExceedsLimit: tokenBundleSizeExceedsLimit(maxValueSize)
|
|
35
92
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectionConstraints.js","sourceRoot":"","sources":["../../../src/input-selection/selectionConstraints.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"selectionConstraints.js","sourceRoot":"","sources":["../../../src/input-selection/selectionConstraints.ts"],"names":[],"mappings":"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"}
|