viem 0.3.43 → 0.3.44
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/actions/wallet/signMessage.js +8 -1
- package/dist/cjs/actions/wallet/signMessage.js.map +1 -1
- package/dist/cjs/adapters/ethers.js +8 -1
- package/dist/cjs/adapters/ethers.js.map +1 -1
- package/dist/cjs/utils/signature/hashMessage.js +7 -1
- package/dist/cjs/utils/signature/hashMessage.js.map +1 -1
- package/dist/cjs/utils/unit/parseUnits.js +1 -1
- package/dist/cjs/utils/unit/parseUnits.js.map +1 -1
- package/dist/esm/actions/wallet/signMessage.js +9 -2
- package/dist/esm/actions/wallet/signMessage.js.map +1 -1
- package/dist/esm/adapters/ethers.js +9 -2
- package/dist/esm/adapters/ethers.js.map +1 -1
- package/dist/esm/utils/signature/hashMessage.js +8 -2
- package/dist/esm/utils/signature/hashMessage.js.map +1 -1
- package/dist/esm/utils/unit/parseUnits.js +1 -1
- package/dist/esm/utils/unit/parseUnits.js.map +1 -1
- package/dist/types/accounts/types.d.ts +2 -2
- package/dist/types/accounts/types.d.ts.map +1 -1
- package/dist/types/accounts/utils/signMessage.d.ts +2 -2
- package/dist/types/accounts/utils/signMessage.d.ts.map +1 -1
- package/dist/types/actions/public/verifyMessage.d.ts +2 -2
- package/dist/types/actions/public/verifyMessage.d.ts.map +1 -1
- package/dist/types/actions/wallet/signMessage.d.ts +2 -2
- package/dist/types/actions/wallet/signMessage.d.ts.map +1 -1
- package/dist/types/adapters/ethers.d.ts.map +1 -1
- package/dist/types/types/misc.d.ts +4 -0
- package/dist/types/types/misc.d.ts.map +1 -1
- package/dist/types/utils/signature/hashMessage.d.ts +2 -2
- package/dist/types/utils/signature/hashMessage.d.ts.map +1 -1
- package/dist/types/utils/signature/recoverMessageAddress.d.ts +2 -2
- package/dist/types/utils/signature/recoverMessageAddress.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/accounts/types.ts +2 -2
- package/src/accounts/utils/signMessage.ts +2 -2
- package/src/actions/public/verifyMessage.ts +2 -2
- package/src/actions/wallet/signMessage.ts +11 -4
- package/src/adapters/ethers.ts +7 -2
- package/src/types/misc.ts +6 -0
- package/src/utils/signature/hashMessage.ts +8 -4
- package/src/utils/signature/recoverMessageAddress.ts +2 -2
- package/src/utils/unit/parseUnits.ts +1 -1
@@ -12,9 +12,16 @@ async function signMessage(client, { account: account_ = client.account, message
|
|
12
12
|
const account = (0, parseAccount_js_1.parseAccount)(account_);
|
13
13
|
if (account.type === 'local')
|
14
14
|
return account.signMessage({ message });
|
15
|
+
const message_ = (() => {
|
16
|
+
if (typeof message === 'string')
|
17
|
+
return (0, toHex_js_1.stringToHex)(message);
|
18
|
+
if (message.raw instanceof Uint8Array)
|
19
|
+
return (0, toHex_js_1.toHex)(message.raw);
|
20
|
+
return message.raw;
|
21
|
+
})();
|
15
22
|
return client.request({
|
16
23
|
method: 'personal_sign',
|
17
|
-
params: [
|
24
|
+
params: [message_, account.address],
|
18
25
|
});
|
19
26
|
}
|
20
27
|
exports.signMessage = signMessage;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"signMessage.js","sourceRoot":"","sources":["../../../../src/actions/wallet/signMessage.ts"],"names":[],"mappings":";;;AACA,0EAAmE;AAGnE,wDAA8D;AAI9D,
|
1
|
+
{"version":3,"file":"signMessage.js","sourceRoot":"","sources":["../../../../src/actions/wallet/signMessage.ts"],"names":[],"mappings":";;;AACA,0EAAmE;AAGnE,wDAA8D;AAI9D,4DAAkE;AAwD3D,KAAK,UAAU,WAAW,CAI/B,MAAiD,EACjD,EACE,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,OAAO,EAClC,OAAO,GACyB;IAElC,IAAI,CAAC,QAAQ;QACX,MAAM,IAAI,iCAAoB,CAAC;YAC7B,QAAQ,EAAE,kCAAkC;SAC7C,CAAC,CAAA;IACJ,MAAM,OAAO,GAAG,IAAA,8BAAY,EAAC,QAAQ,CAAC,CAAA;IACtC,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IAErE,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE;QACrB,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAA,sBAAW,EAAC,OAAO,CAAC,CAAA;QAC5D,IAAI,OAAO,CAAC,GAAG,YAAY,UAAU;YAAE,OAAO,IAAA,gBAAK,EAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAChE,OAAO,OAAO,CAAC,GAAG,CAAA;IACpB,CAAC,CAAC,EAAE,CAAA;IAEJ,OAAO,MAAM,CAAC,OAAO,CAAC;QACpB,MAAM,EAAE,eAAe;QACvB,MAAM,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC;KACpC,CAAC,CAAA;AACJ,CAAC;AA3BD,kCA2BC"}
|
@@ -6,7 +6,14 @@ const toBytes_js_1 = require("../utils/encoding/toBytes.js");
|
|
6
6
|
const ethersWalletToAccount = (wallet) => (0, toAccount_js_1.toAccount)({
|
7
7
|
address: wallet.address,
|
8
8
|
async signMessage({ message }) {
|
9
|
-
|
9
|
+
const messageBytes = (() => {
|
10
|
+
if (typeof message === 'string')
|
11
|
+
return (0, toBytes_js_1.stringToBytes)(message);
|
12
|
+
if (message.raw instanceof Uint8Array)
|
13
|
+
return message.raw;
|
14
|
+
return (0, toBytes_js_1.toBytes)(message.raw);
|
15
|
+
})();
|
16
|
+
return (await wallet.signMessage(messageBytes));
|
10
17
|
},
|
11
18
|
async signTransaction(txn) {
|
12
19
|
let type = null;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ethers.js","sourceRoot":"","sources":["../../../src/adapters/ethers.ts"],"names":[],"mappings":";;;AAEA,2DAAoD;AAEpD,
|
1
|
+
{"version":3,"file":"ethers.js","sourceRoot":"","sources":["../../../src/adapters/ethers.ts"],"names":[],"mappings":";;;AAEA,2DAAoD;AAEpD,6DAAqE;AAwC9D,MAAM,qBAAqB,GAAG,CAAC,MAAoB,EAAE,EAAE,CAC5D,IAAA,wBAAS,EAAC;IACR,OAAO,EAAE,MAAM,CAAC,OAAkB;IAClC,KAAK,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE;QAC3B,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE;YACzB,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,OAAO,IAAA,0BAAa,EAAC,OAAO,CAAC,CAAA;YAC9D,IAAI,OAAO,CAAC,GAAG,YAAY,UAAU;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAA;YACzD,OAAO,IAAA,oBAAO,EAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC7B,CAAC,CAAC,EAAE,CAAA;QACJ,OAAO,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAS,CAAA;IACzD,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,GAAG;QAGvB,IAAI,IAAI,GAAG,IAAI,CAAA;QACf,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;YACzB,IAAI,GAAG,CAAC,CAAA;SACT;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE;YACjC,IAAI,GAAG,CAAC,CAAA;SACT;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE;YACjC,IAAI,GAAG,CAAC,CAAA;SACT;QACD,OAAO,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC;YAEnC,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,QAAQ,EAAE,GAAG,CAAC,GAAG;YACjB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI;YACJ,KAAK,EAAE,GAAG,CAAC,KAAK;YAEhB,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAErE,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,oBAAoB;gBACpD,CAAC,CAAC,EAAE,oBAAoB,EAAE,GAAG,CAAC,oBAAoB,EAAE;gBACpD,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,YAAY;gBAC5C,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE;gBACpC,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAS,CAAA;IACb,CAAC;IACD,KAAK,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;QACpD,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,MAAa,CAAA;QACnD,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa;YACxC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YACnC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACtC,OAAO,CAAC,MAAM,aAAa,CACzB,MAAM,IAAI,EAAE,EACZ,KAAyC,EACzC,OAAO,CACR,CAAS,CAAA;IACZ,CAAC;CACF,CAAC,CAAA;AAtDS,QAAA,qBAAqB,yBAsD9B"}
|
@@ -5,7 +5,13 @@ const concat_js_1 = require("../data/concat.js");
|
|
5
5
|
const toBytes_js_1 = require("../encoding/toBytes.js");
|
6
6
|
const keccak256_js_1 = require("../hash/keccak256.js");
|
7
7
|
function hashMessage(message, to_) {
|
8
|
-
const messageBytes = (
|
8
|
+
const messageBytes = (() => {
|
9
|
+
if (typeof message === 'string')
|
10
|
+
return (0, toBytes_js_1.stringToBytes)(message);
|
11
|
+
if (message.raw instanceof Uint8Array)
|
12
|
+
return message.raw;
|
13
|
+
return (0, toBytes_js_1.toBytes)(message.raw);
|
14
|
+
})();
|
9
15
|
const prefixBytes = (0, toBytes_js_1.stringToBytes)(`\x19Ethereum Signed Message:\n${messageBytes.length}`);
|
10
16
|
return (0, keccak256_js_1.keccak256)((0, concat_js_1.concat)([prefixBytes, messageBytes]), to_);
|
11
17
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"hashMessage.js","sourceRoot":"","sources":["../../../../src/utils/signature/hashMessage.ts"],"names":[],"mappings":";;;AACA,iDAA0C;AAC1C,
|
1
|
+
{"version":3,"file":"hashMessage.js","sourceRoot":"","sources":["../../../../src/utils/signature/hashMessage.ts"],"names":[],"mappings":";;;AACA,iDAA0C;AAC1C,uDAA+D;AAC/D,uDAAgD;AAQhD,SAAgB,WAAW,CACzB,OAAwB,EACxB,GAAS;IAET,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE;QACzB,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAA,0BAAa,EAAC,OAAO,CAAC,CAAA;QAC9D,IAAI,OAAO,CAAC,GAAG,YAAY,UAAU;YAAE,OAAO,OAAO,CAAC,GAAG,CAAA;QACzD,OAAO,IAAA,oBAAO,EAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC7B,CAAC,CAAC,EAAE,CAAA;IACJ,MAAM,WAAW,GAAG,IAAA,0BAAa,EAC/B,iCAAiC,YAAY,CAAC,MAAM,EAAE,CACvD,CAAA;IACD,OAAO,IAAA,wBAAS,EAAC,IAAA,kBAAM,EAAC,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AAC5D,CAAC;AAbD,kCAaC"}
|
@@ -16,7 +16,7 @@ function parseUnits(value, decimals) {
|
|
16
16
|
fraction.slice(0, decimals),
|
17
17
|
fraction.slice(decimals),
|
18
18
|
];
|
19
|
-
fraction = `${/^0
|
19
|
+
fraction = `${/^0+/.test(before) ? before.slice(0, before.length - 1) : ''}${Math.round(Number(`${before}.${after}`))}`;
|
20
20
|
}
|
21
21
|
else {
|
22
22
|
fraction = fraction.padEnd(decimals, '0');
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"parseUnits.js","sourceRoot":"","sources":["../../../../src/utils/unit/parseUnits.ts"],"names":[],"mappings":";;;AAAA,SAAgB,UAAU,CAAC,KAAkB,EAAE,QAAgB;IAC7D,IAAI,CAAC,OAAO,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAEhD,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IACxC,IAAI,QAAQ;QAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAGxC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IAGxC,IAAI,QAAQ,KAAK,CAAC,EAAE;QAClB,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,IAAI,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAA;QAC3D,QAAQ,GAAG,EAAE,CAAA;KACd;SAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,QAAQ,EAAE;QACrC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG;YACtB,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;YAC3B,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;SACzB,CAAA;QACD,QAAQ,GAAG,GACT,
|
1
|
+
{"version":3,"file":"parseUnits.js","sourceRoot":"","sources":["../../../../src/utils/unit/parseUnits.ts"],"names":[],"mappings":";;;AAAA,SAAgB,UAAU,CAAC,KAAkB,EAAE,QAAgB;IAC7D,IAAI,CAAC,OAAO,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAEhD,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IACxC,IAAI,QAAQ;QAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAGxC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IAGxC,IAAI,QAAQ,KAAK,CAAC,EAAE;QAClB,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,IAAI,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAA;QAC3D,QAAQ,GAAG,EAAE,CAAA;KACd;SAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,QAAQ,EAAE;QACrC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG;YACtB,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;YAC3B,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;SACzB,CAAA;QACD,QAAQ,GAAG,GACT,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAC5D,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,CAAA;KAC9C;SAAM;QACL,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;KAC1C;IAED,OAAO,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,GAAG,QAAQ,EAAE,CAAC,CAAA;AAC9D,CAAC;AA1BD,gCA0BC"}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { parseAccount } from '../../accounts/utils/parseAccount.js';
|
2
2
|
import { AccountNotFoundError } from '../../errors/account.js';
|
3
|
-
import { toHex } from '../../utils/encoding/toHex.js';
|
3
|
+
import { stringToHex, toHex } from '../../utils/encoding/toHex.js';
|
4
4
|
export async function signMessage(client, { account: account_ = client.account, message, }) {
|
5
5
|
if (!account_)
|
6
6
|
throw new AccountNotFoundError({
|
@@ -9,9 +9,16 @@ export async function signMessage(client, { account: account_ = client.account,
|
|
9
9
|
const account = parseAccount(account_);
|
10
10
|
if (account.type === 'local')
|
11
11
|
return account.signMessage({ message });
|
12
|
+
const message_ = (() => {
|
13
|
+
if (typeof message === 'string')
|
14
|
+
return stringToHex(message);
|
15
|
+
if (message.raw instanceof Uint8Array)
|
16
|
+
return toHex(message.raw);
|
17
|
+
return message.raw;
|
18
|
+
})();
|
12
19
|
return client.request({
|
13
20
|
method: 'personal_sign',
|
14
|
-
params: [
|
21
|
+
params: [message_, account.address],
|
15
22
|
});
|
16
23
|
}
|
17
24
|
//# sourceMappingURL=signMessage.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"signMessage.js","sourceRoot":"","sources":["../../../../src/actions/wallet/signMessage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AAGnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAI9D,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAA;
|
1
|
+
{"version":3,"file":"signMessage.js","sourceRoot":"","sources":["../../../../src/actions/wallet/signMessage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAA;AAGnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAI9D,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAA;AAwDlE,MAAM,CAAC,KAAK,UAAU,WAAW,CAI/B,MAAiD,EACjD,EACE,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC,OAAO,EAClC,OAAO,GACyB;IAElC,IAAI,CAAC,QAAQ;QACX,MAAM,IAAI,oBAAoB,CAAC;YAC7B,QAAQ,EAAE,kCAAkC;SAC7C,CAAC,CAAA;IACJ,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IACtC,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IAErE,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE;QACrB,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,WAAW,CAAC,OAAO,CAAC,CAAA;QAC5D,IAAI,OAAO,CAAC,GAAG,YAAY,UAAU;YAAE,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAChE,OAAO,OAAO,CAAC,GAAG,CAAA;IACpB,CAAC,CAAC,EAAE,CAAA;IAEJ,OAAO,MAAM,CAAC,OAAO,CAAC;QACpB,MAAM,EAAE,eAAe;QACvB,MAAM,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC;KACpC,CAAC,CAAA;AACJ,CAAC"}
|
@@ -1,9 +1,16 @@
|
|
1
1
|
import { toAccount } from '../accounts/toAccount.js';
|
2
|
-
import { toBytes } from '../utils/encoding/toBytes.js';
|
2
|
+
import { stringToBytes, toBytes } from '../utils/encoding/toBytes.js';
|
3
3
|
export const ethersWalletToAccount = (wallet) => toAccount({
|
4
4
|
address: wallet.address,
|
5
5
|
async signMessage({ message }) {
|
6
|
-
|
6
|
+
const messageBytes = (() => {
|
7
|
+
if (typeof message === 'string')
|
8
|
+
return stringToBytes(message);
|
9
|
+
if (message.raw instanceof Uint8Array)
|
10
|
+
return message.raw;
|
11
|
+
return toBytes(message.raw);
|
12
|
+
})();
|
13
|
+
return (await wallet.signMessage(messageBytes));
|
7
14
|
},
|
8
15
|
async signTransaction(txn) {
|
9
16
|
let type = null;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ethers.js","sourceRoot":"","sources":["../../../src/adapters/ethers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEpD,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;
|
1
|
+
{"version":3,"file":"ethers.js","sourceRoot":"","sources":["../../../src/adapters/ethers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAEpD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAA;AAwCrE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,MAAoB,EAAE,EAAE,CAC5D,SAAS,CAAC;IACR,OAAO,EAAE,MAAM,CAAC,OAAkB;IAClC,KAAK,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE;QAC3B,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE;YACzB,IAAI,OAAO,OAAO,KAAK,QAAQ;gBAAE,OAAO,aAAa,CAAC,OAAO,CAAC,CAAA;YAC9D,IAAI,OAAO,CAAC,GAAG,YAAY,UAAU;gBAAE,OAAO,OAAO,CAAC,GAAG,CAAA;YACzD,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC7B,CAAC,CAAC,EAAE,CAAA;QACJ,OAAO,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAS,CAAA;IACzD,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,GAAG;QAGvB,IAAI,IAAI,GAAG,IAAI,CAAA;QACf,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;YACzB,IAAI,GAAG,CAAC,CAAA;SACT;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE;YACjC,IAAI,GAAG,CAAC,CAAA;SACT;aAAM,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE;YACjC,IAAI,GAAG,CAAC,CAAA;SACT;QACD,OAAO,CAAC,MAAM,MAAM,CAAC,eAAe,CAAC;YAEnC,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,QAAQ,EAAE,GAAG,CAAC,GAAG;YACjB,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI;YACJ,KAAK,EAAE,GAAG,CAAC,KAAK;YAEhB,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAErE,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,oBAAoB;gBACpD,CAAC,CAAC,EAAE,oBAAoB,EAAE,GAAG,CAAC,oBAAoB,EAAE;gBACpD,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,YAAY;gBAC5C,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE;gBACpC,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAS,CAAA;IACb,CAAC;IACD,KAAK,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;QACpD,MAAM,EAAE,YAAY,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,MAAa,CAAA;QACnD,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa;YACxC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;YACnC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACtC,OAAO,CAAC,MAAM,aAAa,CACzB,MAAM,IAAI,EAAE,EACZ,KAAyC,EACzC,OAAO,CACR,CAAS,CAAA;IACZ,CAAC;CACF,CAAC,CAAA"}
|
@@ -1,8 +1,14 @@
|
|
1
1
|
import { concat } from '../data/concat.js';
|
2
|
-
import { stringToBytes } from '../encoding/toBytes.js';
|
2
|
+
import { stringToBytes, toBytes } from '../encoding/toBytes.js';
|
3
3
|
import { keccak256 } from '../hash/keccak256.js';
|
4
4
|
export function hashMessage(message, to_) {
|
5
|
-
const messageBytes =
|
5
|
+
const messageBytes = (() => {
|
6
|
+
if (typeof message === 'string')
|
7
|
+
return stringToBytes(message);
|
8
|
+
if (message.raw instanceof Uint8Array)
|
9
|
+
return message.raw;
|
10
|
+
return toBytes(message.raw);
|
11
|
+
})();
|
6
12
|
const prefixBytes = stringToBytes(`\x19Ethereum Signed Message:\n${messageBytes.length}`);
|
7
13
|
return keccak256(concat([prefixBytes, messageBytes]), to_);
|
8
14
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"hashMessage.js","sourceRoot":"","sources":["../../../../src/utils/signature/hashMessage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;
|
1
|
+
{"version":3,"file":"hashMessage.js","sourceRoot":"","sources":["../../../../src/utils/signature/hashMessage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAQhD,MAAM,UAAU,WAAW,CACzB,OAAwB,EACxB,GAAS;IAET,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE;QACzB,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,aAAa,CAAC,OAAO,CAAC,CAAA;QAC9D,IAAI,OAAO,CAAC,GAAG,YAAY,UAAU;YAAE,OAAO,OAAO,CAAC,GAAG,CAAA;QACzD,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC7B,CAAC,CAAC,EAAE,CAAA;IACJ,MAAM,WAAW,GAAG,aAAa,CAC/B,iCAAiC,YAAY,CAAC,MAAM,EAAE,CACvD,CAAA;IACD,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;AAC5D,CAAC"}
|
@@ -13,7 +13,7 @@ export function parseUnits(value, decimals) {
|
|
13
13
|
fraction.slice(0, decimals),
|
14
14
|
fraction.slice(decimals),
|
15
15
|
];
|
16
|
-
fraction = `${/^0
|
16
|
+
fraction = `${/^0+/.test(before) ? before.slice(0, before.length - 1) : ''}${Math.round(Number(`${before}.${after}`))}`;
|
17
17
|
}
|
18
18
|
else {
|
19
19
|
fraction = fraction.padEnd(decimals, '0');
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"parseUnits.js","sourceRoot":"","sources":["../../../../src/utils/unit/parseUnits.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,KAAkB,EAAE,QAAgB;IAC7D,IAAI,CAAC,OAAO,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAEhD,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IACxC,IAAI,QAAQ;QAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAGxC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IAGxC,IAAI,QAAQ,KAAK,CAAC,EAAE;QAClB,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,IAAI,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAA;QAC3D,QAAQ,GAAG,EAAE,CAAA;KACd;SAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,QAAQ,EAAE;QACrC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG;YACtB,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;YAC3B,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;SACzB,CAAA;QACD,QAAQ,GAAG,GACT,
|
1
|
+
{"version":3,"file":"parseUnits.js","sourceRoot":"","sources":["../../../../src/utils/unit/parseUnits.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,UAAU,CAAC,KAAkB,EAAE,QAAgB;IAC7D,IAAI,CAAC,OAAO,EAAE,QAAQ,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAEhD,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IACxC,IAAI,QAAQ;QAAE,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAGxC,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IAGxC,IAAI,QAAQ,KAAK,CAAC,EAAE;QAClB,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,OAAO,IAAI,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAA;QAC3D,QAAQ,GAAG,EAAE,CAAA;KACd;SAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,QAAQ,EAAE;QACrC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG;YACtB,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC;YAC3B,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;SACzB,CAAA;QACD,QAAQ,GAAG,GACT,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAC5D,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,EAAE,CAAA;KAC9C;SAAM;QACL,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;KAC1C;IAED,OAAO,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,GAAG,QAAQ,EAAE,CAAC,CAAA;AAC9D,CAAC"}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import type { HDKey } from '@scure/bip32';
|
2
2
|
import type { Address, TypedData } from 'abitype';
|
3
|
-
import type { Hash, Hex } from '../types/misc.js';
|
3
|
+
import type { Hash, Hex, SignableMessage } from '../types/misc.js';
|
4
4
|
import type { TransactionSerializable } from '../types/transaction.js';
|
5
5
|
import type { TypedDataDefinition } from '../types/typedData.js';
|
6
6
|
export type Account<TAddress extends Address = Address> = JsonRpcAccount<TAddress> | LocalAccount<string, TAddress>;
|
@@ -8,7 +8,7 @@ export type AccountSource = Address | CustomSource;
|
|
8
8
|
export type CustomSource = {
|
9
9
|
address: Address;
|
10
10
|
signMessage: ({ message }: {
|
11
|
-
message:
|
11
|
+
message: SignableMessage;
|
12
12
|
}) => Promise<Hash>;
|
13
13
|
signTransaction: (transaction: TransactionSerializable) => Promise<Hash>;
|
14
14
|
signTypedData: <TTypedData extends TypedData | {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/accounts/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAEzC,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEjD,OAAO,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/accounts/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAEzC,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAEjD,OAAO,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAEhE,MAAM,MAAM,OAAO,CAAC,QAAQ,SAAS,OAAO,GAAG,OAAO,IAClD,cAAc,CAAC,QAAQ,CAAC,GACxB,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AAElC,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,YAAY,CAAA;AAClD,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE;QAAE,OAAO,EAAE,eAAe,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzE,eAAe,EAAE,CAAC,WAAW,EAAE,uBAAuB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxE,aAAa,EAAE,CACb,UAAU,SAAS,SAAS,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,EACzD,YAAY,SAAS,MAAM,GAAG,MAAM,EAEpC,SAAS,EAAE,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,KACrD,OAAO,CAAC,IAAI,CAAC,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,cAAc,CAAC,QAAQ,SAAS,OAAO,GAAG,OAAO,IAAI;IAC/D,OAAO,EAAE,QAAQ,CAAA;IACjB,IAAI,EAAE,UAAU,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,YAAY,CACtB,OAAO,SAAS,MAAM,GAAG,QAAQ,EACjC,QAAQ,SAAS,OAAO,GAAG,OAAO,IAChC,YAAY,GAAG;IACjB,OAAO,EAAE,QAAQ,CAAA;IACjB,SAAS,EAAE,GAAG,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;IACf,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,MAAM,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG;IAC3C,QAAQ,IAAI,KAAK,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,SAAS,GACjB;IACE,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,iFAAiF;IACjF,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,+EAA+E;IAC/E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,KAAK,CAAA;CACb,GACD;IACE,YAAY,CAAC,EAAE,KAAK,CAAA;IACpB,YAAY,CAAC,EAAE,KAAK,CAAA;IACpB,WAAW,CAAC,EAAE,KAAK,CAAA;IACnB,mBAAmB;IACnB,IAAI,EAAE,aAAa,MAAM,EAAE,CAAA;CAC5B,CAAA;AAEL,MAAM,MAAM,iBAAiB,GAAG,YAAY,CAAC,YAAY,CAAC,CAAA"}
|
@@ -1,7 +1,7 @@
|
|
1
|
-
import type { Hex } from '../../types/misc.js';
|
1
|
+
import type { Hex, SignableMessage } from '../../types/misc.js';
|
2
2
|
export type SignMessageParameters = {
|
3
3
|
/** The message to sign. */
|
4
|
-
message:
|
4
|
+
message: SignableMessage;
|
5
5
|
/** The private key to sign with. */
|
6
6
|
privateKey: Hex;
|
7
7
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"signMessage.d.ts","sourceRoot":"","sources":["../../../../src/accounts/utils/signMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;
|
1
|
+
{"version":3,"file":"signMessage.d.ts","sourceRoot":"","sources":["../../../../src/accounts/utils/signMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAM/D,MAAM,MAAM,qBAAqB,GAAG;IAClC,2BAA2B;IAC3B,OAAO,EAAE,eAAe,CAAA;IACxB,oCAAoC;IACpC,UAAU,EAAE,GAAG,CAAA;CAChB,CAAA;AACD,MAAM,MAAM,qBAAqB,GAAG,GAAG,CAAA;AAEvC;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,EAChC,OAAO,EACP,UAAU,GACX,EAAE,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAGxD"}
|
@@ -1,14 +1,14 @@
|
|
1
1
|
import type { Chain } from '../../chains.js';
|
2
2
|
import type { PublicClient } from '../../clients/createPublicClient.js';
|
3
3
|
import type { Transport } from '../../clients/transports/createTransport.js';
|
4
|
-
import type { ByteArray, Hex } from '../../types/misc.js';
|
4
|
+
import type { ByteArray, Hex, SignableMessage } from '../../types/misc.js';
|
5
5
|
import { type VerifyHashParameters } from './verifyHash.js';
|
6
6
|
import type { Address } from 'abitype';
|
7
7
|
export type VerifyMessageParameters = Omit<VerifyHashParameters, 'hash'> & {
|
8
8
|
/** The address that signed the original message. */
|
9
9
|
address: Address;
|
10
10
|
/** The message to be verified. */
|
11
|
-
message:
|
11
|
+
message: SignableMessage;
|
12
12
|
/** The signature that was generated by signing the message with the address's private key. */
|
13
13
|
signature: Hex | ByteArray;
|
14
14
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"verifyMessage.d.ts","sourceRoot":"","sources":["../../../../src/actions/public/verifyMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAA;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;
|
1
|
+
{"version":3,"file":"verifyMessage.d.ts","sourceRoot":"","sources":["../../../../src/actions/public/verifyMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAA;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAE1E,OAAO,EAAE,KAAK,oBAAoB,EAAc,MAAM,iBAAiB,CAAA;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,oBAAoB,EAAE,MAAM,CAAC,GAAG;IACzE,oDAAoD;IACpD,OAAO,EAAE,OAAO,CAAA;IAChB,kCAAkC;IAClC,OAAO,EAAE,eAAe,CAAA;IACxB,8FAA8F;IAC9F,SAAS,EAAE,GAAG,GAAG,SAAS,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAA;AAE7C;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAAC,MAAM,SAAS,KAAK,GAAG,SAAS,EAClE,MAAM,EAAE,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,EACvC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,WAAW,EAAE,EAAE,uBAAuB,GACvE,OAAO,CAAC,uBAAuB,CAAC,CAQlC"}
|
@@ -3,9 +3,9 @@ import type { WalletClient } from '../../clients/createWalletClient.js';
|
|
3
3
|
import type { Transport } from '../../clients/transports/createTransport.js';
|
4
4
|
import type { GetAccountParameter } from '../../types/account.js';
|
5
5
|
import type { Chain } from '../../types/chain.js';
|
6
|
-
import type { Hex } from '../../types/misc.js';
|
6
|
+
import type { Hex, SignableMessage } from '../../types/misc.js';
|
7
7
|
export type SignMessageParameters<TAccount extends Account | undefined = Account | undefined> = GetAccountParameter<TAccount> & {
|
8
|
-
message:
|
8
|
+
message: SignableMessage;
|
9
9
|
};
|
10
10
|
export type SignMessageReturnType = Hex;
|
11
11
|
/**
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"signMessage.d.ts","sourceRoot":"","sources":["../../../../src/actions/wallet/signMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAA;AAE5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;
|
1
|
+
{"version":3,"file":"signMessage.d.ts","sourceRoot":"","sources":["../../../../src/actions/wallet/signMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAA;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAA;AAE5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAG/D,MAAM,MAAM,qBAAqB,CAC/B,QAAQ,SAAS,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,IACxD,mBAAmB,CAAC,QAAQ,CAAC,GAAG;IAClC,OAAO,EAAE,eAAe,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,qBAAqB,GAAG,GAAG,CAAA;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAsB,WAAW,CAC/B,MAAM,SAAS,KAAK,GAAG,SAAS,EAChC,QAAQ,SAAS,OAAO,GAAG,SAAS,EAEpC,MAAM,EAAE,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EACjD,EACE,OAAO,EAAE,QAAyB,EAClC,OAAO,GACR,EAAE,qBAAqB,CAAC,QAAQ,CAAC,GACjC,OAAO,CAAC,qBAAqB,CAAC,CAkBhC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ethers.d.ts","sourceRoot":"","sources":["../../../src/adapters/ethers.ts"],"names":[],"mappings":"AAMA,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;AAC5C,KAAK,SAAS,GAAG,MAAM,GAAG,UAAU,CAAA;AAEpC,KAAK,eAAe,GAAG;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,CAAA;AACD,KAAK,cAAc,GAAG;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,YAAY,GAAG;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACjD,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAC3C,GAAG,CACA;IACE,aAAa,CACX,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,EACvC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,OAAO,CAAC,MAAM,CAAC,CAAA;IAClB,cAAc,CAAC,EAAE,KAAK,CAAA;CACvB,GACD;IACE,aAAa,CAAC,EAAE,KAAK,CAAA;IACrB,cAAc,CACZ,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,EACvC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,OAAO,CAAC,MAAM,CAAC,CAAA;CACnB,CACJ,CAAA;AAED,eAAO,MAAM,qBAAqB,WAAY,YAAY,
|
1
|
+
{"version":3,"file":"ethers.d.ts","sourceRoot":"","sources":["../../../src/adapters/ethers.ts"],"names":[],"mappings":"AAMA,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;AAC5C,KAAK,SAAS,GAAG,MAAM,GAAG,UAAU,CAAA;AAEpC,KAAK,eAAe,GAAG;IACrB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB,CAAA;AACD,KAAK,cAAc,GAAG;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,KAAK,YAAY,GAAG;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACjD,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAC3C,GAAG,CACA;IACE,aAAa,CACX,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,EACvC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,OAAO,CAAC,MAAM,CAAC,CAAA;IAClB,cAAc,CAAC,EAAE,KAAK,CAAA;CACvB,GACD;IACE,aAAa,CAAC,EAAE,KAAK,CAAA;IACrB,cAAc,CACZ,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,EACvC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,OAAO,CAAC,MAAM,CAAC,CAAA;CACnB,CACJ,CAAA;AAED,eAAO,MAAM,qBAAqB,WAAY,YAAY,uCAsDtD,CAAA"}
|
@@ -2,6 +2,10 @@ export type ByteArray = Uint8Array;
|
|
2
2
|
export type Hex = `0x${string}`;
|
3
3
|
export type Hash = `0x${string}`;
|
4
4
|
export type LogTopic = Hex | Hex[] | null;
|
5
|
+
export type SignableMessage = string | {
|
6
|
+
/** Raw data representation of the message. */
|
7
|
+
raw: Hex | ByteArray;
|
8
|
+
};
|
5
9
|
export type Signature = {
|
6
10
|
r: Hex;
|
7
11
|
s: Hex;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../../../src/types/misc.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,UAAU,CAAA;AAClC,MAAM,MAAM,GAAG,GAAG,KAAK,MAAM,EAAE,CAAA;AAC/B,MAAM,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE,CAAA;AAChC,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAA;AACzC,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,EAAE,GAAG,CAAA;IACN,CAAC,EAAE,GAAG,CAAA;IACN,CAAC,EAAE,MAAM,CAAA;CACV,CAAA"}
|
1
|
+
{"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../../../src/types/misc.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,UAAU,CAAA;AAClC,MAAM,MAAM,GAAG,GAAG,KAAK,MAAM,EAAE,CAAA;AAC/B,MAAM,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE,CAAA;AAChC,MAAM,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAA;AACzC,MAAM,MAAM,eAAe,GACvB,MAAM,GACN;IACE,8CAA8C;IAC9C,GAAG,EAAE,GAAG,GAAG,SAAS,CAAA;CACrB,CAAA;AACL,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,EAAE,GAAG,CAAA;IACN,CAAC,EAAE,GAAG,CAAA;IACN,CAAC,EAAE,MAAM,CAAA;CACV,CAAA"}
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import type { ByteArray, Hex } from '../../types/misc.js';
|
1
|
+
import type { ByteArray, Hex, SignableMessage } from '../../types/misc.js';
|
2
2
|
type To = 'hex' | 'bytes';
|
3
3
|
export type HashMessage<TTo extends To> = (TTo extends 'bytes' ? ByteArray : never) | (TTo extends 'hex' ? Hex : never);
|
4
|
-
export declare function hashMessage<TTo extends To = 'hex'>(message:
|
4
|
+
export declare function hashMessage<TTo extends To = 'hex'>(message: SignableMessage, to_?: TTo): HashMessage<TTo>;
|
5
5
|
export {};
|
6
6
|
//# sourceMappingURL=hashMessage.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"hashMessage.d.ts","sourceRoot":"","sources":["../../../../src/utils/signature/hashMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;
|
1
|
+
{"version":3,"file":"hashMessage.d.ts","sourceRoot":"","sources":["../../../../src/utils/signature/hashMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAK1E,KAAK,EAAE,GAAG,KAAK,GAAG,OAAO,CAAA;AAEzB,MAAM,MAAM,WAAW,CAAC,GAAG,SAAS,EAAE,IAClC,CAAC,GAAG,SAAS,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC,GACzC,CAAC,GAAG,SAAS,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC,CAAA;AAErC,wBAAgB,WAAW,CAAC,GAAG,SAAS,EAAE,GAAG,KAAK,EAChD,OAAO,EAAE,eAAe,EACxB,GAAG,CAAC,EAAE,GAAG,GACR,WAAW,CAAC,GAAG,CAAC,CAUlB"}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import type { Address } from 'abitype';
|
2
|
-
import type { ByteArray, Hex } from '../../types/misc.js';
|
2
|
+
import type { ByteArray, Hex, SignableMessage } from '../../types/misc.js';
|
3
3
|
export type RecoverMessageAddressParameters = {
|
4
|
-
message:
|
4
|
+
message: SignableMessage;
|
5
5
|
signature: Hex | ByteArray;
|
6
6
|
};
|
7
7
|
export type RecoverMessageAddressReturnType = Address;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"recoverMessageAddress.d.ts","sourceRoot":"","sources":["../../../../src/utils/signature/recoverMessageAddress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;
|
1
|
+
{"version":3,"file":"recoverMessageAddress.d.ts","sourceRoot":"","sources":["../../../../src/utils/signature/recoverMessageAddress.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAK1E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,OAAO,EAAE,eAAe,CAAA;IACxB,SAAS,EAAE,GAAG,GAAG,SAAS,CAAA;CAC3B,CAAA;AACD,MAAM,MAAM,+BAA+B,GAAG,OAAO,CAAA;AAErD,wBAAsB,qBAAqB,CAAC,EAC1C,OAAO,EACP,SAAS,GACV,EAAE,+BAA+B,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAE5E"}
|
package/package.json
CHANGED
package/src/accounts/types.ts
CHANGED
@@ -2,7 +2,7 @@ import type { HDKey } from '@scure/bip32'
|
|
2
2
|
|
3
3
|
import type { Address, TypedData } from 'abitype'
|
4
4
|
|
5
|
-
import type { Hash, Hex } from '../types/misc.js'
|
5
|
+
import type { Hash, Hex, SignableMessage } from '../types/misc.js'
|
6
6
|
import type { TransactionSerializable } from '../types/transaction.js'
|
7
7
|
import type { TypedDataDefinition } from '../types/typedData.js'
|
8
8
|
|
@@ -13,7 +13,7 @@ export type Account<TAddress extends Address = Address> =
|
|
13
13
|
export type AccountSource = Address | CustomSource
|
14
14
|
export type CustomSource = {
|
15
15
|
address: Address
|
16
|
-
signMessage: ({ message }: { message:
|
16
|
+
signMessage: ({ message }: { message: SignableMessage }) => Promise<Hash>
|
17
17
|
signTransaction: (transaction: TransactionSerializable) => Promise<Hash>
|
18
18
|
signTypedData: <
|
19
19
|
TTypedData extends TypedData | { [key: string]: unknown },
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import type { Hex } from '../../types/misc.js'
|
1
|
+
import type { Hex, SignableMessage } from '../../types/misc.js'
|
2
2
|
import { hashMessage } from '../../utils/signature/hashMessage.js'
|
3
3
|
|
4
4
|
import { sign } from './sign.js'
|
@@ -6,7 +6,7 @@ import { signatureToHex } from './signatureToHex.js'
|
|
6
6
|
|
7
7
|
export type SignMessageParameters = {
|
8
8
|
/** The message to sign. */
|
9
|
-
message:
|
9
|
+
message: SignableMessage
|
10
10
|
/** The private key to sign with. */
|
11
11
|
privateKey: Hex
|
12
12
|
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import type { Chain } from '../../chains.js'
|
2
2
|
import type { PublicClient } from '../../clients/createPublicClient.js'
|
3
3
|
import type { Transport } from '../../clients/transports/createTransport.js'
|
4
|
-
import type { ByteArray, Hex } from '../../types/misc.js'
|
4
|
+
import type { ByteArray, Hex, SignableMessage } from '../../types/misc.js'
|
5
5
|
import { hashMessage } from '../../utils/index.js'
|
6
6
|
import { type VerifyHashParameters, verifyHash } from './verifyHash.js'
|
7
7
|
import type { Address } from 'abitype'
|
@@ -10,7 +10,7 @@ export type VerifyMessageParameters = Omit<VerifyHashParameters, 'hash'> & {
|
|
10
10
|
/** The address that signed the original message. */
|
11
11
|
address: Address
|
12
12
|
/** The message to be verified. */
|
13
|
-
message:
|
13
|
+
message: SignableMessage
|
14
14
|
/** The signature that was generated by signing the message with the address's private key. */
|
15
15
|
signature: Hex | ByteArray
|
16
16
|
}
|
@@ -5,13 +5,13 @@ import type { Transport } from '../../clients/transports/createTransport.js'
|
|
5
5
|
import { AccountNotFoundError } from '../../errors/account.js'
|
6
6
|
import type { GetAccountParameter } from '../../types/account.js'
|
7
7
|
import type { Chain } from '../../types/chain.js'
|
8
|
-
import type { Hex } from '../../types/misc.js'
|
9
|
-
import { toHex } from '../../utils/encoding/toHex.js'
|
8
|
+
import type { Hex, SignableMessage } from '../../types/misc.js'
|
9
|
+
import { stringToHex, toHex } from '../../utils/encoding/toHex.js'
|
10
10
|
|
11
11
|
export type SignMessageParameters<
|
12
12
|
TAccount extends Account | undefined = Account | undefined,
|
13
13
|
> = GetAccountParameter<TAccount> & {
|
14
|
-
message:
|
14
|
+
message: SignableMessage
|
15
15
|
}
|
16
16
|
|
17
17
|
export type SignMessageReturnType = Hex
|
@@ -78,8 +78,15 @@ export async function signMessage<
|
|
78
78
|
})
|
79
79
|
const account = parseAccount(account_)
|
80
80
|
if (account.type === 'local') return account.signMessage({ message })
|
81
|
+
|
82
|
+
const message_ = (() => {
|
83
|
+
if (typeof message === 'string') return stringToHex(message)
|
84
|
+
if (message.raw instanceof Uint8Array) return toHex(message.raw)
|
85
|
+
return message.raw
|
86
|
+
})()
|
87
|
+
|
81
88
|
return client.request({
|
82
89
|
method: 'personal_sign',
|
83
|
-
params: [
|
90
|
+
params: [message_, account.address],
|
84
91
|
})
|
85
92
|
}
|
package/src/adapters/ethers.ts
CHANGED
@@ -2,7 +2,7 @@ import type { Address } from 'abitype'
|
|
2
2
|
|
3
3
|
import { toAccount } from '../accounts/toAccount.js'
|
4
4
|
import type { Hash } from '../types/misc.js'
|
5
|
-
import { toBytes } from '../utils/encoding/toBytes.js'
|
5
|
+
import { stringToBytes, toBytes } from '../utils/encoding/toBytes.js'
|
6
6
|
|
7
7
|
type BigNumberish = string | number | bigint
|
8
8
|
type BytesLike = string | Uint8Array
|
@@ -46,7 +46,12 @@ export const ethersWalletToAccount = (wallet: EthersWallet) =>
|
|
46
46
|
toAccount({
|
47
47
|
address: wallet.address as Address,
|
48
48
|
async signMessage({ message }) {
|
49
|
-
|
49
|
+
const messageBytes = (() => {
|
50
|
+
if (typeof message === 'string') return stringToBytes(message)
|
51
|
+
if (message.raw instanceof Uint8Array) return message.raw
|
52
|
+
return toBytes(message.raw)
|
53
|
+
})()
|
54
|
+
return (await wallet.signMessage(messageBytes)) as Hash
|
50
55
|
},
|
51
56
|
async signTransaction(txn) {
|
52
57
|
// ethers type mappings
|
package/src/types/misc.ts
CHANGED
@@ -2,6 +2,12 @@ export type ByteArray = Uint8Array
|
|
2
2
|
export type Hex = `0x${string}`
|
3
3
|
export type Hash = `0x${string}`
|
4
4
|
export type LogTopic = Hex | Hex[] | null
|
5
|
+
export type SignableMessage =
|
6
|
+
| string
|
7
|
+
| {
|
8
|
+
/** Raw data representation of the message. */
|
9
|
+
raw: Hex | ByteArray
|
10
|
+
}
|
5
11
|
export type Signature = {
|
6
12
|
r: Hex
|
7
13
|
s: Hex
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import type { ByteArray, Hex } from '../../types/misc.js'
|
1
|
+
import type { ByteArray, Hex, SignableMessage } from '../../types/misc.js'
|
2
2
|
import { concat } from '../data/concat.js'
|
3
|
-
import { stringToBytes } from '../encoding/toBytes.js'
|
3
|
+
import { stringToBytes, toBytes } from '../encoding/toBytes.js'
|
4
4
|
import { keccak256 } from '../hash/keccak256.js'
|
5
5
|
|
6
6
|
type To = 'hex' | 'bytes'
|
@@ -10,10 +10,14 @@ export type HashMessage<TTo extends To> =
|
|
10
10
|
| (TTo extends 'hex' ? Hex : never)
|
11
11
|
|
12
12
|
export function hashMessage<TTo extends To = 'hex'>(
|
13
|
-
message:
|
13
|
+
message: SignableMessage,
|
14
14
|
to_?: TTo,
|
15
15
|
): HashMessage<TTo> {
|
16
|
-
const messageBytes =
|
16
|
+
const messageBytes = (() => {
|
17
|
+
if (typeof message === 'string') return stringToBytes(message)
|
18
|
+
if (message.raw instanceof Uint8Array) return message.raw
|
19
|
+
return toBytes(message.raw)
|
20
|
+
})()
|
17
21
|
const prefixBytes = stringToBytes(
|
18
22
|
`\x19Ethereum Signed Message:\n${messageBytes.length}`,
|
19
23
|
)
|
@@ -1,12 +1,12 @@
|
|
1
1
|
import type { Address } from 'abitype'
|
2
2
|
|
3
|
-
import type { ByteArray, Hex } from '../../types/misc.js'
|
3
|
+
import type { ByteArray, Hex, SignableMessage } from '../../types/misc.js'
|
4
4
|
|
5
5
|
import { hashMessage } from './hashMessage.js'
|
6
6
|
import { recoverAddress } from './recoverAddress.js'
|
7
7
|
|
8
8
|
export type RecoverMessageAddressParameters = {
|
9
|
-
message:
|
9
|
+
message: SignableMessage
|
10
10
|
signature: Hex | ByteArray
|
11
11
|
}
|
12
12
|
export type RecoverMessageAddressReturnType = Address
|
@@ -17,7 +17,7 @@ export function parseUnits(value: `${number}`, decimals: number) {
|
|
17
17
|
fraction.slice(decimals),
|
18
18
|
]
|
19
19
|
fraction = `${
|
20
|
-
/^0
|
20
|
+
/^0+/.test(before) ? before.slice(0, before.length - 1) : ''
|
21
21
|
}${Math.round(Number(`${before}.${after}`))}`
|
22
22
|
} else {
|
23
23
|
fraction = fraction.padEnd(decimals, '0')
|