@cardano-sdk/input-selection 0.11.1 → 0.11.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"GreedyInputSelector.d.ts","sourceRoot":"","sources":["../../../src/GreedySelection/GreedyInputSelector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAwB,eAAe,EAAE,MAAM,UAAU,CAAC;AAe1G,MAAM,WAAW,mBAAmB;IAalC,kBAAkB,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;CACxE;AAiID,qBAAa,mBAAoB,YAAW,aAAa;;gBAG3C,KAAK,EAAE,mBAAmB;IAIhC,MAAM,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,eAAe,CAAC;CAuDzE"}
1
+ {"version":3,"file":"GreedyInputSelector.d.ts","sourceRoot":"","sources":["../../../src/GreedySelection/GreedyInputSelector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,wBAAwB,EAAE,aAAa,EAAwB,eAAe,EAAE,MAAM,UAAU,CAAC;AAe1G,MAAM,WAAW,mBAAmB;IAalC,kBAAkB,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC;CACxE;AA6ID,qBAAa,mBAAoB,YAAW,aAAa;;gBAG3C,KAAK,EAAE,mBAAmB;IAIhC,MAAM,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,eAAe,CAAC;CAuDzE"}
@@ -23,7 +23,7 @@ const adjustOutputsForFee = async (changeLovelace, constraints, inputs, outputs,
23
23
  outputs: totalOutputs
24
24
  });
25
25
  if (fee === changeLovelace)
26
- return { change: [], fee };
26
+ return { change: [], fee, feeAccountedFor: true };
27
27
  if (changeLovelace < fee)
28
28
  throw new InputSelectionError(InputSelectionFailure.UtxoBalanceInsufficient);
29
29
  const updatedOutputs = [...changeOutputs];
@@ -37,16 +37,13 @@ const adjustOutputsForFee = async (changeLovelace, constraints, inputs, outputs,
37
37
  break;
38
38
  }
39
39
  }
40
- if (!feeAccountedFor) {
41
- throw new InputSelectionError(InputSelectionFailure.UtxoFullyDepleted);
42
- }
43
- return { change: [...updatedOutputs], fee };
40
+ return { change: [...updatedOutputs], fee, feeAccountedFor };
44
41
  };
45
42
  const splitChangeAndComputeFee = async (inputs, outputs, changeLovelace, changeAssets, constraints, getChangeAddresses, fee) => {
46
43
  const changeOutputs = await splitChange(getChangeAddresses, changeLovelace, changeAssets, constraints.computeMinimumCoinQuantity, constraints.tokenBundleSizeExceedsLimit, fee);
47
- const adjustedChangeOutputs = await adjustOutputsForFee(changeLovelace, constraints, inputs, outputs, changeOutputs, fee);
44
+ let adjustedChangeOutputs = await adjustOutputsForFee(changeLovelace, constraints, inputs, outputs, changeOutputs, fee);
48
45
  if (adjustedChangeOutputs.fee >= changeLovelace) {
49
- return {
46
+ const result = {
50
47
  change: [
51
48
  {
52
49
  address: stubMaxSizeAddress,
@@ -56,12 +53,24 @@ const splitChangeAndComputeFee = async (inputs, outputs, changeLovelace, changeA
56
53
  }
57
54
  }
58
55
  ],
59
- fee: adjustedChangeOutputs.fee
56
+ fee: adjustedChangeOutputs.fee,
57
+ feeAccountedFor: true
60
58
  };
59
+ if (result.change[0].value.coins < constraints.computeMinimumCoinQuantity(result.change[0]))
60
+ throw new InputSelectionError(InputSelectionFailure.UtxoFullyDepleted);
61
+ return result;
61
62
  }
62
63
  if (fee < adjustedChangeOutputs.fee) {
63
- return splitChangeAndComputeFee(inputs, outputs, changeLovelace, changeAssets, constraints, getChangeAddresses, adjustedChangeOutputs.fee);
64
+ adjustedChangeOutputs = await splitChangeAndComputeFee(inputs, outputs, changeLovelace, changeAssets, constraints, getChangeAddresses, adjustedChangeOutputs.fee);
65
+ if (adjustedChangeOutputs.change.length === 0)
66
+ throw new InputSelectionError(InputSelectionFailure.UtxoFullyDepleted);
64
67
  }
68
+ for (const out of adjustedChangeOutputs.change) {
69
+ if (out.value.coins < constraints.computeMinimumCoinQuantity(out))
70
+ throw new InputSelectionError(InputSelectionFailure.UtxoFullyDepleted);
71
+ }
72
+ if (!adjustedChangeOutputs.feeAccountedFor)
73
+ throw new InputSelectionError(InputSelectionFailure.UtxoFullyDepleted);
65
74
  return adjustedChangeOutputs;
66
75
  };
67
76
  export class GreedyInputSelector {
@@ -1 +1 @@
1
- {"version":3,"file":"GreedyInputSelector.js","sourceRoot":"","sources":["../../../src/GreedySelection/GreedyInputSelector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GreedyInputSelector.js","sourceRoot":"","sources":["../../../src/GreedySelection/GreedyInputSelector.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/GreedySelection/util.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AA6EnF,eAAO,MAAM,WAAW,uBACF,MAAM,QAAQ,IAAI,QAAQ,cAAc,EAAE,MAAM,CAAC,CAAC,uBACjD,MAAM,qBACR,QAAQ,QAAQ,GAAG,SAAS,8BACnB,0BAA0B,+BACzB,2BAA2B,OACnD,MAAM,KACV,QAAQ,MAAM,QAAQ,KAAK,CAAC,CA0C9B,CAAC"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/GreedySelection/util.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAA2B,MAAM,mBAAmB,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AA2KnF,eAAO,MAAM,WAAW,uBACF,MAAM,QAAQ,IAAI,QAAQ,cAAc,EAAE,MAAM,CAAC,CAAC,uBACjD,MAAM,qBACR,QAAQ,QAAQ,GAAG,SAAS,8BACnB,0BAA0B,+BACzB,2BAA2B,OACnD,MAAM,KACV,QAAQ,MAAM,QAAQ,KAAK,CAAC,CA2C9B,CAAC"}
@@ -1,28 +1,76 @@
1
1
  import { BigNumber } from 'bignumber.js';
2
+ import { coalesceValueQuantities } from '@cardano-sdk/core';
2
3
  import { InputSelectionError, InputSelectionFailure } from '../InputSelectionError';
3
- import { addTokenMaps, isValidValue, sortByCoins, subtractTokenMaps } from '../util';
4
+ import { addTokenMaps, isValidValue, sortByCoins } from '../util';
4
5
  const PERCENTAGE_TOLERANCE = 0.05;
5
6
  const distributeAssets = (outputs, computeMinimumCoinQuantity, tokenBundleSizeExceedsLimit, fee) => {
6
7
  const adjustedOutputs = [...outputs];
7
- for (let i = 0; i < adjustedOutputs.length; ++i) {
8
- const output = adjustedOutputs[i];
9
- if (!isValidValue(output.value, computeMinimumCoinQuantity, tokenBundleSizeExceedsLimit, fee)) {
10
- if (i === adjustedOutputs.length - 1) {
11
- throw new InputSelectionError(InputSelectionFailure.UtxoFullyDepleted);
12
- }
13
- if (!output.value.assets || output.value.assets.size === 0) {
14
- throw new InputSelectionError(InputSelectionFailure.UtxoFullyDepleted);
15
- }
16
- const splicedAsset = new Map([...output.value.assets.entries()].splice(0, 1));
17
- const currentOutputNewAssets = subtractTokenMaps(output.value.assets, splicedAsset);
18
- const nextOutputNewAssets = addTokenMaps(adjustedOutputs[i + 1].value.assets, splicedAsset);
19
- output.value.assets = currentOutputNewAssets;
20
- adjustedOutputs[i + 1].value.assets = nextOutputNewAssets;
21
- return distributeAssets(adjustedOutputs, computeMinimumCoinQuantity, tokenBundleSizeExceedsLimit, fee);
8
+ if (adjustedOutputs.length === 0)
9
+ return adjustedOutputs;
10
+ const totalAssets = coalesceValueQuantities(adjustedOutputs.map((out) => out.value)).assets;
11
+ if (!totalAssets || totalAssets.size === 0)
12
+ return adjustedOutputs;
13
+ for (const utxo of adjustedOutputs)
14
+ utxo.value.assets = undefined;
15
+ let i = 0;
16
+ const availableOutputs = adjustedOutputs;
17
+ while (totalAssets.size > 0) {
18
+ const splicedAsset = new Map([...totalAssets.entries()].splice(0, 1));
19
+ const currentUtxoIndex = i % availableOutputs.length;
20
+ const currentValue = { ...availableOutputs[currentUtxoIndex].value };
21
+ currentValue.assets = addTokenMaps(currentValue.assets, splicedAsset);
22
+ if (!isValidValue(currentValue, computeMinimumCoinQuantity, tokenBundleSizeExceedsLimit, fee)) {
23
+ availableOutputs.splice(currentUtxoIndex, 1);
22
24
  }
25
+ else {
26
+ availableOutputs[currentUtxoIndex].value = currentValue;
27
+ totalAssets.delete([...splicedAsset.keys()][0]);
28
+ }
29
+ if (availableOutputs.length === 0)
30
+ throw new InputSelectionError(InputSelectionFailure.UtxoFullyDepleted);
31
+ ++i;
23
32
  }
24
33
  return adjustedOutputs;
25
34
  };
35
+ const getMinUtxoAmount = (amount) => {
36
+ const granularityFactor = new BigNumber(0.03);
37
+ let tens = amount.toString().length - 1;
38
+ let minLovelaceStr = '1';
39
+ while (tens > 0) {
40
+ minLovelaceStr += '0';
41
+ --tens;
42
+ }
43
+ return BigInt(new BigNumber(minLovelaceStr).multipliedBy(granularityFactor).toFixed(0, 0));
44
+ };
45
+ const splitChangeOutput = (output, computeMinimumCoinQuantity, fee) => {
46
+ const amount = output.value.coins;
47
+ const minUtxoAdaAmount = getMinUtxoAmount(amount);
48
+ let remaining = amount;
49
+ let runningAmount = 0n;
50
+ const amounts = new Array();
51
+ const divisor = new BigNumber(2);
52
+ while (remaining >= minUtxoAdaAmount) {
53
+ const val = BigInt(new BigNumber(remaining.toString()).dividedBy(divisor).toFixed(0, 0));
54
+ const updatedRemaining = remaining - val;
55
+ if (updatedRemaining <= minUtxoAdaAmount ||
56
+ updatedRemaining <=
57
+ computeMinimumCoinQuantity({
58
+ address: output.address,
59
+ value: { assets: output.value.assets, coins: amount - runningAmount }
60
+ }) +
61
+ fee) {
62
+ amounts.push(amount - runningAmount);
63
+ break;
64
+ }
65
+ runningAmount += val;
66
+ amounts.push(val);
67
+ remaining -= val;
68
+ }
69
+ return amounts.map((coins) => ({
70
+ address: output.address,
71
+ value: { assets: output.value.assets, coins }
72
+ }));
73
+ };
26
74
  export const splitChange = async (getChangeAddresses, totalChangeLovelace, totalChangeAssets, computeMinimumCoinQuantity, tokenBundleSizeExceedsLimit, fee) => {
27
75
  const changeAddresses = await getChangeAddresses();
28
76
  const totalWeight = [...changeAddresses.values()].reduce((sum, current) => sum + current, 0);
@@ -47,7 +95,8 @@ export const splitChange = async (getChangeAddresses, totalChangeLovelace, total
47
95
  const missingAllocation = totalChangeLovelace - runningTotal;
48
96
  changeOutputs[changeOutputs.length - 1].value.coins += missingAllocation;
49
97
  }
50
- const sortedOutputs = changeOutputs.sort(sortByCoins).filter((out) => out.value.coins > 0n);
98
+ const splitOutputs = changeOutputs.flatMap((output) => splitChangeOutput(output, computeMinimumCoinQuantity, fee));
99
+ const sortedOutputs = splitOutputs.sort(sortByCoins).filter((out) => out.value.coins > 0n);
51
100
  if (sortedOutputs && sortedOutputs.length > 0)
52
101
  sortedOutputs[0].value.assets = totalChangeAssets;
53
102
  if (!totalChangeAssets || totalChangeAssets.size === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/GreedySelection/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/GreedySelection/util.ts"],"names":[],"mappings":"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"}