@nomicfoundation/hardhat-viem 2.0.1 → 2.0.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.
package/README.md CHANGED
@@ -228,6 +228,38 @@ const { contractAddress } = await publicClient.waitForTransactionReceipt({
228
228
  });
229
229
  ```
230
230
 
231
+ ##### Library linking
232
+
233
+ Some contracts need to be linked with libraries before they are deployed. You can pass the addresses of their libraries to the `deployContract` and `sendDeploymentTransaction` functions with an object like this:
234
+
235
+ ```typescript
236
+ const contractA = await hre.viem.deployContract(
237
+ "contractName",
238
+ ["arg1", 50, "arg3"],
239
+ {
240
+ libraries: {
241
+ ExampleLib: "0x...",
242
+ },
243
+ }
244
+ );
245
+ ```
246
+
247
+ This allows you to deploy a contract linked to the `ExampleLib` library at the address `"0x..."`.
248
+
249
+ To deploy a contract, all libraries must be linked. An error will be thrown if any libraries are missing.
250
+
251
+ #### Using `ContractTypesMap` for easier contract type imports
252
+
253
+ To simplify importing contract types in `hardhat-viem`, you can use the `ContractTypesMap`. This map contains the contract types of all contracts in your project, indexed by their names.
254
+
255
+ ```typescript
256
+ import { ContractTypesMap } from "hardhat/types/artifacts";
257
+
258
+ const contract: ContractTypesMap["ContractName"];
259
+ ```
260
+
261
+ This reduces the need for multiple imports and makes your code cleaner and easier to manage.
262
+
231
263
  ## Usage
232
264
 
233
265
  There are no additional steps you need to take for this plugin to work.
@@ -0,0 +1,13 @@
1
+ import type * as viemT from "viem";
2
+ import type { Artifact } from "hardhat/types/artifacts";
3
+ export interface Libraries<Address = string> {
4
+ [libraryName: string]: Address;
5
+ }
6
+ export interface Link {
7
+ sourceName: string;
8
+ libraryName: string;
9
+ address: string;
10
+ }
11
+ export declare function linkBytecode(artifact: Artifact, libraries: Link[]): Promise<viemT.Hex>;
12
+ export declare function resolveBytecodeWithLinkedLibraries(artifact: Artifact, libraries: Libraries<viemT.Address>): Promise<viemT.Hex>;
13
+ //# sourceMappingURL=bytecode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytecode.d.ts","sourceRoot":"","sources":["../src/internal/bytecode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AASxD,MAAM,WAAW,SAAS,CAAC,OAAO,GAAG,MAAM;IACzC,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,IAAI;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,YAAY,CAChC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,IAAI,EAAE,GAChB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAgBpB;AA+DD,wBAAsB,kCAAkC,CACtD,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,GAClC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAgCpB"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.resolveBytecodeWithLinkedLibraries = exports.linkBytecode = void 0;
27
+ const errors_1 = require("./errors");
28
+ async function linkBytecode(artifact, libraries) {
29
+ const { isHex } = await Promise.resolve().then(() => __importStar(require("viem")));
30
+ let bytecode = artifact.bytecode;
31
+ // TODO: measure performance impact
32
+ for (const { sourceName, libraryName, address } of libraries) {
33
+ const linkReferences = artifact.linkReferences[sourceName][libraryName];
34
+ for (const { start, length } of linkReferences) {
35
+ bytecode =
36
+ bytecode.substring(0, 2 + start * 2) +
37
+ address.substring(2) +
38
+ bytecode.substring(2 + (start + length) * 2);
39
+ }
40
+ }
41
+ return isHex(bytecode) ? bytecode : `0x${bytecode}`;
42
+ }
43
+ exports.linkBytecode = linkBytecode;
44
+ async function throwOnAmbigousLibraryNameOrUnnecessaryLink(contractName, libraries, neededLibraries) {
45
+ for (const linkedLibraryName of Object.keys(libraries)) {
46
+ const matchingLibraries = neededLibraries.filter(({ sourceName, libraryName }) => libraryName === linkedLibraryName ||
47
+ `${sourceName}:${libraryName}` === linkedLibraryName);
48
+ if (matchingLibraries.length > 1) {
49
+ throw new errors_1.AmbigousLibraryNameError(contractName, linkedLibraryName, matchingLibraries.map(({ sourceName, libraryName }) => `${sourceName}:${libraryName}`));
50
+ }
51
+ else if (matchingLibraries.length === 0) {
52
+ throw new errors_1.UnnecessaryLibraryLinkError(contractName, linkedLibraryName);
53
+ }
54
+ }
55
+ }
56
+ async function throwOnMissingLibrariesAddress(contractName, libraries, neededLibraries) {
57
+ const missingLibraries = [];
58
+ for (const { sourceName, libraryName } of neededLibraries) {
59
+ const address = libraries[`${sourceName}:${libraryName}`] ?? libraries[libraryName];
60
+ if (address === undefined) {
61
+ missingLibraries.push({ sourceName, libraryName });
62
+ }
63
+ }
64
+ if (missingLibraries.length > 0) {
65
+ throw new errors_1.MissingLibraryAddressError(contractName, missingLibraries);
66
+ }
67
+ }
68
+ async function throwOnOverlappingLibraryNames(contractName, libraries, neededLibraries) {
69
+ for (const { sourceName, libraryName } of neededLibraries) {
70
+ if (libraries[`${sourceName}:${libraryName}`] !== undefined &&
71
+ libraries[libraryName] !== undefined) {
72
+ throw new errors_1.OverlappingLibraryNamesError(sourceName, libraryName);
73
+ }
74
+ }
75
+ }
76
+ async function resolveBytecodeWithLinkedLibraries(artifact, libraries) {
77
+ const { linkReferences } = artifact;
78
+ const neededLibraries = [];
79
+ for (const [sourceName, sourceLibraries] of Object.entries(linkReferences)) {
80
+ for (const libraryName of Object.keys(sourceLibraries)) {
81
+ neededLibraries.push({
82
+ sourceName,
83
+ libraryName,
84
+ address: libraries[`${sourceName}:${libraryName}`] ?? libraries[libraryName],
85
+ });
86
+ }
87
+ }
88
+ await throwOnAmbigousLibraryNameOrUnnecessaryLink(artifact.contractName, libraries, neededLibraries);
89
+ await throwOnOverlappingLibraryNames(artifact.contractName, libraries, neededLibraries);
90
+ await throwOnMissingLibrariesAddress(artifact.contractName, libraries, neededLibraries);
91
+ return linkBytecode(artifact, neededLibraries);
92
+ }
93
+ exports.resolveBytecodeWithLinkedLibraries = resolveBytecodeWithLinkedLibraries;
94
+ //# sourceMappingURL=bytecode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytecode.js","sourceRoot":"","sources":["../src/internal/bytecode.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/internal/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,yBAAyB,EAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,YAAY,EACZ,+BAA+B,EAC/B,YAAY,EACb,MAAM,UAAU,CAAC;AAUlB,wBAAsB,cAAc,CAClC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,yBAAyB,EACjD,YAAY,EAAE,MAAM,EACpB,eAAe,GAAE,GAAG,EAAO,EAC3B,MAAM,GAAE,oBAAyB,GAChC,OAAO,CAAC,qBAAqB,CAAC,CAiBhC;AAED,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,GAAG,EAChB,gBAAgB,EAAE,GAAG,EACrB,eAAe,EAAE,GAAG,EAAE,EACtB,wBAAwB,GAAE,oBAAyB,EACnD,aAAa,GAAE,MAAU,GACxB,OAAO,CAAC,qBAAqB,CAAC,CAkDhC;AAED,wBAAsB,yBAAyB,CAC7C,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,yBAAyB,EACjD,YAAY,EAAE,MAAM,EACpB,eAAe,GAAE,GAAG,EAAO,EAC3B,MAAM,GAAE,+BAAoC,GAC3C,OAAO,CAAC;IACT,QAAQ,EAAE,qBAAqB,CAAC;IAChC,qBAAqB,EAAE,wBAAwB,CAAC;CACjD,CAAC,CAgBD;AAuDD,wBAAsB,aAAa,CACjC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,yBAAyB,EACjD,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,mBAAwB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CAchC"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/internal/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,yBAAyB,EAC1B,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,EACxB,YAAY,EACZ,+BAA+B,EAC/B,YAAY,EACb,MAAM,UAAU,CAAC;AA4BlB,wBAAsB,cAAc,CAClC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,yBAAyB,EACjD,YAAY,EAAE,MAAM,EACpB,eAAe,GAAE,GAAG,EAAO,EAC3B,MAAM,GAAE,oBAAyB,GAChC,OAAO,CAAC,qBAAqB,CAAC,CAsBhC;AAED,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,GAAG,EAChB,gBAAgB,EAAE,GAAG,EACrB,eAAe,EAAE,GAAG,EAAE,EACtB,wBAAwB,GAAE,oBAAyB,EACnD,aAAa,GAAE,MAAU,GACxB,OAAO,CAAC,qBAAqB,CAAC,CAkDhC;AAED,wBAAsB,yBAAyB,CAC7C,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,yBAAyB,EACjD,YAAY,EAAE,MAAM,EACpB,eAAe,GAAE,GAAG,EAAO,EAC3B,MAAM,GAAE,+BAAoC,GAC3C,OAAO,CAAC;IACT,QAAQ,EAAE,qBAAqB,CAAC;IAChC,qBAAqB,EAAE,wBAAwB,CAAC;CACjD,CAAC,CAgBD;AAuDD,wBAAsB,aAAa,CACjC,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,yBAAyB,EACjD,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,mBAAwB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CAchC"}
@@ -24,16 +24,25 @@ var __importStar = (this && this.__importStar) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  exports.getContractAt = exports.sendDeploymentTransaction = exports.innerDeployContract = exports.deployContract = void 0;
27
+ const bytecode_1 = require("./bytecode");
27
28
  const clients_1 = require("./clients");
28
29
  const errors_1 = require("./errors");
30
+ async function getContractAbiAndBytecode(artifacts, contractName, libraries) {
31
+ const artifact = await artifacts.readArtifact(contractName);
32
+ const bytecode = await (0, bytecode_1.resolveBytecodeWithLinkedLibraries)(artifact, libraries);
33
+ return {
34
+ abi: artifact.abi,
35
+ bytecode,
36
+ };
37
+ }
29
38
  async function deployContract({ artifacts, network }, contractName, constructorArgs = [], config = {}) {
30
- const { client, confirmations, ...deployContractParameters } = config;
31
- const [publicClient, walletClient, contractArtifact] = await Promise.all([
39
+ const { client, confirmations, libraries = {}, ...deployContractParameters } = config;
40
+ const [publicClient, walletClient, { abi, bytecode }] = await Promise.all([
32
41
  client?.public ?? (0, clients_1.getPublicClient)(network.provider),
33
42
  client?.wallet ?? getDefaultWalletClient(network.provider, network.name),
34
- artifacts.readArtifact(contractName),
43
+ getContractAbiAndBytecode(artifacts, contractName, libraries),
35
44
  ]);
36
- return innerDeployContract(publicClient, walletClient, contractArtifact.abi, contractArtifact.bytecode, constructorArgs, deployContractParameters, confirmations);
45
+ return innerDeployContract(publicClient, walletClient, abi, bytecode, constructorArgs, deployContractParameters, confirmations);
37
46
  }
38
47
  exports.deployContract = deployContract;
39
48
  async function innerDeployContract(publicClient, walletClient, contractAbi, contractBytecode, constructorArgs, deployContractParameters = {}, confirmations = 1) {
@@ -80,13 +89,13 @@ async function innerDeployContract(publicClient, walletClient, contractAbi, cont
80
89
  }
81
90
  exports.innerDeployContract = innerDeployContract;
82
91
  async function sendDeploymentTransaction({ artifacts, network }, contractName, constructorArgs = [], config = {}) {
83
- const { client, ...deployContractParameters } = config;
84
- const [publicClient, walletClient, contractArtifact] = await Promise.all([
92
+ const { client, libraries = {}, ...deployContractParameters } = config;
93
+ const [publicClient, walletClient, { abi, bytecode }] = await Promise.all([
85
94
  client?.public ?? (0, clients_1.getPublicClient)(network.provider),
86
95
  client?.wallet ?? getDefaultWalletClient(network.provider, network.name),
87
- artifacts.readArtifact(contractName),
96
+ getContractAbiAndBytecode(artifacts, contractName, libraries),
88
97
  ]);
89
- return innerSendDeploymentTransaction(publicClient, walletClient, contractArtifact.abi, contractArtifact.bytecode, constructorArgs, deployContractParameters);
98
+ return innerSendDeploymentTransaction(publicClient, walletClient, abi, bytecode, constructorArgs, deployContractParameters);
90
99
  }
91
100
  exports.sendDeploymentTransaction = sendDeploymentTransaction;
92
101
  async function innerSendDeploymentTransaction(publicClient, walletClient, contractAbi, contractBytecode, constructorArgs, deployContractParameters = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/internal/contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/internal/contracts.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { Link } from "./bytecode";
1
2
  import { NomicLabsHardhatPluginError } from "hardhat/plugins";
2
3
  export declare class HardhatViemError extends NomicLabsHardhatPluginError {
3
4
  constructor(message: string, parent?: Error);
@@ -20,4 +21,16 @@ export declare class InvalidConfirmationsError extends HardhatViemError {
20
21
  export declare class DeployContractError extends HardhatViemError {
21
22
  constructor(txHash: string, blockNumber: bigint);
22
23
  }
24
+ export declare class AmbigousLibraryNameError extends HardhatViemError {
25
+ constructor(contractName: string, libraryName: string, matchingLibraries: string[]);
26
+ }
27
+ export declare class OverlappingLibraryNamesError extends HardhatViemError {
28
+ constructor(sourceName: string, libraryName: string);
29
+ }
30
+ export declare class UnnecessaryLibraryLinkError extends HardhatViemError {
31
+ constructor(contractName: string, libraryName: string);
32
+ }
33
+ export declare class MissingLibraryAddressError extends HardhatViemError {
34
+ constructor(contractName: string, missingLibraries: Array<Pick<Link, "sourceName" | "libraryName">>);
35
+ }
23
36
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/internal/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAE9D,qBAAa,gBAAiB,SAAQ,2BAA2B;gBACnD,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK;CAG5C;AAED,qBAAa,8BAA+B,SAAQ,gBAAgB;;CAKnE;AAED,qBAAa,oBAAqB,SAAQ,gBAAgB;gBAC5C,OAAO,EAAE,MAAM;CAa5B;AAED,qBAAa,6BAA8B,SAAQ,gBAAgB;gBACrD,OAAO,EAAE,MAAM;CAa5B;AAED,qBAAa,gCAAiC,SAAQ,gBAAgB;gBACxD,WAAW,EAAE,MAAM;CAWhC;AAED,qBAAa,yBAA0B,SAAQ,gBAAgB;;CAM9D;AAED,qBAAa,mBAAoB,SAAQ,gBAAgB;gBAC3C,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAKhD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/internal/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAE9D,qBAAa,gBAAiB,SAAQ,2BAA2B;gBACnD,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK;CAG5C;AAED,qBAAa,8BAA+B,SAAQ,gBAAgB;;CAKnE;AAED,qBAAa,oBAAqB,SAAQ,gBAAgB;gBAC5C,OAAO,EAAE,MAAM;CAa5B;AAED,qBAAa,6BAA8B,SAAQ,gBAAgB;gBACrD,OAAO,EAAE,MAAM;CAa5B;AAED,qBAAa,gCAAiC,SAAQ,gBAAgB;gBACxD,WAAW,EAAE,MAAM;CAWhC;AAED,qBAAa,yBAA0B,SAAQ,gBAAgB;;CAM9D;AAED,qBAAa,mBAAoB,SAAQ,gBAAgB;gBAC3C,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAKhD;AAED,qBAAa,wBAAyB,SAAQ,gBAAgB;gBAE1D,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,MAAM,EAAE;CAU9B;AAED,qBAAa,4BAA6B,SAAQ,gBAAgB;gBACpD,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAKpD;AAED,qBAAa,2BAA4B,SAAQ,gBAAgB;gBACnD,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAKtD;AAED,qBAAa,0BAA2B,SAAQ,gBAAgB;gBAE5D,YAAY,EAAE,MAAM,EACpB,gBAAgB,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,CAAC,CAAC;CAUpE"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DeployContractError = exports.InvalidConfirmationsError = exports.DefaultWalletClientNotFoundError = exports.MultipleMatchingNetworksError = exports.NetworkNotFoundError = exports.UnknownDevelopmentNetworkError = exports.HardhatViemError = void 0;
3
+ exports.MissingLibraryAddressError = exports.UnnecessaryLibraryLinkError = exports.OverlappingLibraryNamesError = exports.AmbigousLibraryNameError = exports.DeployContractError = exports.InvalidConfirmationsError = exports.DefaultWalletClientNotFoundError = exports.MultipleMatchingNetworksError = exports.NetworkNotFoundError = exports.UnknownDevelopmentNetworkError = exports.HardhatViemError = void 0;
4
4
  const plugins_1 = require("hardhat/plugins");
5
5
  class HardhatViemError extends plugins_1.NomicLabsHardhatPluginError {
6
6
  constructor(message, parent) {
@@ -67,4 +67,36 @@ class DeployContractError extends HardhatViemError {
67
67
  }
68
68
  }
69
69
  exports.DeployContractError = DeployContractError;
70
+ class AmbigousLibraryNameError extends HardhatViemError {
71
+ constructor(contractName, libraryName, matchingLibraries) {
72
+ super(`The library name "${libraryName}" is ambiguous for the contract "${contractName}".
73
+ It may resolve to one of the following libraries:
74
+ ${matchingLibraries.map((fqn) => `\n\t* ${fqn}`).join(",")}
75
+
76
+ To fix this, choose one of these fully qualified library names and replace where appropriate.`);
77
+ }
78
+ }
79
+ exports.AmbigousLibraryNameError = AmbigousLibraryNameError;
80
+ class OverlappingLibraryNamesError extends HardhatViemError {
81
+ constructor(sourceName, libraryName) {
82
+ super(`The library name "${libraryName}" and "${sourceName}:${libraryName}" are both linking to the same library. Please use one of them, or If they are not the same library, use fully qualified names instead.`);
83
+ }
84
+ }
85
+ exports.OverlappingLibraryNamesError = OverlappingLibraryNamesError;
86
+ class UnnecessaryLibraryLinkError extends HardhatViemError {
87
+ constructor(contractName, libraryName) {
88
+ super(`The library name "${libraryName}" was linked but it's not referenced by the "${contractName}" contract.`);
89
+ }
90
+ }
91
+ exports.UnnecessaryLibraryLinkError = UnnecessaryLibraryLinkError;
92
+ class MissingLibraryAddressError extends HardhatViemError {
93
+ constructor(contractName, missingLibraries) {
94
+ super(`The libraries needed are:
95
+ ${missingLibraries
96
+ .map(({ sourceName, libraryName }) => `\t* "${sourceName}:${libraryName}"`)
97
+ .join(",\n")}
98
+ Please deploy them first and link them while deploying "${contractName}"`);
99
+ }
100
+ }
101
+ exports.MissingLibraryAddressError = MissingLibraryAddressError;
70
102
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/internal/errors.ts"],"names":[],"mappings":";;;AAAA,6CAA8D;AAE9D,MAAa,gBAAiB,SAAQ,qCAA2B;IAC/D,YAAY,OAAe,EAAE,MAAc;QACzC,KAAK,CAAC,+BAA+B,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;CACF;AAJD,4CAIC;AAED,MAAa,8BAA+B,SAAQ,gBAAgB;IAClE;QACE,KAAK,CAAC;6DACmD,CAAC,CAAC;IAC7D,CAAC;CACF;AALD,wEAKC;AAED,MAAa,oBAAqB,SAAQ,gBAAgB;IACxD,YAAY,OAAe;QACzB,KAAK,CACH,4BAA4B,OAAO;;;;;;;;2GAQkE,CACtG,CAAC;IACJ,CAAC;CACF;AAdD,oDAcC;AAED,MAAa,6BAA8B,SAAQ,gBAAgB;IACjE,YAAY,OAAe;QACzB,KAAK,CACH,mCAAmC,OAAO;;;;;;;;2GAQ2D,CACtG,CAAC;IACJ,CAAC;CACF;AAdD,sEAcC;AAED,MAAa,gCAAiC,SAAQ,gBAAgB;IACpE,YAAY,WAAmB;QAC7B,KAAK,CACH,+GAA+G,WAAW;;;;;;gFAMhD,CAC3E,CAAC;IACJ,CAAC;CACF;AAZD,4EAYC;AAED,MAAa,yBAA0B,SAAQ,gBAAgB;IAC7D;QACE,KAAK,CACH,2IAA2I,CAC5I,CAAC;IACJ,CAAC;CACF;AAND,8DAMC;AAED,MAAa,mBAAoB,SAAQ,gBAAgB;IACvD,YAAY,MAAc,EAAE,WAAmB;QAC7C,KAAK,CACH,+BAA+B,MAAM,yBAAyB,WAAW,sDAAsD,CAChI,CAAC;IACJ,CAAC;CACF;AAND,kDAMC"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/internal/errors.ts"],"names":[],"mappings":";;;AAEA,6CAA8D;AAE9D,MAAa,gBAAiB,SAAQ,qCAA2B;IAC/D,YAAY,OAAe,EAAE,MAAc;QACzC,KAAK,CAAC,+BAA+B,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;CACF;AAJD,4CAIC;AAED,MAAa,8BAA+B,SAAQ,gBAAgB;IAClE;QACE,KAAK,CAAC;6DACmD,CAAC,CAAC;IAC7D,CAAC;CACF;AALD,wEAKC;AAED,MAAa,oBAAqB,SAAQ,gBAAgB;IACxD,YAAY,OAAe;QACzB,KAAK,CACH,4BAA4B,OAAO;;;;;;;;2GAQkE,CACtG,CAAC;IACJ,CAAC;CACF;AAdD,oDAcC;AAED,MAAa,6BAA8B,SAAQ,gBAAgB;IACjE,YAAY,OAAe;QACzB,KAAK,CACH,mCAAmC,OAAO;;;;;;;;2GAQ2D,CACtG,CAAC;IACJ,CAAC;CACF;AAdD,sEAcC;AAED,MAAa,gCAAiC,SAAQ,gBAAgB;IACpE,YAAY,WAAmB;QAC7B,KAAK,CACH,+GAA+G,WAAW;;;;;;gFAMhD,CAC3E,CAAC;IACJ,CAAC;CACF;AAZD,4EAYC;AAED,MAAa,yBAA0B,SAAQ,gBAAgB;IAC7D;QACE,KAAK,CACH,2IAA2I,CAC5I,CAAC;IACJ,CAAC;CACF;AAND,8DAMC;AAED,MAAa,mBAAoB,SAAQ,gBAAgB;IACvD,YAAY,MAAc,EAAE,WAAmB;QAC7C,KAAK,CACH,+BAA+B,MAAM,yBAAyB,WAAW,sDAAsD,CAChI,CAAC;IACJ,CAAC;CACF;AAND,kDAMC;AAED,MAAa,wBAAyB,SAAQ,gBAAgB;IAC5D,YACE,YAAoB,EACpB,WAAmB,EACnB,iBAA2B;QAE3B,KAAK,CACH,qBAAqB,WAAW,oCAAoC,YAAY;;EAEpF,iBAAiB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;;8FAEoC,CACzF,CAAC;IACJ,CAAC;CACF;AAdD,4DAcC;AAED,MAAa,4BAA6B,SAAQ,gBAAgB;IAChE,YAAY,UAAkB,EAAE,WAAmB;QACjD,KAAK,CACH,qBAAqB,WAAW,UAAU,UAAU,IAAI,WAAW,yIAAyI,CAC7M,CAAC;IACJ,CAAC;CACF;AAND,oEAMC;AAED,MAAa,2BAA4B,SAAQ,gBAAgB;IAC/D,YAAY,YAAoB,EAAE,WAAmB;QACnD,KAAK,CACH,qBAAqB,WAAW,gDAAgD,YAAY,aAAa,CAC1G,CAAC;IACJ,CAAC;CACF;AAND,kEAMC;AAED,MAAa,0BAA2B,SAAQ,gBAAgB;IAC9D,YACE,YAAoB,EACpB,gBAAiE;QAEjE,KAAK,CACH;EACJ,gBAAgB;aACf,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,QAAQ,UAAU,IAAI,WAAW,GAAG,CAAC;aAC1E,IAAI,CAAC,KAAK,CAAC;0DAC4C,YAAY,GAAG,CACpE,CAAC;IACJ,CAAC;CACF;AAbD,gEAaC"}
package/internal/tasks.js CHANGED
@@ -105,6 +105,12 @@ declare module "hardhat/types/artifacts" {
105
105
  .map((name) => `${name}: never;`)
106
106
  .join("\n ")}
107
107
  }
108
+
109
+ interface ContractTypesMap {
110
+ ${Array.from(duplicateContractNames)
111
+ .map((name) => `${name}: never;`)
112
+ .join("\n ")}
113
+ }
108
114
  }
109
115
  `;
110
116
  }
@@ -173,6 +179,7 @@ function generateArtifactsDefinition(contractTypeData) {
173
179
  return `${AUTOGENERATED_FILE_PREFACE}
174
180
 
175
181
  import "hardhat/types/artifacts";
182
+ import type { GetContractReturnType } from "@nomicfoundation/hardhat-viem/types";
176
183
 
177
184
  ${contractTypeData
178
185
  .map((ctd) => `import { ${ctd.typeName} } from "./${ctd.contractName}";`)
@@ -187,6 +194,15 @@ declare module "hardhat/types/artifacts" {
187
194
  .map((ctd) => `["${ctd.fqn}"]: ${ctd.typeName};`)
188
195
  .join("\n ")}
189
196
  }
197
+
198
+ interface ContractTypesMap {
199
+ ${contractTypeData
200
+ .map((ctd) => `["${ctd.contractName}"]: GetContractReturnType<${ctd.typeName}["abi"]>;`)
201
+ .join("\n ")}
202
+ ${contractTypeData
203
+ .map((ctd) => `["${ctd.fqn}"]: GetContractReturnType<${ctd.typeName}["abi"]>;`)
204
+ .join("\n ")}
205
+ }
190
206
  }
191
207
  `;
192
208
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/internal/tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/internal/tasks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nomicfoundation/hardhat-viem",
3
- "version": "2.0.1",
3
+ "version": "2.0.3",
4
4
  "description": "Hardhat plugin for viem",
5
5
  "homepage": "https://github.com/nomicfoundation/hardhat/tree/main/packages/hardhat-viem",
6
6
  "repository": "github:nomicfoundation/hardhat",
@@ -52,13 +52,13 @@
52
52
  "ts-node": "^10.8.0",
53
53
  "typescript": "~5.0.0",
54
54
  "viem": "^2.7.6",
55
- "@nomicfoundation/eslint-plugin-slow-imports": "^1.0.0",
56
- "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "^1.0.2"
55
+ "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "^1.0.2",
56
+ "@nomicfoundation/eslint-plugin-slow-imports": "^1.0.0"
57
57
  },
58
58
  "peerDependencies": {
59
- "hardhat": "^2.17.0",
60
59
  "typescript": "~5.0.0",
61
- "viem": "^2.7.6"
60
+ "viem": "^2.7.6",
61
+ "hardhat": "^2.22.62.17.0"
62
62
  },
63
63
  "dependencies": {
64
64
  "abitype": "^0.9.8",
@@ -0,0 +1,138 @@
1
+ import type * as viemT from "viem";
2
+ import type { Artifact } from "hardhat/types/artifacts";
3
+
4
+ import {
5
+ AmbigousLibraryNameError,
6
+ MissingLibraryAddressError,
7
+ OverlappingLibraryNamesError,
8
+ UnnecessaryLibraryLinkError,
9
+ } from "./errors";
10
+
11
+ export interface Libraries<Address = string> {
12
+ [libraryName: string]: Address;
13
+ }
14
+
15
+ export interface Link {
16
+ sourceName: string;
17
+ libraryName: string;
18
+ address: string;
19
+ }
20
+
21
+ export async function linkBytecode(
22
+ artifact: Artifact,
23
+ libraries: Link[]
24
+ ): Promise<viemT.Hex> {
25
+ const { isHex } = await import("viem");
26
+ let bytecode = artifact.bytecode;
27
+
28
+ // TODO: measure performance impact
29
+ for (const { sourceName, libraryName, address } of libraries) {
30
+ const linkReferences = artifact.linkReferences[sourceName][libraryName];
31
+ for (const { start, length } of linkReferences) {
32
+ bytecode =
33
+ bytecode.substring(0, 2 + start * 2) +
34
+ address.substring(2) +
35
+ bytecode.substring(2 + (start + length) * 2);
36
+ }
37
+ }
38
+
39
+ return isHex(bytecode) ? bytecode : `0x${bytecode}`;
40
+ }
41
+
42
+ async function throwOnAmbigousLibraryNameOrUnnecessaryLink(
43
+ contractName: string,
44
+ libraries: Libraries<viemT.Address>,
45
+ neededLibraries: Link[]
46
+ ) {
47
+ for (const linkedLibraryName of Object.keys(libraries)) {
48
+ const matchingLibraries = neededLibraries.filter(
49
+ ({ sourceName, libraryName }) =>
50
+ libraryName === linkedLibraryName ||
51
+ `${sourceName}:${libraryName}` === linkedLibraryName
52
+ );
53
+
54
+ if (matchingLibraries.length > 1) {
55
+ throw new AmbigousLibraryNameError(
56
+ contractName,
57
+ linkedLibraryName,
58
+ matchingLibraries.map(
59
+ ({ sourceName, libraryName }) => `${sourceName}:${libraryName}`
60
+ )
61
+ );
62
+ } else if (matchingLibraries.length === 0) {
63
+ throw new UnnecessaryLibraryLinkError(contractName, linkedLibraryName);
64
+ }
65
+ }
66
+ }
67
+
68
+ async function throwOnMissingLibrariesAddress(
69
+ contractName: string,
70
+ libraries: Libraries<viemT.Address>,
71
+ neededLibraries: Link[]
72
+ ) {
73
+ const missingLibraries = [];
74
+ for (const { sourceName, libraryName } of neededLibraries) {
75
+ const address =
76
+ libraries[`${sourceName}:${libraryName}`] ?? libraries[libraryName];
77
+
78
+ if (address === undefined) {
79
+ missingLibraries.push({ sourceName, libraryName });
80
+ }
81
+ }
82
+
83
+ if (missingLibraries.length > 0) {
84
+ throw new MissingLibraryAddressError(contractName, missingLibraries);
85
+ }
86
+ }
87
+
88
+ async function throwOnOverlappingLibraryNames(
89
+ contractName: string,
90
+ libraries: Libraries<viemT.Address>,
91
+ neededLibraries: Link[]
92
+ ) {
93
+ for (const { sourceName, libraryName } of neededLibraries) {
94
+ if (
95
+ libraries[`${sourceName}:${libraryName}`] !== undefined &&
96
+ libraries[libraryName] !== undefined
97
+ ) {
98
+ throw new OverlappingLibraryNamesError(sourceName, libraryName);
99
+ }
100
+ }
101
+ }
102
+
103
+ export async function resolveBytecodeWithLinkedLibraries(
104
+ artifact: Artifact,
105
+ libraries: Libraries<viemT.Address>
106
+ ): Promise<viemT.Hex> {
107
+ const { linkReferences } = artifact;
108
+
109
+ const neededLibraries: Link[] = [];
110
+ for (const [sourceName, sourceLibraries] of Object.entries(linkReferences)) {
111
+ for (const libraryName of Object.keys(sourceLibraries)) {
112
+ neededLibraries.push({
113
+ sourceName,
114
+ libraryName,
115
+ address:
116
+ libraries[`${sourceName}:${libraryName}`] ?? libraries[libraryName],
117
+ });
118
+ }
119
+ }
120
+
121
+ await throwOnAmbigousLibraryNameOrUnnecessaryLink(
122
+ artifact.contractName,
123
+ libraries,
124
+ neededLibraries
125
+ );
126
+ await throwOnOverlappingLibraryNames(
127
+ artifact.contractName,
128
+ libraries,
129
+ neededLibraries
130
+ );
131
+ await throwOnMissingLibrariesAddress(
132
+ artifact.contractName,
133
+ libraries,
134
+ neededLibraries
135
+ );
136
+
137
+ return linkBytecode(artifact, neededLibraries);
138
+ }
@@ -13,6 +13,7 @@ import type {
13
13
  WalletClient,
14
14
  } from "../types";
15
15
 
16
+ import { Libraries, resolveBytecodeWithLinkedLibraries } from "./bytecode";
16
17
  import { getPublicClient, getWalletClients } from "./clients";
17
18
  import {
18
19
  DefaultWalletClientNotFoundError,
@@ -21,24 +22,46 @@ import {
21
22
  InvalidConfirmationsError,
22
23
  } from "./errors";
23
24
 
25
+ async function getContractAbiAndBytecode(
26
+ artifacts: HardhatRuntimeEnvironment["artifacts"],
27
+ contractName: string,
28
+ libraries: Libraries<Address>
29
+ ) {
30
+ const artifact = await artifacts.readArtifact(contractName);
31
+ const bytecode = await resolveBytecodeWithLinkedLibraries(
32
+ artifact,
33
+ libraries
34
+ );
35
+
36
+ return {
37
+ abi: artifact.abi,
38
+ bytecode,
39
+ };
40
+ }
41
+
24
42
  export async function deployContract(
25
43
  { artifacts, network }: HardhatRuntimeEnvironment,
26
44
  contractName: string,
27
45
  constructorArgs: any[] = [],
28
46
  config: DeployContractConfig = {}
29
47
  ): Promise<GetContractReturnType> {
30
- const { client, confirmations, ...deployContractParameters } = config;
31
- const [publicClient, walletClient, contractArtifact] = await Promise.all([
48
+ const {
49
+ client,
50
+ confirmations,
51
+ libraries = {},
52
+ ...deployContractParameters
53
+ } = config;
54
+ const [publicClient, walletClient, { abi, bytecode }] = await Promise.all([
32
55
  client?.public ?? getPublicClient(network.provider),
33
56
  client?.wallet ?? getDefaultWalletClient(network.provider, network.name),
34
- artifacts.readArtifact(contractName),
57
+ getContractAbiAndBytecode(artifacts, contractName, libraries),
35
58
  ]);
36
59
 
37
60
  return innerDeployContract(
38
61
  publicClient,
39
62
  walletClient,
40
- contractArtifact.abi,
41
- contractArtifact.bytecode as Hex,
63
+ abi,
64
+ bytecode,
42
65
  constructorArgs,
43
66
  deployContractParameters,
44
67
  confirmations
@@ -114,18 +137,18 @@ export async function sendDeploymentTransaction(
114
137
  contract: GetContractReturnType;
115
138
  deploymentTransaction: GetTransactionReturnType;
116
139
  }> {
117
- const { client, ...deployContractParameters } = config;
118
- const [publicClient, walletClient, contractArtifact] = await Promise.all([
140
+ const { client, libraries = {}, ...deployContractParameters } = config;
141
+ const [publicClient, walletClient, { abi, bytecode }] = await Promise.all([
119
142
  client?.public ?? getPublicClient(network.provider),
120
143
  client?.wallet ?? getDefaultWalletClient(network.provider, network.name),
121
- artifacts.readArtifact(contractName),
144
+ getContractAbiAndBytecode(artifacts, contractName, libraries),
122
145
  ]);
123
146
 
124
147
  return innerSendDeploymentTransaction(
125
148
  publicClient,
126
149
  walletClient,
127
- contractArtifact.abi,
128
- contractArtifact.bytecode as Hex,
150
+ abi,
151
+ bytecode,
129
152
  constructorArgs,
130
153
  deployContractParameters
131
154
  );
@@ -1,3 +1,5 @@
1
+ import type { Link } from "./bytecode";
2
+
1
3
  import { NomicLabsHardhatPluginError } from "hardhat/plugins";
2
4
 
3
5
  export class HardhatViemError extends NomicLabsHardhatPluginError {
@@ -74,3 +76,50 @@ export class DeployContractError extends HardhatViemError {
74
76
  );
75
77
  }
76
78
  }
79
+
80
+ export class AmbigousLibraryNameError extends HardhatViemError {
81
+ constructor(
82
+ contractName: string,
83
+ libraryName: string,
84
+ matchingLibraries: string[]
85
+ ) {
86
+ super(
87
+ `The library name "${libraryName}" is ambiguous for the contract "${contractName}".
88
+ It may resolve to one of the following libraries:
89
+ ${matchingLibraries.map((fqn) => `\n\t* ${fqn}`).join(",")}
90
+
91
+ To fix this, choose one of these fully qualified library names and replace where appropriate.`
92
+ );
93
+ }
94
+ }
95
+
96
+ export class OverlappingLibraryNamesError extends HardhatViemError {
97
+ constructor(sourceName: string, libraryName: string) {
98
+ super(
99
+ `The library name "${libraryName}" and "${sourceName}:${libraryName}" are both linking to the same library. Please use one of them, or If they are not the same library, use fully qualified names instead.`
100
+ );
101
+ }
102
+ }
103
+
104
+ export class UnnecessaryLibraryLinkError extends HardhatViemError {
105
+ constructor(contractName: string, libraryName: string) {
106
+ super(
107
+ `The library name "${libraryName}" was linked but it's not referenced by the "${contractName}" contract.`
108
+ );
109
+ }
110
+ }
111
+
112
+ export class MissingLibraryAddressError extends HardhatViemError {
113
+ constructor(
114
+ contractName: string,
115
+ missingLibraries: Array<Pick<Link, "sourceName" | "libraryName">>
116
+ ) {
117
+ super(
118
+ `The libraries needed are:
119
+ ${missingLibraries
120
+ .map(({ sourceName, libraryName }) => `\t* "${sourceName}:${libraryName}"`)
121
+ .join(",\n")}
122
+ Please deploy them first and link them while deploying "${contractName}"`
123
+ );
124
+ }
125
+ }
@@ -164,6 +164,12 @@ declare module "hardhat/types/artifacts" {
164
164
  .map((name) => `${name}: never;`)
165
165
  .join("\n ")}
166
166
  }
167
+
168
+ interface ContractTypesMap {
169
+ ${Array.from(duplicateContractNames)
170
+ .map((name) => `${name}: never;`)
171
+ .join("\n ")}
172
+ }
167
173
  }
168
174
  `;
169
175
  }
@@ -260,6 +266,7 @@ function generateArtifactsDefinition(
260
266
  return `${AUTOGENERATED_FILE_PREFACE}
261
267
 
262
268
  import "hardhat/types/artifacts";
269
+ import type { GetContractReturnType } from "@nomicfoundation/hardhat-viem/types";
263
270
 
264
271
  ${contractTypeData
265
272
  .map((ctd) => `import { ${ctd.typeName} } from "./${ctd.contractName}";`)
@@ -274,6 +281,21 @@ declare module "hardhat/types/artifacts" {
274
281
  .map((ctd) => `["${ctd.fqn}"]: ${ctd.typeName};`)
275
282
  .join("\n ")}
276
283
  }
284
+
285
+ interface ContractTypesMap {
286
+ ${contractTypeData
287
+ .map(
288
+ (ctd) =>
289
+ `["${ctd.contractName}"]: GetContractReturnType<${ctd.typeName}["abi"]>;`
290
+ )
291
+ .join("\n ")}
292
+ ${contractTypeData
293
+ .map(
294
+ (ctd) =>
295
+ `["${ctd.fqn}"]: GetContractReturnType<${ctd.typeName}["abi"]>;`
296
+ )
297
+ .join("\n ")}
298
+ }
277
299
  }
278
300
  `;
279
301
  }
package/src/types.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type * as viemT from "viem";
2
2
  import type { ArtifactsMap } from "hardhat/types/artifacts";
3
+ import type { Libraries } from "./internal/bytecode";
3
4
 
4
5
  export type PublicClient = viemT.PublicClient<viemT.Transport, viemT.Chain>;
5
6
  export type WalletClient = viemT.WalletClient<
@@ -38,9 +39,12 @@ export interface SendTransactionConfig {
38
39
 
39
40
  export interface DeployContractConfig extends SendTransactionConfig {
40
41
  confirmations?: number;
42
+ libraries?: Libraries<viemT.Address>;
41
43
  }
42
44
 
43
- export type SendDeploymentTransactionConfig = SendTransactionConfig;
45
+ export interface SendDeploymentTransactionConfig extends SendTransactionConfig {
46
+ libraries?: Libraries<viemT.Address>;
47
+ }
44
48
 
45
49
  export interface GetContractAtConfig {
46
50
  client?: KeyedClient;
package/types.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type * as viemT from "viem";
2
2
  import type { ArtifactsMap } from "hardhat/types/artifacts";
3
+ import type { Libraries } from "./internal/bytecode";
3
4
  export type PublicClient = viemT.PublicClient<viemT.Transport, viemT.Chain>;
4
5
  export type WalletClient = viemT.WalletClient<viemT.Transport, viemT.Chain, viemT.Account>;
5
6
  export type TestClient = viemT.TestClient<TestClientMode, viemT.Transport, viemT.Chain>;
@@ -21,8 +22,11 @@ export interface SendTransactionConfig {
21
22
  }
22
23
  export interface DeployContractConfig extends SendTransactionConfig {
23
24
  confirmations?: number;
25
+ libraries?: Libraries<viemT.Address>;
26
+ }
27
+ export interface SendDeploymentTransactionConfig extends SendTransactionConfig {
28
+ libraries?: Libraries<viemT.Address>;
24
29
  }
25
- export type SendDeploymentTransactionConfig = SendTransactionConfig;
26
30
  export interface GetContractAtConfig {
27
31
  client?: KeyedClient;
28
32
  }
package/types.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["src/types.ts"],"names":[],"mappings":"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"}