@nomicfoundation/hardhat-viem 2.0.0 → 2.0.2

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,26 @@ 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
+
231
251
  ## Usage
232
252
 
233
253
  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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"}
@@ -14,7 +14,7 @@ export declare function innerGetPublicClient(provider: EthereumProvider, chain:
14
14
  /**
15
15
  * Get a list of WalletClient instances. These are read-write clients that can
16
16
  * be used to send transactions to the blockchain. Each client is associated
17
- * with a an account obtained from the provider using `eth_accounts`.
17
+ * with an account obtained from the provider using `eth_accounts`.
18
18
  *
19
19
  * @param provider The Ethereum provider used to connect to the blockchain.
20
20
  * @param walletClientConfig Optional configuration for the WalletClient instances. See the viem documentation for more information.
@@ -56,7 +56,7 @@ exports.innerGetPublicClient = innerGetPublicClient;
56
56
  /**
57
57
  * Get a list of WalletClient instances. These are read-write clients that can
58
58
  * be used to send transactions to the blockchain. Each client is associated
59
- * with a an account obtained from the provider using `eth_accounts`.
59
+ * with an account obtained from the provider using `eth_accounts`.
60
60
  *
61
61
  * @param provider The Ethereum provider used to connect to the blockchain.
62
62
  * @param walletClientConfig Optional configuration for the WalletClient instances. See the viem documentation for more information.
@@ -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) {
@@ -69,7 +78,7 @@ async function innerDeployContract(publicClient, walletClient, contractAbi, cont
69
78
  hash: deploymentTxHash,
70
79
  confirmations,
71
80
  });
72
- if (contractAddress === null) {
81
+ if (contractAddress === null || contractAddress === undefined) {
73
82
  const transaction = await publicClient.getTransaction({
74
83
  hash: deploymentTxHash,
75
84
  });
@@ -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":";;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,yCAA2E;AAC3E,uCAA8D;AAC9D,qCAKkB;AAElB,KAAK,UAAU,yBAAyB,CACtC,SAAiD,EACjD,YAAoB,EACpB,SAA6B;IAE7B,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,MAAM,IAAA,6CAAkC,EACvD,QAAQ,EACR,SAAS,CACV,CAAC;IAEF,OAAO;QACL,GAAG,EAAE,QAAQ,CAAC,GAAG;QACjB,QAAQ;KACT,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,cAAc,CAClC,EAAE,SAAS,EAAE,OAAO,EAA6B,EACjD,YAAoB,EACpB,kBAAyB,EAAE,EAC3B,SAA+B,EAAE;IAEjC,MAAM,EACJ,MAAM,EACN,aAAa,EACb,SAAS,GAAG,EAAE,EACd,GAAG,wBAAwB,EAC5B,GAAG,MAAM,CAAC;IACX,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACxE,MAAM,EAAE,MAAM,IAAI,IAAA,yBAAe,EAAC,OAAO,CAAC,QAAQ,CAAC;QACnD,MAAM,EAAE,MAAM,IAAI,sBAAsB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC;QACxE,yBAAyB,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC;KAC9D,CAAC,CAAC;IAEH,OAAO,mBAAmB,CACxB,YAAY,EACZ,YAAY,EACZ,GAAG,EACH,QAAQ,EACR,eAAe,EACf,wBAAwB,EACxB,aAAa,CACd,CAAC;AACJ,CAAC;AA3BD,wCA2BC;AAEM,KAAK,UAAU,mBAAmB,CACvC,YAA0B,EAC1B,YAA0B,EAC1B,WAAgB,EAChB,gBAAqB,EACrB,eAAsB,EACtB,2BAAiD,EAAE,EACnD,gBAAwB,CAAC;IAEzB,IAAI,gBAAqB,CAAC;IAC1B,qEAAqE;IACrE,8CAA8C;IAC9C,IAAI,wBAAwB,CAAC,QAAQ,KAAK,SAAS,EAAE;QACnD,gBAAgB,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC;YACnD,GAAG,EAAE,WAAW;YAChB,QAAQ,EAAE,gBAAgB;YAC1B,IAAI,EAAE,eAAe;YACrB,GAAG,wBAAwB;YAC3B,YAAY,EAAE,SAAS;YACvB,oBAAoB,EAAE,SAAS;SAChC,CAAC,CAAC;KACJ;SAAM;QACL,gBAAgB,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC;YACnD,GAAG,EAAE,WAAW;YAChB,QAAQ,EAAE,gBAAgB;YAC1B,IAAI,EAAE,eAAe;YACrB,GAAG,wBAAwB;YAC3B,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;KACJ;IAED,IAAI,aAAa,GAAG,CAAC,EAAE;QACrB,MAAM,IAAI,yBAAgB,CAAC,uCAAuC,CAAC,CAAC;KACrE;IACD,IAAI,aAAa,KAAK,CAAC,EAAE;QACvB,MAAM,IAAI,kCAAyB,EAAE,CAAC;KACvC;IAED,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,YAAY,CAAC,yBAAyB,CAAC;QACvE,IAAI,EAAE,gBAAgB;QACtB,aAAa;KACd,CAAC,CAAC;IAEH,IAAI,eAAe,KAAK,IAAI,IAAI,eAAe,KAAK,SAAS,EAAE;QAC7D,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC;YACpD,IAAI,EAAE,gBAAgB;SACvB,CAAC,CAAC;QACH,MAAM,IAAI,4BAAmB,CAAC,gBAAgB,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;KAC1E;IAED,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CACvC,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,CAChB,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AA1DD,kDA0DC;AAEM,KAAK,UAAU,yBAAyB,CAC7C,EAAE,SAAS,EAAE,OAAO,EAA6B,EACjD,YAAoB,EACpB,kBAAyB,EAAE,EAC3B,SAA0C,EAAE;IAK5C,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,wBAAwB,EAAE,GAAG,MAAM,CAAC;IACvE,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACxE,MAAM,EAAE,MAAM,IAAI,IAAA,yBAAe,EAAC,OAAO,CAAC,QAAQ,CAAC;QACnD,MAAM,EAAE,MAAM,IAAI,sBAAsB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC;QACxE,yBAAyB,CAAC,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC;KAC9D,CAAC,CAAC;IAEH,OAAO,8BAA8B,CACnC,YAAY,EACZ,YAAY,EACZ,GAAG,EACH,QAAQ,EACR,eAAe,EACf,wBAAwB,CACzB,CAAC;AACJ,CAAC;AAxBD,8DAwBC;AAED,KAAK,UAAU,8BAA8B,CAC3C,YAA0B,EAC1B,YAA0B,EAC1B,WAAgB,EAChB,gBAAqB,EACrB,eAAsB,EACtB,2BAA4D,EAAE;IAK9D,IAAI,gBAAqB,CAAC;IAC1B,qEAAqE;IACrE,8CAA8C;IAC9C,IAAI,wBAAwB,CAAC,QAAQ,KAAK,SAAS,EAAE;QACnD,gBAAgB,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC;YACnD,GAAG,EAAE,WAAW;YAChB,QAAQ,EAAE,gBAAgB;YAC1B,IAAI,EAAE,eAAe;YACrB,GAAG,wBAAwB;YAC3B,YAAY,EAAE,SAAS;YACvB,oBAAoB,EAAE,SAAS;SAChC,CAAC,CAAC;KACJ;SAAM;QACL,gBAAgB,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC;YACnD,GAAG,EAAE,WAAW;YAChB,QAAQ,EAAE,gBAAgB;YAC1B,IAAI,EAAE,eAAe;YACrB,GAAG,wBAAwB;YAC3B,QAAQ,EAAE,SAAS;SACpB,CAAC,CAAC;KACJ;IAED,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC;QACrD,IAAI,EAAE,gBAAgB;KACvB,CAAC,CAAC;IAEH,MAAM,EAAE,kBAAkB,EAAE,GAAG,wDAAa,MAAM,GAAC,CAAC;IACpD,MAAM,eAAe,GAAG,kBAAkB,CAAC;QACzC,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,OAAO;QAClC,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;KAClC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CACvC,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,CAChB,CAAC;IAEF,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,YAAY,EAAE,CAAC;AAC3D,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,EAAE,SAAS,EAAE,OAAO,EAA6B,EACjD,YAAoB,EACpB,OAAgB,EAChB,SAA8B,EAAE;IAEhC,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,gBAAgB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACvE,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI,IAAA,yBAAe,EAAC,OAAO,CAAC,QAAQ,CAAC;QAC1D,MAAM,CAAC,MAAM,EAAE,MAAM;YACnB,sBAAsB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC;QACxD,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC;KACrC,CAAC,CAAC;IAEH,OAAO,kBAAkB,CACvB,YAAY,EACZ,YAAY,EACZ,gBAAgB,CAAC,GAAG,EACpB,OAAO,CACR,CAAC;AACJ,CAAC;AAnBD,sCAmBC;AAED,KAAK,UAAU,kBAAkB,CAC/B,YAA0B,EAC1B,YAA0B,EAC1B,WAAgB,EAChB,OAAgB;IAEhB,MAAM,IAAI,GAAG,wDAAa,MAAM,GAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;QAChC,OAAO;QACP,MAAM,EAAE;YACN,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,YAAY;SACrB;QACD,GAAG,EAAE,WAAW;KACjB,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,QAA0B,EAC1B,WAAmB;IAEnB,MAAM,CAAC,mBAAmB,CAAC,GAAG,MAAM,IAAA,0BAAgB,EAAC,QAAQ,CAAC,CAAC;IAE/D,IAAI,mBAAmB,KAAK,SAAS,EAAE;QACrC,MAAM,IAAI,yCAAgC,CAAC,WAAW,CAAC,CAAC;KACzD;IAED,OAAO,mBAAmB,CAAC;AAC7B,CAAC"}
@@ -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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nomicfoundation/hardhat-viem",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
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",
@@ -31,7 +31,7 @@
31
31
  "@types/lodash": "^4.14.123",
32
32
  "@types/lodash.memoize": "^4.1.7",
33
33
  "@types/mocha": ">=9.1.0",
34
- "@types/node": "^16.0.0",
34
+ "@types/node": "^18.0.0",
35
35
  "@types/sinon": "^9.0.8",
36
36
  "@typescript-eslint/eslint-plugin": "5.61.0",
37
37
  "@typescript-eslint/parser": "5.61.0",
@@ -40,7 +40,7 @@
40
40
  "eslint": "^8.44.0",
41
41
  "eslint-config-prettier": "8.3.0",
42
42
  "eslint-plugin-import": "2.27.5",
43
- "eslint-plugin-no-only-tests": "3.0.0",
43
+ "eslint-plugin-mocha": "10.4.1",
44
44
  "eslint-plugin-prettier": "3.4.0",
45
45
  "hardhat": "^2.17.0",
46
46
  "jest-diff": "^29.7.0",
@@ -52,8 +52,8 @@
52
52
  "ts-node": "^10.8.0",
53
53
  "typescript": "~5.0.0",
54
54
  "viem": "^2.7.6",
55
- "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "^1.0.2",
56
- "@nomicfoundation/eslint-plugin-slow-imports": "^1.0.0"
55
+ "@nomicfoundation/eslint-plugin-slow-imports": "^1.0.0",
56
+ "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "^1.0.2"
57
57
  },
58
58
  "peerDependencies": {
59
59
  "hardhat": "^2.17.0",
@@ -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
+ }
@@ -54,7 +54,7 @@ export async function innerGetPublicClient(
54
54
  /**
55
55
  * Get a list of WalletClient instances. These are read-write clients that can
56
56
  * be used to send transactions to the blockchain. Each client is associated
57
- * with a an account obtained from the provider using `eth_accounts`.
57
+ * with an account obtained from the provider using `eth_accounts`.
58
58
  *
59
59
  * @param provider The Ethereum provider used to connect to the blockchain.
60
60
  * @param walletClientConfig Optional configuration for the WalletClient instances. See the viem documentation for more information.
@@ -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
@@ -88,7 +111,7 @@ export async function innerDeployContract(
88
111
  confirmations,
89
112
  });
90
113
 
91
- if (contractAddress === null) {
114
+ if (contractAddress === null || contractAddress === undefined) {
92
115
  const transaction = await publicClient.getTransaction({
93
116
  hash: deploymentTxHash,
94
117
  });
@@ -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
+ }
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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"}