viem 0.3.31 → 0.3.32

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/README.md CHANGED
@@ -51,7 +51,7 @@
51
51
  - Browser native [BigInt](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt), instead of large BigNumber libraries
52
52
  - Utilities for working with [ABIs](https://ethereum.org/en/glossary/#abi) (encoding/decoding/inspection)
53
53
  - TypeScript ready ([infer types](https://viem.sh/docs/typescript) from ABIs and EIP-712 Typed Data)
54
- - First-class support for [Anvil](https://book.getfoundry.sh/) & [Hardhat](https://hardhat.org/)
54
+ - First-class support for [Anvil](https://book.getfoundry.sh/), [Hardhat](https://hardhat.org/) & [Ganache](https://trufflesuite.com/ganache/)
55
55
  - Test suite running against [forked](https://ethereum.org/en/glossary/#fork) Ethereum network
56
56
 
57
57
  ... and a lot lot more.
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.version = void 0;
4
- exports.version = '0.3.31';
4
+ exports.version = '0.3.32';
5
5
  //# sourceMappingURL=version.js.map
@@ -7,7 +7,9 @@ const toHex_js_1 = require("../encoding/toHex.js");
7
7
  async function recoverPublicKey({ hash, signature, }) {
8
8
  const signatureHex = (0, isHex_js_1.isHex)(signature) ? signature : (0, toHex_js_1.toHex)(signature);
9
9
  const hashHex = (0, isHex_js_1.isHex)(hash) ? hash : (0, toHex_js_1.toHex)(hash);
10
- const v = (0, fromHex_js_1.hexToNumber)(`0x${signatureHex.slice(130)}`);
10
+ let v = (0, fromHex_js_1.hexToNumber)(`0x${signatureHex.slice(130)}`);
11
+ if (v === 0 || v === 1)
12
+ v += 27;
11
13
  const { secp256k1 } = await import('@noble/curves/secp256k1');
12
14
  const publicKey = secp256k1.Signature.fromCompact(signatureHex.substring(2, 130))
13
15
  .addRecoveryBit(v - 27)
@@ -1 +1 @@
1
- {"version":3,"file":"recoverPublicKey.js","sourceRoot":"","sources":["../../../../src/utils/signature/recoverPublicKey.ts"],"names":[],"mappings":";;;AACA,+CAAwC;AACxC,uDAAoD;AACpD,mDAA4C;AAQrC,KAAK,UAAU,gBAAgB,CAAC,EACrC,IAAI,EACJ,SAAS,GACkB;IAC3B,MAAM,YAAY,GAAG,IAAA,gBAAK,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,gBAAK,EAAC,SAAS,CAAC,CAAA;IACpE,MAAM,OAAO,GAAG,IAAA,gBAAK,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,gBAAK,EAAC,IAAI,CAAC,CAAA;IAIhD,MAAM,CAAC,GAAG,IAAA,wBAAW,EAAC,KAAK,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAErD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;IAC7D,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,CAC/C,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAC/B;SACE,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC;SACtB,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SACtC,KAAK,CAAC,KAAK,CAAC,CAAA;IACf,OAAO,KAAK,SAAS,EAAE,CAAA;AACzB,CAAC;AAnBD,4CAmBC"}
1
+ {"version":3,"file":"recoverPublicKey.js","sourceRoot":"","sources":["../../../../src/utils/signature/recoverPublicKey.ts"],"names":[],"mappings":";;;AACA,+CAAwC;AACxC,uDAAoD;AACpD,mDAA4C;AAQrC,KAAK,UAAU,gBAAgB,CAAC,EACrC,IAAI,EACJ,SAAS,GACkB;IAC3B,MAAM,YAAY,GAAG,IAAA,gBAAK,EAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,gBAAK,EAAC,SAAS,CAAC,CAAA;IACpE,MAAM,OAAO,GAAG,IAAA,gBAAK,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,gBAAK,EAAC,IAAI,CAAC,CAAA;IAIhD,IAAI,CAAC,GAAG,IAAA,wBAAW,EAAC,KAAK,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACnD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,CAAC,IAAI,EAAE,CAAA;IAE/B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;IAC7D,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,CAC/C,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAC/B;SACE,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC;SACtB,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SACtC,KAAK,CAAC,KAAK,CAAC,CAAA;IACf,OAAO,KAAK,SAAS,EAAE,CAAA;AACzB,CAAC;AApBD,4CAoBC"}
@@ -1,2 +1,2 @@
1
- export const version = '0.3.31';
1
+ export const version = '0.3.32';
2
2
  //# sourceMappingURL=version.js.map
@@ -4,7 +4,9 @@ import { toHex } from '../encoding/toHex.js';
4
4
  export async function recoverPublicKey({ hash, signature, }) {
5
5
  const signatureHex = isHex(signature) ? signature : toHex(signature);
6
6
  const hashHex = isHex(hash) ? hash : toHex(hash);
7
- const v = hexToNumber(`0x${signatureHex.slice(130)}`);
7
+ let v = hexToNumber(`0x${signatureHex.slice(130)}`);
8
+ if (v === 0 || v === 1)
9
+ v += 27;
8
10
  const { secp256k1 } = await import('@noble/curves/secp256k1');
9
11
  const publicKey = secp256k1.Signature.fromCompact(signatureHex.substring(2, 130))
10
12
  .addRecoveryBit(v - 27)
@@ -1 +1 @@
1
- {"version":3,"file":"recoverPublicKey.js","sourceRoot":"","sources":["../../../../src/utils/signature/recoverPublicKey.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAQ5C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EACrC,IAAI,EACJ,SAAS,GACkB;IAC3B,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACpE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAIhD,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAErD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;IAC7D,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,CAC/C,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAC/B;SACE,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC;SACtB,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SACtC,KAAK,CAAC,KAAK,CAAC,CAAA;IACf,OAAO,KAAK,SAAS,EAAE,CAAA;AACzB,CAAC"}
1
+ {"version":3,"file":"recoverPublicKey.js","sourceRoot":"","sources":["../../../../src/utils/signature/recoverPublicKey.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAQ5C,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EACrC,IAAI,EACJ,SAAS,GACkB;IAC3B,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACpE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAIhD,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACnD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,CAAC,IAAI,EAAE,CAAA;IAE/B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAA;IAC7D,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,WAAW,CAC/C,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAC/B;SACE,cAAc,CAAC,CAAC,GAAG,EAAE,CAAC;SACtB,gBAAgB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SACtC,KAAK,CAAC,KAAK,CAAC,CAAA;IACf,OAAO,KAAK,SAAS,EAAE,CAAA;AACzB,CAAC"}
@@ -3,9 +3,9 @@ import type { TestRequests } from '../types/eip1193.js';
3
3
  import { type Client, type ClientConfig } from './createClient.js';
4
4
  import { type TestActions } from './decorators/test.js';
5
5
  import type { Transport } from './transports/createTransport.js';
6
- export type TestClientMode = 'anvil' | 'hardhat';
6
+ export type TestClientMode = 'anvil' | 'hardhat' | 'ganache';
7
7
  export type TestClientConfig<TMode extends TestClientMode = TestClientMode, TTransport extends Transport = Transport, TChain extends Chain | undefined = Chain | undefined> = Pick<ClientConfig<TTransport, TChain>, 'chain' | 'key' | 'name' | 'pollingInterval' | 'transport'> & {
8
- /** Mode of the test client. Available: "anvil" | "hardhat" */
8
+ /** Mode of the test client. Available: "anvil" | "hardhat" | "ganache" */
9
9
  mode: TMode;
10
10
  };
11
11
  export type TestClient<TMode extends TestClientMode = TestClientMode, TTransport extends Transport = Transport, TChain extends Chain | undefined = Chain | undefined, TIncludeActions extends boolean = true> = Client<TTransport, TestRequests<TMode>, TChain> & (TIncludeActions extends true ? TestActions : unknown) & {
@@ -1 +1 @@
1
- {"version":3,"file":"createTestClient.d.ts","sourceRoot":"","sources":["../../../src/clients/createTestClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,YAAY,EAAgB,MAAM,mBAAmB,CAAA;AAChF,OAAO,EAAE,KAAK,WAAW,EAAe,MAAM,sBAAsB,CAAA;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAEhE,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,CAAA;AAEhD,MAAM,MAAM,gBAAgB,CAC1B,KAAK,SAAS,cAAc,GAAG,cAAc,EAC7C,UAAU,SAAS,SAAS,GAAG,SAAS,EACxC,MAAM,SAAS,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,IAClD,IAAI,CACN,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,EAChC,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,iBAAiB,GAAG,WAAW,CAC3D,GAAG;IACF,8DAA8D;IAC9D,IAAI,EAAE,KAAK,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,UAAU,CACpB,KAAK,SAAS,cAAc,GAAG,cAAc,EAC7C,UAAU,SAAS,SAAS,GAAG,SAAS,EACxC,MAAM,SAAS,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,EACpD,eAAe,SAAS,OAAO,GAAG,IAAI,IACpC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GACjD,CAAC,eAAe,SAAS,IAAI,GAAG,WAAW,GAAG,OAAO,CAAC,GAAG;IACvD,IAAI,EAAE,KAAK,CAAA;CACZ,CAAA;AAEH;;GAEG;AACH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,SAAS,cAAc,EAC5B,UAAU,SAAS,SAAS,EAC5B,MAAM,SAAS,KAAK,GAAG,SAAS,GAAG,SAAS,EAC5C,EACA,KAAK,EACL,GAAY,EACZ,IAAoB,EACpB,IAAI,EACJ,eAAe,EACf,SAAS,GACV,EAAE,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG,UAAU,CACzD,KAAK,EACL,UAAU,EACV,MAAM,EACN,IAAI,CACL,CAgBA"}
1
+ {"version":3,"file":"createTestClient.d.ts","sourceRoot":"","sources":["../../../src/clients/createTestClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,YAAY,EAAgB,MAAM,mBAAmB,CAAA;AAChF,OAAO,EAAE,KAAK,WAAW,EAAe,MAAM,sBAAsB,CAAA;AACpE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAEhE,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAA;AAE5D,MAAM,MAAM,gBAAgB,CAC1B,KAAK,SAAS,cAAc,GAAG,cAAc,EAC7C,UAAU,SAAS,SAAS,GAAG,SAAS,EACxC,MAAM,SAAS,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,IAClD,IAAI,CACN,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,EAChC,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,iBAAiB,GAAG,WAAW,CAC3D,GAAG;IACF,0EAA0E;IAC1E,IAAI,EAAE,KAAK,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,UAAU,CACpB,KAAK,SAAS,cAAc,GAAG,cAAc,EAC7C,UAAU,SAAS,SAAS,GAAG,SAAS,EACxC,MAAM,SAAS,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,EACpD,eAAe,SAAS,OAAO,GAAG,IAAI,IACpC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GACjD,CAAC,eAAe,SAAS,IAAI,GAAG,WAAW,GAAG,OAAO,CAAC,GAAG;IACvD,IAAI,EAAE,KAAK,CAAA;CACZ,CAAA;AAEH;;GAEG;AACH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,SAAS,cAAc,EAC5B,UAAU,SAAS,SAAS,EAC5B,MAAM,SAAS,KAAK,GAAG,SAAS,GAAG,SAAS,EAC5C,EACA,KAAK,EACL,GAAY,EACZ,IAAoB,EACpB,IAAI,EACJ,eAAe,EACf,SAAS,GACV,EAAE,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG,UAAU,CACzD,KAAK,EACL,UAAU,EACV,MAAM,EACN,IAAI,CACL,CAgBA"}
@@ -1,2 +1,2 @@
1
- export declare const version = "0.3.31";
1
+ export declare const version = "0.3.32";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"recoverPublicKey.d.ts","sourceRoot":"","sources":["../../../../src/utils/signature/recoverPublicKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AAKzD,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,GAAG,GAAG,SAAS,CAAA;IACrB,SAAS,EAAE,GAAG,GAAG,SAAS,CAAA;CAC3B,CAAA;AACD,MAAM,MAAM,0BAA0B,GAAG,GAAG,CAAA;AAE5C,wBAAsB,gBAAgB,CAAC,EACrC,IAAI,EACJ,SAAS,GACV,EAAE,0BAA0B,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAgBlE"}
1
+ {"version":3,"file":"recoverPublicKey.d.ts","sourceRoot":"","sources":["../../../../src/utils/signature/recoverPublicKey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AAKzD,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,GAAG,GAAG,SAAS,CAAA;IACrB,SAAS,EAAE,GAAG,GAAG,SAAS,CAAA;CAC3B,CAAA;AACD,MAAM,MAAM,0BAA0B,GAAG,GAAG,CAAA;AAE5C,wBAAsB,gBAAgB,CAAC,EACrC,IAAI,EACJ,SAAS,GACV,EAAE,0BAA0B,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAiBlE"}
package/package.json CHANGED
@@ -12,7 +12,7 @@
12
12
  "isomorphic-ws": "5.0.0",
13
13
  "ws": "8.12.0"
14
14
  },
15
- "version": "0.3.31",
15
+ "version": "0.3.32",
16
16
  "files": [
17
17
  "dist",
18
18
  "!dist/**/*.tsbuildinfo",
@@ -5,7 +5,7 @@ import { type Client, type ClientConfig, createClient } from './createClient.js'
5
5
  import { type TestActions, testActions } from './decorators/test.js'
6
6
  import type { Transport } from './transports/createTransport.js'
7
7
 
8
- export type TestClientMode = 'anvil' | 'hardhat'
8
+ export type TestClientMode = 'anvil' | 'hardhat' | 'ganache'
9
9
 
10
10
  export type TestClientConfig<
11
11
  TMode extends TestClientMode = TestClientMode,
@@ -15,7 +15,7 @@ export type TestClientConfig<
15
15
  ClientConfig<TTransport, TChain>,
16
16
  'chain' | 'key' | 'name' | 'pollingInterval' | 'transport'
17
17
  > & {
18
- /** Mode of the test client. Available: "anvil" | "hardhat" */
18
+ /** Mode of the test client. Available: "anvil" | "hardhat" | "ganache" */
19
19
  mode: TMode
20
20
  }
21
21
 
@@ -1 +1 @@
1
- export const version = '0.3.31'
1
+ export const version = '0.3.32'
@@ -18,7 +18,8 @@ export async function recoverPublicKey({
18
18
 
19
19
  // Derive v = recoveryId + 27 from end of the signature (27 is added when signing the message)
20
20
  // The recoveryId represents the y-coordinate on the secp256k1 elliptic curve and can have a value [0, 1].
21
- const v = hexToNumber(`0x${signatureHex.slice(130)}`)
21
+ let v = hexToNumber(`0x${signatureHex.slice(130)}`)
22
+ if (v === 0 || v === 1) v += 27
22
23
 
23
24
  const { secp256k1 } = await import('@noble/curves/secp256k1')
24
25
  const publicKey = secp256k1.Signature.fromCompact(