@pushchain/core 0.1.31 → 0.1.33
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/package.json +1 -1
- package/src/lib/utils.d.ts +19 -0
- package/src/lib/utils.js +68 -0
- package/src/lib/utils.js.map +1 -1
package/package.json
CHANGED
package/src/lib/utils.d.ts
CHANGED
|
@@ -63,5 +63,24 @@ export declare class Utils {
|
|
|
63
63
|
functionName: string;
|
|
64
64
|
args?: any[];
|
|
65
65
|
}): string;
|
|
66
|
+
/**
|
|
67
|
+
* Multiplies a string representation of a number by a given exponent of base 10 (10^exponent).
|
|
68
|
+
*
|
|
69
|
+
* This is commonly used for converting human-readable token amounts to their on-chain representation.
|
|
70
|
+
* For example, converting "1.5" ETH to wei (18 decimals) would be parseUnits("1.5", 18).
|
|
71
|
+
*
|
|
72
|
+
* @param {string} value - The string representation of the number to multiply.
|
|
73
|
+
* @param {number} exponent - The exponent (number of decimal places).
|
|
74
|
+
* @returns {bigint} The result as a bigint.
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* Utils.helpers.parseUnits('420', 9)
|
|
78
|
+
* // → 420000000000n
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* Utils.helpers.parseUnits('1.5', 18)
|
|
82
|
+
* // → 1500000000000000000n
|
|
83
|
+
*/
|
|
84
|
+
parseUnits(value: string, exponent: number): bigint;
|
|
66
85
|
};
|
|
67
86
|
}
|
package/src/lib/utils.js
CHANGED
|
@@ -99,5 +99,73 @@ Utils.helpers = {
|
|
|
99
99
|
throw new Error(`Failed to encode function '${functionName}': ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
100
100
|
}
|
|
101
101
|
},
|
|
102
|
+
/**
|
|
103
|
+
* Multiplies a string representation of a number by a given exponent of base 10 (10^exponent).
|
|
104
|
+
*
|
|
105
|
+
* This is commonly used for converting human-readable token amounts to their on-chain representation.
|
|
106
|
+
* For example, converting "1.5" ETH to wei (18 decimals) would be parseUnits("1.5", 18).
|
|
107
|
+
*
|
|
108
|
+
* @param {string} value - The string representation of the number to multiply.
|
|
109
|
+
* @param {number} exponent - The exponent (number of decimal places).
|
|
110
|
+
* @returns {bigint} The result as a bigint.
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* Utils.helpers.parseUnits('420', 9)
|
|
114
|
+
* // → 420000000000n
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* Utils.helpers.parseUnits('1.5', 18)
|
|
118
|
+
* // → 1500000000000000000n
|
|
119
|
+
*/
|
|
120
|
+
parseUnits(value, exponent) {
|
|
121
|
+
// Validate inputs
|
|
122
|
+
if (typeof value !== 'string') {
|
|
123
|
+
throw new Error('Value must be a string');
|
|
124
|
+
}
|
|
125
|
+
if (typeof exponent !== 'number' ||
|
|
126
|
+
!Number.isInteger(exponent) ||
|
|
127
|
+
exponent < 0) {
|
|
128
|
+
throw new Error('Exponent must be a non-negative integer');
|
|
129
|
+
}
|
|
130
|
+
// Handle empty string
|
|
131
|
+
if (value.trim() === '') {
|
|
132
|
+
throw new Error('Value cannot be empty');
|
|
133
|
+
}
|
|
134
|
+
// Remove any whitespace
|
|
135
|
+
const trimmedValue = value.trim();
|
|
136
|
+
// Check for valid number format
|
|
137
|
+
if (!/^-?\d*\.?\d*$/.test(trimmedValue)) {
|
|
138
|
+
throw new Error('Value must be a valid number string');
|
|
139
|
+
}
|
|
140
|
+
// Handle case where value is just a decimal point
|
|
141
|
+
if (trimmedValue === '.' ||
|
|
142
|
+
trimmedValue === '-.' ||
|
|
143
|
+
trimmedValue === '') {
|
|
144
|
+
throw new Error('Value must be a valid number string');
|
|
145
|
+
}
|
|
146
|
+
try {
|
|
147
|
+
// Split on decimal point to handle fractional values
|
|
148
|
+
const parts = trimmedValue.split('.');
|
|
149
|
+
const integerPart = parts[0] || '0';
|
|
150
|
+
const fractionalPart = parts[1] || '';
|
|
151
|
+
// Check if fractional part has more digits than the exponent allows
|
|
152
|
+
if (fractionalPart.length > exponent) {
|
|
153
|
+
throw new Error(`Value has more decimal places (${fractionalPart.length}) than exponent allows (${exponent})`);
|
|
154
|
+
}
|
|
155
|
+
// Pad fractional part with zeros to match exponent
|
|
156
|
+
const paddedFractionalPart = fractionalPart.padEnd(exponent, '0');
|
|
157
|
+
// Combine integer and fractional parts
|
|
158
|
+
const combinedValue = integerPart + paddedFractionalPart;
|
|
159
|
+
// Convert to bigint
|
|
160
|
+
return BigInt(combinedValue);
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
if (error instanceof Error &&
|
|
164
|
+
error.message.includes('decimal places')) {
|
|
165
|
+
throw error;
|
|
166
|
+
}
|
|
167
|
+
throw new Error(`Failed to parse value '${value}': ${error instanceof Error ? error.message : 'Invalid number format'}`);
|
|
168
|
+
}
|
|
169
|
+
},
|
|
102
170
|
};
|
|
103
171
|
//# sourceMappingURL=utils.js.map
|
package/src/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../packages/core/src/lib/utils.ts"],"names":[],"mappings":";;;AAAA,iDAK6B;AAC7B,+CAI4B;AAC5B,6CAA0C;AAC1C,mCAAgC;AAEhC;;;GAGG;AAEH;;;GAGG;AACH,MAAa,KAAK;;AAAlB,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../packages/core/src/lib/utils.ts"],"names":[],"mappings":"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"}
|