@rosen-bridge/minimum-fee 2.2.3 → 3.0.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 (49) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/dist/constants.d.ts.map +1 -0
  3. package/dist/constants.js +3 -0
  4. package/dist/errors.d.ts.map +1 -0
  5. package/dist/errors.js +26 -0
  6. package/dist/{lib/handleApiError.d.ts → handleApiError.d.ts} +4 -4
  7. package/dist/handleApiError.d.ts.map +1 -0
  8. package/dist/handleApiError.js +35 -0
  9. package/dist/index.d.ts +8 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +8 -0
  12. package/dist/{lib/MinimumFeeBox.d.ts → minimumFeeBox.d.ts} +2 -2
  13. package/dist/minimumFeeBox.d.ts.map +1 -0
  14. package/dist/minimumFeeBox.js +219 -0
  15. package/dist/{lib/MinimumFeeBoxBuilder.d.ts → minimumFeeBoxBuilder.d.ts} +2 -2
  16. package/dist/minimumFeeBoxBuilder.d.ts.map +1 -0
  17. package/dist/minimumFeeBoxBuilder.js +138 -0
  18. package/dist/{lib/MinimumFeeConfig.d.ts → minimumFeeConfig.d.ts} +1 -1
  19. package/dist/minimumFeeConfig.d.ts.map +1 -0
  20. package/dist/minimumFeeConfig.js +41 -0
  21. package/dist/types.d.ts.map +1 -0
  22. package/dist/types.js +22 -0
  23. package/dist/utils.d.ts.map +1 -0
  24. package/dist/utils.js +111 -0
  25. package/package.json +24 -26
  26. package/dist/lib/MinimumFeeBox.d.ts.map +0 -1
  27. package/dist/lib/MinimumFeeBox.js +0 -219
  28. package/dist/lib/MinimumFeeBoxBuilder.d.ts.map +0 -1
  29. package/dist/lib/MinimumFeeBoxBuilder.js +0 -138
  30. package/dist/lib/MinimumFeeConfig.d.ts.map +0 -1
  31. package/dist/lib/MinimumFeeConfig.js +0 -41
  32. package/dist/lib/constants.d.ts.map +0 -1
  33. package/dist/lib/constants.js +0 -3
  34. package/dist/lib/errors.d.ts.map +0 -1
  35. package/dist/lib/errors.js +0 -26
  36. package/dist/lib/handleApiError.d.ts.map +0 -1
  37. package/dist/lib/handleApiError.js +0 -35
  38. package/dist/lib/index.d.ts +0 -8
  39. package/dist/lib/index.d.ts.map +0 -1
  40. package/dist/lib/index.js +0 -8
  41. package/dist/lib/types.d.ts.map +0 -1
  42. package/dist/lib/types.js +0 -22
  43. package/dist/lib/utils.d.ts.map +0 -1
  44. package/dist/lib/utils.js +0 -111
  45. package/dist/tsconfig.build.tsbuildinfo +0 -1
  46. /package/dist/{lib/constants.d.ts → constants.d.ts} +0 -0
  47. /package/dist/{lib/errors.d.ts → errors.d.ts} +0 -0
  48. /package/dist/{lib/types.d.ts → types.d.ts} +0 -0
  49. /package/dist/{lib/utils.d.ts → utils.d.ts} +0 -0
package/dist/lib/utils.js DELETED
@@ -1,111 +0,0 @@
1
- import { Constant } from 'ergo-lib-wasm-nodejs';
2
- /**
3
- * extracts Fee config from box registers
4
- * @param box
5
- */
6
- export const extractFeeFromBox = (box) => {
7
- const R4 = box.register_value(4);
8
- const R5 = box.register_value(5);
9
- const R6 = box.register_value(6);
10
- const R7 = box.register_value(7);
11
- const R8 = box.register_value(8);
12
- const R9 = box.register_value(9);
13
- if (!R4 || !R5 || !R6 || !R7 || !R8 || !R9)
14
- throw Error(`Incomplete register data for minimum-fee config box [${box
15
- .box_id()
16
- .to_str()}]`);
17
- const fees = [];
18
- const chains = R4.to_coll_coll_byte().map((element) => Buffer.from(element).toString());
19
- const heights = R5.to_js();
20
- const bridgeFees = R6.to_js();
21
- const networkFees = R7.to_js();
22
- const rsnRatios = R8.to_js();
23
- const feeRatios = R9.to_js();
24
- for (let feeIdx = 0; feeIdx < heights.length; feeIdx++) {
25
- const fee = {
26
- heights: {},
27
- configs: {},
28
- };
29
- for (let chainIdx = 0; chainIdx < chains.length; chainIdx++) {
30
- const chain = chains[chainIdx];
31
- if (heights[feeIdx][chainIdx] === -1)
32
- continue;
33
- fee.heights[chain] = heights[feeIdx][chainIdx];
34
- if (bridgeFees[feeIdx][chainIdx] === '-1')
35
- continue;
36
- fee.configs[chain] = {
37
- bridgeFee: BigInt(bridgeFees[feeIdx][chainIdx]),
38
- networkFee: BigInt(networkFees[feeIdx][chainIdx]),
39
- rsnRatio: BigInt(rsnRatios[feeIdx][chainIdx][0]),
40
- rsnRatioDivisor: BigInt(rsnRatios[feeIdx][chainIdx][1]),
41
- feeRatio: BigInt(feeRatios[feeIdx][chainIdx]),
42
- };
43
- }
44
- fees.push(fee);
45
- }
46
- return fees;
47
- };
48
- /**
49
- * converts fee config to register values
50
- * @param fees
51
- * @returns
52
- */
53
- export const feeToRegisterValues = (fees) => {
54
- // extract chains
55
- const chains = [];
56
- fees.forEach((fee) => {
57
- Object.keys(fee.heights).forEach((feeChain) => {
58
- if (!chains.includes(feeChain))
59
- chains.push(feeChain);
60
- });
61
- });
62
- chains.sort();
63
- // extract configs
64
- const heights = [];
65
- const bridgeFees = [];
66
- const networkFees = [];
67
- const rsnRatios = [];
68
- const feeRatios = [];
69
- fees.forEach((fee) => {
70
- const heightsConfigs = [];
71
- const bridgeFeesConfigs = [];
72
- const networkFeesConfigs = [];
73
- const rsnRatiosConfigs = [];
74
- const feeRatiosConfigs = [];
75
- chains.forEach((chain) => {
76
- if (Object.hasOwn(fee.heights, chain))
77
- heightsConfigs.push(fee.heights[chain]);
78
- else
79
- heightsConfigs.push(-1);
80
- if (Object.hasOwn(fee.configs, chain)) {
81
- bridgeFeesConfigs.push(fee.configs[chain].bridgeFee.toString());
82
- networkFeesConfigs.push(fee.configs[chain].networkFee.toString());
83
- rsnRatiosConfigs.push([
84
- fee.configs[chain].rsnRatio.toString(),
85
- fee.configs[chain].rsnRatioDivisor.toString(),
86
- ]);
87
- feeRatiosConfigs.push(fee.configs[chain].feeRatio.toString());
88
- }
89
- else {
90
- bridgeFeesConfigs.push('-1');
91
- networkFeesConfigs.push('-1');
92
- rsnRatiosConfigs.push(['-1', '-1']);
93
- feeRatiosConfigs.push('-1');
94
- }
95
- });
96
- heights.push(heightsConfigs);
97
- bridgeFees.push(bridgeFeesConfigs);
98
- networkFees.push(networkFeesConfigs);
99
- rsnRatios.push(rsnRatiosConfigs);
100
- feeRatios.push(feeRatiosConfigs);
101
- });
102
- return {
103
- R4: Constant.from_coll_coll_byte(chains.map((chain) => Buffer.from(chain))),
104
- R5: Constant.from_js(heights),
105
- R6: Constant.from_js(bridgeFees),
106
- R7: Constant.from_js(networkFees),
107
- R8: Constant.from_js(rsnRatios),
108
- R9: Constant.from_js(feeRatios),
109
- };
110
- };
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBVyxNQUFNLHNCQUFzQixDQUFDO0FBR3pEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsR0FBWSxFQUFjLEVBQUU7SUFDNUQsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFakMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUU7UUFDeEMsTUFBTSxLQUFLLENBQ1Qsd0RBQXdELEdBQUc7YUFDeEQsTUFBTSxFQUFFO2FBQ1IsTUFBTSxFQUFFLEdBQUcsQ0FDZixDQUFDO0lBRUosTUFBTSxJQUFJLEdBQWUsRUFBRSxDQUFDO0lBQzVCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ3BELE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQ2hDLENBQUM7SUFDRixNQUFN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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RhbnQsIEVyZ29Cb3ggfSBmcm9tICdlcmdvLWxpYi13YXNtLW5vZGVqcyc7XG5pbXBvcnQgeyBGZWUgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBleHRyYWN0cyBGZWUgY29uZmlnIGZyb20gYm94IHJlZ2lzdGVyc1xuICogQHBhcmFtIGJveFxuICovXG5leHBvcnQgY29uc3QgZXh0cmFjdEZlZUZyb21Cb3ggPSAoYm94OiBFcmdvQm94KTogQXJyYXk8RmVlPiA9PiB7XG4gIGNvbnN0IFI0ID0gYm94LnJlZ2lzdGVyX3ZhbHVlKDQpO1xuICBjb25zdCBSNSA9IGJveC5yZWdpc3Rlcl92YWx1ZSg1KTtcbiAgY29uc3QgUjYgPSBib3gucmVnaXN0ZXJfdmFsdWUoNik7XG4gIGNvbnN0IFI3ID0gYm94LnJlZ2lzdGVyX3ZhbHVlKDcpO1xuICBjb25zdCBSOCA9IGJveC5yZWdpc3Rlcl92YWx1ZSg4KTtcbiAgY29uc3QgUjkgPSBib3gucmVnaXN0ZXJfdmFsdWUoOSk7XG5cbiAgaWYgKCFSNCB8fCAhUjUgfHwgIVI2IHx8ICFSNyB8fCAhUjggfHwgIVI5KVxuICAgIHRocm93IEVycm9yKFxuICAgICAgYEluY29tcGxldGUgcmVnaXN0ZXIgZGF0YSBmb3IgbWluaW11bS1mZWUgY29uZmlnIGJveCBbJHtib3hcbiAgICAgICAgLmJveF9pZCgpXG4gICAgICAgIC50b19zdHIoKX1dYFxuICAgICk7XG5cbiAgY29uc3QgZmVlczogQXJyYXk8RmVlPiA9IFtdO1xuICBjb25zdCBjaGFpbnMgPSBSNC50b19jb2xsX2NvbGxfYnl0ZSgpLm1hcCgoZWxlbWVudCkgPT5cbiAgICBCdWZmZXIuZnJvbShlbGVtZW50KS50b1N0cmluZygpXG4gICk7XG4gIGNvbnN0IGhlaWdodHMgPSBSNS50b19qcygpIGFzIEFycmF5PEFycmF5PG51bWJlcj4+O1xuICBjb25zdCBicmlkZ2VGZWVzID0gUjYudG9fanMoKSBhcyBBcnJheTxBcnJheTxzdHJpbmc+PjtcbiAgY29uc3QgbmV0d29ya0ZlZXMgPSBSNy50b19qcygpIGFzIEFycmF5PEFycmF5PHN0cmluZz4+O1xuICBjb25zdCByc25SYXRpb3MgPSBSOC50b19qcygpIGFzIEFycmF5PEFycmF5PEFycmF5PHN0cmluZz4+PjtcbiAgY29uc3QgZmVlUmF0aW9zID0gUjkudG9fanMoKSBhcyBBcnJheTxBcnJheTxzdHJpbmc+PjtcblxuICBmb3IgKGxldCBmZWVJZHggPSAwOyBmZWVJZHggPCBoZWlnaHRzLmxlbmd0aDsgZmVlSWR4KyspIHtcbiAgICBjb25zdCBmZWU6IEZlZSA9IHtcbiAgICAgIGhlaWdodHM6IHt9LFxuICAgICAgY29uZmlnczoge30sXG4gICAgfTtcbiAgICBmb3IgKGxldCBjaGFpbklkeCA9IDA7IGNoYWluSWR4IDwgY2hhaW5zLmxlbmd0aDsgY2hhaW5JZHgrKykge1xuICAgICAgY29uc3QgY2hhaW4gPSBjaGFpbnNbY2hhaW5JZHhdO1xuXG4gICAgICBpZiAoaGVpZ2h0c1tmZWVJZHhdW2NoYWluSWR4XSA9PT0gLTEpIGNvbnRpbnVlO1xuICAgICAgZmVlLmhlaWdodHNbY2hhaW5dID0gaGVpZ2h0c1tmZWVJZHhdW2NoYWluSWR4XTtcblxuICAgICAgaWYgKGJyaWRnZUZlZXNbZmVlSWR4XVtjaGFpbklkeF0gPT09ICctMScpIGNvbnRpbnVlO1xuICAgICAgZmVlLmNvbmZpZ3NbY2hhaW5dID0ge1xuICAgICAgICBicmlkZ2VGZWU6IEJpZ0ludChicmlkZ2VGZWVzW2ZlZUlkeF1bY2hhaW5JZHhdKSxcbiAgICAgICAgbmV0d29ya0ZlZTogQmlnSW50KG5ldHdvcmtGZWVzW2ZlZUlkeF1bY2hhaW5JZHhdKSxcbiAgICAgICAgcnNuUmF0aW86IEJpZ0ludChyc25SYXRpb3NbZmVlSWR4XVtjaGFpbklkeF1bMF0pLFxuICAgICAgICByc25SYXRpb0Rpdmlzb3I6IEJpZ0ludChyc25SYXRpb3NbZmVlSWR4XVtjaGFpbklkeF1bMV0pLFxuICAgICAgICBmZWVSYXRpbzogQmlnSW50KGZlZVJhdGlvc1tmZWVJZHhdW2NoYWluSWR4XSksXG4gICAgICB9O1xuICAgIH1cbiAgICBmZWVzLnB1c2goZmVlKTtcbiAgfVxuXG4gIHJldHVybiBmZWVzO1xufTtcblxuLyoqXG4gKiBjb252ZXJ0cyBmZWUgY29uZmlnIHRvIHJlZ2lzdGVyIHZhbHVlc1xuICogQHBhcmFtIGZlZXNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBmZWVUb1JlZ2lzdGVyVmFsdWVzID0gKGZlZXM6IEFycmF5PEZlZT4pID0+IHtcbiAgLy8gIGV4dHJhY3QgY2hhaW5zXG4gIGNvbnN0IGNoYWluczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBmZWVzLmZvckVhY2goKGZlZSkgPT4ge1xuICAgIE9iamVjdC5rZXlzKGZlZS5oZWlnaHRzKS5mb3JFYWNoKChmZWVDaGFpbikgPT4ge1xuICAgICAgaWYgKCFjaGFpbnMuaW5jbHVkZXMoZmVlQ2hhaW4pKSBjaGFpbnMucHVzaChmZWVDaGFpbik7XG4gICAgfSk7XG4gIH0pO1xuICBjaGFpbnMuc29ydCgpO1xuICAvLyAgZXh0cmFjdCBjb25maWdzXG4gIGNvbnN0IGhlaWdodHM6IEFycmF5PEFycmF5PG51bWJlcj4+ID0gW107XG4gIGNvbnN0IGJyaWRnZUZlZXM6IEFycmF5PEFycmF5PHN0cmluZz4+ID0gW107XG4gIGNvbnN0IG5ldHdvcmtGZWVzOiBBcnJheTxBcnJheTxzdHJpbmc+PiA9IFtdO1xuICBjb25zdCByc25SYXRpb3M6IEFycmF5PEFycmF5PEFycmF5PHN0cmluZz4+PiA9IFtdO1xuICBjb25zdCBmZWVSYXRpb3M6IEFycmF5PEFycmF5PHN0cmluZz4+ID0gW107XG4gIGZlZXMuZm9yRWFjaCgoZmVlKSA9PiB7XG4gICAgY29uc3QgaGVpZ2h0c0NvbmZpZ3M6IEFycmF5PG51bWJlcj4gPSBbXTtcbiAgICBjb25zdCBicmlkZ2VGZWVzQ29uZmlnczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIGNvbnN0IG5ldHdvcmtGZWVzQ29uZmlnczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIGNvbnN0IHJzblJhdGlvc0NvbmZpZ3M6IEFycmF5PEFycmF5PHN0cmluZz4+ID0gW107XG4gICAgY29uc3QgZmVlUmF0aW9zQ29uZmlnczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gICAgY2hhaW5zLmZvckVhY2goKGNoYWluKSA9PiB7XG4gICAgICBpZiAoT2JqZWN0Lmhhc093bihmZWUuaGVpZ2h0cywgY2hhaW4pKVxuICAgICAgICBoZWlnaHRzQ29uZmlncy5wdXNoKGZlZS5oZWlnaHRzW2NoYWluXSk7XG4gICAgICBlbHNlIGhlaWdodHNDb25maWdzLnB1c2goLTEpO1xuXG4gICAgICBpZiAoT2JqZWN0Lmhhc093bihmZWUuY29uZmlncywgY2hhaW4pKSB7XG4gICAgICAgIGJyaWRnZUZlZXNDb25maWdzLnB1c2goZmVlLmNvbmZpZ3NbY2hhaW5dLmJyaWRnZUZlZS50b1N0cmluZygpKTtcbiAgICAgICAgbmV0d29ya0ZlZXNDb25maWdzLnB1c2goZmVlLmNvbmZpZ3NbY2hhaW5dLm5ldHdvcmtGZWUudG9TdHJpbmcoKSk7XG4gICAgICAgIHJzblJhdGlvc0NvbmZpZ3MucHVzaChbXG4gICAgICAgICAgZmVlLmNvbmZpZ3NbY2hhaW5dLnJzblJhdGlvLnRvU3RyaW5nKCksXG4gICAgICAgICAgZmVlLmNvbmZpZ3NbY2hhaW5dLnJzblJhdGlvRGl2aXNvci50b1N0cmluZygpLFxuICAgICAgICBdKTtcbiAgICAgICAgZmVlUmF0aW9zQ29uZmlncy5wdXNoKGZlZS5jb25maWdzW2NoYWluXS5mZWVSYXRpby50b1N0cmluZygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyaWRnZUZlZXNDb25maWdzLnB1c2goJy0xJyk7XG4gICAgICAgIG5ldHdvcmtGZWVzQ29uZmlncy5wdXNoKCctMScpO1xuICAgICAgICByc25SYXRpb3NDb25maWdzLnB1c2goWyctMScsICctMSddKTtcbiAgICAgICAgZmVlUmF0aW9zQ29uZmlncy5wdXNoKCctMScpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaGVpZ2h0cy5wdXNoKGhlaWdodHNDb25maWdzKTtcbiAgICBicmlkZ2VGZWVzLnB1c2goYnJpZGdlRmVlc0NvbmZpZ3MpO1xuICAgIG5ldHdvcmtGZWVzLnB1c2gobmV0d29ya0ZlZXNDb25maWdzKTtcbiAgICByc25SYXRpb3MucHVzaChyc25SYXRpb3NDb25maWdzKTtcbiAgICBmZWVSYXRpb3MucHVzaChmZWVSYXRpb3NDb25maWdzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBSNDogQ29uc3RhbnQuZnJvbV9jb2xsX2NvbGxfYnl0ZShjaGFpbnMubWFwKChjaGFpbikgPT4gQnVmZmVyLmZyb20oY2hhaW4pKSksXG4gICAgUjU6IENvbnN0YW50LmZyb21fanMoaGVpZ2h0cyksXG4gICAgUjY6IENvbnN0YW50LmZyb21fanMoYnJpZGdlRmVlcyksXG4gICAgUjc6IENvbnN0YW50LmZyb21fanMobmV0d29ya0ZlZXMpLFxuICAgIFI4OiBDb25zdGFudC5mcm9tX2pzKHJzblJhdGlvcyksXG4gICAgUjk6IENvbnN0YW50LmZyb21fanMoZmVlUmF0aW9zKSxcbiAgfTtcbn07XG4iXX0=