@nomicfoundation/hardhat-viem 1.0.0
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/.eslintrc.js +24 -0
- package/LICENSE +21 -0
- package/README.md +237 -0
- package/index.d.ts +3 -0
- package/index.d.ts.map +1 -0
- package/index.js +20 -0
- package/index.js.map +1 -0
- package/internal/accounts.d.ts +5 -0
- package/internal/accounts.d.ts.map +1 -0
- package/internal/accounts.js +9 -0
- package/internal/accounts.js.map +1 -0
- package/internal/chains.d.ts +7 -0
- package/internal/chains.d.ts.map +1 -0
- package/internal/chains.js +74 -0
- package/internal/chains.js.map +1 -0
- package/internal/clients.d.ts +45 -0
- package/internal/clients.d.ts.map +1 -0
- package/internal/clients.js +127 -0
- package/internal/clients.js.map +1 -0
- package/internal/contracts.d.ts +11 -0
- package/internal/contracts.d.ts.map +1 -0
- package/internal/contracts.js +155 -0
- package/internal/contracts.js.map +1 -0
- package/internal/errors.d.ts +23 -0
- package/internal/errors.d.ts.map +1 -0
- package/internal/errors.js +70 -0
- package/internal/errors.js.map +1 -0
- package/internal/tasks.d.ts +2 -0
- package/internal/tasks.d.ts.map +1 -0
- package/internal/tasks.js +224 -0
- package/internal/tasks.js.map +1 -0
- package/internal/type-extensions.d.ts +26 -0
- package/internal/type-extensions.d.ts.map +1 -0
- package/internal/type-extensions.js +5 -0
- package/internal/type-extensions.js.map +1 -0
- package/package.json +75 -0
- package/src/index.ts +42 -0
- package/src/internal/accounts.ts +9 -0
- package/src/internal/chains.ts +91 -0
- package/src/internal/clients.ts +152 -0
- package/src/internal/contracts.ts +243 -0
- package/src/internal/errors.ts +76 -0
- package/src/internal/tasks.ts +319 -0
- package/src/internal/type-extensions.ts +54 -0
- package/src/tsconfig.json +15 -0
- package/src/types.ts +77 -0
- package/types.d.ts +32 -0
- package/types.d.ts.map +1 -0
- package/types.js +3 -0
- package/types.js.map +1 -0
@@ -0,0 +1,155 @@
|
|
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.getContractAt = exports.sendDeploymentTransaction = exports.innerDeployContract = exports.deployContract = void 0;
|
27
|
+
const clients_1 = require("./clients");
|
28
|
+
const errors_1 = require("./errors");
|
29
|
+
async function deployContract({ artifacts, network }, contractName, constructorArgs = [], config = {}) {
|
30
|
+
const { walletClient: configWalletClient, confirmations, ...deployContractParameters } = config;
|
31
|
+
const [publicClient, walletClient, contractArtifact] = await Promise.all([
|
32
|
+
(0, clients_1.getPublicClient)(network.provider),
|
33
|
+
configWalletClient ??
|
34
|
+
getDefaultWalletClient(network.provider, network.name),
|
35
|
+
artifacts.readArtifact(contractName),
|
36
|
+
]);
|
37
|
+
return innerDeployContract(publicClient, walletClient, contractArtifact.abi, contractArtifact.bytecode, constructorArgs, deployContractParameters, confirmations);
|
38
|
+
}
|
39
|
+
exports.deployContract = deployContract;
|
40
|
+
async function innerDeployContract(publicClient, walletClient, contractAbi, contractBytecode, constructorArgs, deployContractParameters = {}, confirmations = 1) {
|
41
|
+
let deploymentTxHash;
|
42
|
+
// If gasPrice is defined, then maxFeePerGas and maxPriorityFeePerGas
|
43
|
+
// must be undefined because it's a legaxy tx.
|
44
|
+
if (deployContractParameters.gasPrice !== undefined) {
|
45
|
+
deploymentTxHash = await walletClient.deployContract({
|
46
|
+
abi: contractAbi,
|
47
|
+
bytecode: contractBytecode,
|
48
|
+
args: constructorArgs,
|
49
|
+
...deployContractParameters,
|
50
|
+
maxFeePerGas: undefined,
|
51
|
+
maxPriorityFeePerGas: undefined,
|
52
|
+
});
|
53
|
+
}
|
54
|
+
else {
|
55
|
+
deploymentTxHash = await walletClient.deployContract({
|
56
|
+
abi: contractAbi,
|
57
|
+
bytecode: contractBytecode,
|
58
|
+
args: constructorArgs,
|
59
|
+
...deployContractParameters,
|
60
|
+
gasPrice: undefined,
|
61
|
+
});
|
62
|
+
}
|
63
|
+
if (confirmations < 0) {
|
64
|
+
throw new errors_1.HardhatViemError("Confirmations must be greater than 0.");
|
65
|
+
}
|
66
|
+
if (confirmations === 0) {
|
67
|
+
throw new errors_1.InvalidConfirmationsError();
|
68
|
+
}
|
69
|
+
const { contractAddress } = await publicClient.waitForTransactionReceipt({
|
70
|
+
hash: deploymentTxHash,
|
71
|
+
confirmations,
|
72
|
+
});
|
73
|
+
if (contractAddress === null) {
|
74
|
+
const transaction = await publicClient.getTransaction({
|
75
|
+
hash: deploymentTxHash,
|
76
|
+
});
|
77
|
+
throw new errors_1.DeployContractError(deploymentTxHash, transaction.blockNumber);
|
78
|
+
}
|
79
|
+
const contract = await innerGetContractAt(publicClient, walletClient, contractAbi, contractAddress);
|
80
|
+
return contract;
|
81
|
+
}
|
82
|
+
exports.innerDeployContract = innerDeployContract;
|
83
|
+
async function sendDeploymentTransaction({ artifacts, network }, contractName, constructorArgs = [], config = {}) {
|
84
|
+
const { walletClient: configWalletClient, ...deployContractParameters } = config;
|
85
|
+
const [publicClient, walletClient, contractArtifact] = await Promise.all([
|
86
|
+
(0, clients_1.getPublicClient)(network.provider),
|
87
|
+
configWalletClient ??
|
88
|
+
getDefaultWalletClient(network.provider, network.name),
|
89
|
+
artifacts.readArtifact(contractName),
|
90
|
+
]);
|
91
|
+
return innerSendDeploymentTransaction(publicClient, walletClient, contractArtifact.abi, contractArtifact.bytecode, constructorArgs, deployContractParameters);
|
92
|
+
}
|
93
|
+
exports.sendDeploymentTransaction = sendDeploymentTransaction;
|
94
|
+
async function innerSendDeploymentTransaction(publicClient, walletClient, contractAbi, contractBytecode, constructorArgs, deployContractParameters = {}) {
|
95
|
+
let deploymentTxHash;
|
96
|
+
// If gasPrice is defined, then maxFeePerGas and maxPriorityFeePerGas
|
97
|
+
// must be undefined because it's a legaxy tx.
|
98
|
+
if (deployContractParameters.gasPrice !== undefined) {
|
99
|
+
deploymentTxHash = await walletClient.deployContract({
|
100
|
+
abi: contractAbi,
|
101
|
+
bytecode: contractBytecode,
|
102
|
+
args: constructorArgs,
|
103
|
+
...deployContractParameters,
|
104
|
+
maxFeePerGas: undefined,
|
105
|
+
maxPriorityFeePerGas: undefined,
|
106
|
+
});
|
107
|
+
}
|
108
|
+
else {
|
109
|
+
deploymentTxHash = await walletClient.deployContract({
|
110
|
+
abi: contractAbi,
|
111
|
+
bytecode: contractBytecode,
|
112
|
+
args: constructorArgs,
|
113
|
+
...deployContractParameters,
|
114
|
+
gasPrice: undefined,
|
115
|
+
});
|
116
|
+
}
|
117
|
+
const deploymentTx = await publicClient.getTransaction({
|
118
|
+
hash: deploymentTxHash,
|
119
|
+
});
|
120
|
+
const { getContractAddress } = await Promise.resolve().then(() => __importStar(require("viem")));
|
121
|
+
const contractAddress = getContractAddress({
|
122
|
+
from: walletClient.account.address,
|
123
|
+
nonce: BigInt(deploymentTx.nonce),
|
124
|
+
});
|
125
|
+
const contract = await innerGetContractAt(publicClient, walletClient, contractAbi, contractAddress);
|
126
|
+
return { contract, deploymentTransaction: deploymentTx };
|
127
|
+
}
|
128
|
+
async function getContractAt({ artifacts, network }, contractName, address, config = {}) {
|
129
|
+
const [publicClient, walletClient, contractArtifact] = await Promise.all([
|
130
|
+
(0, clients_1.getPublicClient)(network.provider),
|
131
|
+
config.walletClient ??
|
132
|
+
getDefaultWalletClient(network.provider, network.name),
|
133
|
+
artifacts.readArtifact(contractName),
|
134
|
+
]);
|
135
|
+
return innerGetContractAt(publicClient, walletClient, contractArtifact.abi, address);
|
136
|
+
}
|
137
|
+
exports.getContractAt = getContractAt;
|
138
|
+
async function innerGetContractAt(publicClient, walletClient, contractAbi, address) {
|
139
|
+
const viem = await Promise.resolve().then(() => __importStar(require("viem")));
|
140
|
+
const contract = viem.getContract({
|
141
|
+
address,
|
142
|
+
publicClient,
|
143
|
+
walletClient,
|
144
|
+
abi: contractAbi,
|
145
|
+
});
|
146
|
+
return contract;
|
147
|
+
}
|
148
|
+
async function getDefaultWalletClient(provider, networkName) {
|
149
|
+
const [defaultWalletClient] = await (0, clients_1.getWalletClients)(provider);
|
150
|
+
if (defaultWalletClient === undefined) {
|
151
|
+
throw new errors_1.DefaultWalletClientNotFoundError(networkName);
|
152
|
+
}
|
153
|
+
return defaultWalletClient;
|
154
|
+
}
|
155
|
+
//# sourceMappingURL=contracts.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/internal/contracts.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { NomicLabsHardhatPluginError } from "hardhat/plugins";
|
2
|
+
export declare class HardhatViemError extends NomicLabsHardhatPluginError {
|
3
|
+
constructor(message: string, parent?: Error);
|
4
|
+
}
|
5
|
+
export declare class UnknownDevelopmentNetworkError extends HardhatViemError {
|
6
|
+
constructor();
|
7
|
+
}
|
8
|
+
export declare class NetworkNotFoundError extends HardhatViemError {
|
9
|
+
constructor(chainId: number);
|
10
|
+
}
|
11
|
+
export declare class MultipleMatchingNetworksError extends HardhatViemError {
|
12
|
+
constructor(chainId: number);
|
13
|
+
}
|
14
|
+
export declare class DefaultWalletClientNotFoundError extends HardhatViemError {
|
15
|
+
constructor(networkName: string);
|
16
|
+
}
|
17
|
+
export declare class InvalidConfirmationsError extends HardhatViemError {
|
18
|
+
constructor();
|
19
|
+
}
|
20
|
+
export declare class DeployContractError extends HardhatViemError {
|
21
|
+
constructor(txHash: string, blockNumber: bigint);
|
22
|
+
}
|
23
|
+
//# sourceMappingURL=errors.d.ts.map
|
@@ -0,0 +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"}
|
@@ -0,0 +1,70 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.DeployContractError = exports.InvalidConfirmationsError = exports.DefaultWalletClientNotFoundError = exports.MultipleMatchingNetworksError = exports.NetworkNotFoundError = exports.UnknownDevelopmentNetworkError = exports.HardhatViemError = void 0;
|
4
|
+
const plugins_1 = require("hardhat/plugins");
|
5
|
+
class HardhatViemError extends plugins_1.NomicLabsHardhatPluginError {
|
6
|
+
constructor(message, parent) {
|
7
|
+
super("@nomicfoundation/hardhat-viem", message, parent);
|
8
|
+
}
|
9
|
+
}
|
10
|
+
exports.HardhatViemError = HardhatViemError;
|
11
|
+
class UnknownDevelopmentNetworkError extends HardhatViemError {
|
12
|
+
constructor() {
|
13
|
+
super(`The chain id corresponds to a development network but we couldn't detect which one.
|
14
|
+
Please report this issue if you're using Hardhat or Foundry.`);
|
15
|
+
}
|
16
|
+
}
|
17
|
+
exports.UnknownDevelopmentNetworkError = UnknownDevelopmentNetworkError;
|
18
|
+
class NetworkNotFoundError extends HardhatViemError {
|
19
|
+
constructor(chainId) {
|
20
|
+
super(`No network with chain id ${chainId} found. You can override the chain by passing it as a parameter to the client getter:
|
21
|
+
|
22
|
+
import { someChain } from "viem/chains";
|
23
|
+
const client = await hre.viem.getPublicClient({
|
24
|
+
chain: someChain,
|
25
|
+
...
|
26
|
+
});
|
27
|
+
|
28
|
+
You can find a list of supported networks here: https://viem.sh/docs/clients/chains.html`);
|
29
|
+
}
|
30
|
+
}
|
31
|
+
exports.NetworkNotFoundError = NetworkNotFoundError;
|
32
|
+
class MultipleMatchingNetworksError extends HardhatViemError {
|
33
|
+
constructor(chainId) {
|
34
|
+
super(`Multiple networks with chain id ${chainId} found. You can override the chain by passing it as a parameter to the client getter:
|
35
|
+
|
36
|
+
import { someChain } from "viem/chains";
|
37
|
+
const client = await hre.viem.getPublicClient({
|
38
|
+
chain: someChain,
|
39
|
+
...
|
40
|
+
});
|
41
|
+
|
42
|
+
You can find a list of supported networks here: https://viem.sh/docs/clients/chains.html`);
|
43
|
+
}
|
44
|
+
}
|
45
|
+
exports.MultipleMatchingNetworksError = MultipleMatchingNetworksError;
|
46
|
+
class DefaultWalletClientNotFoundError extends HardhatViemError {
|
47
|
+
constructor(networkName) {
|
48
|
+
super(`Default wallet client not found. This can happen if no accounts were configured for this network (network: '${networkName}').
|
49
|
+
|
50
|
+
Alternatively, you can set a custom wallet client by passing it as a parameter in the deployContract function:
|
51
|
+
|
52
|
+
const walletClient = await hre.viem.getWalletClient(address);
|
53
|
+
const contractA = await hre.viem.deployContract("A", [], { walletClient });
|
54
|
+
const contractB = await hre.viem.getContractAt("B", address, { walletClient });`);
|
55
|
+
}
|
56
|
+
}
|
57
|
+
exports.DefaultWalletClientNotFoundError = DefaultWalletClientNotFoundError;
|
58
|
+
class InvalidConfirmationsError extends HardhatViemError {
|
59
|
+
constructor() {
|
60
|
+
super("deployContract does not support 0 confirmations. Use sendDeploymentTransaction if you want to handle the deployment transaction yourself.");
|
61
|
+
}
|
62
|
+
}
|
63
|
+
exports.InvalidConfirmationsError = InvalidConfirmationsError;
|
64
|
+
class DeployContractError extends HardhatViemError {
|
65
|
+
constructor(txHash, blockNumber) {
|
66
|
+
super(`The deployment transaction '${txHash}' was mined in block '${blockNumber}' but its receipt doesn't contain a contract address`);
|
67
|
+
}
|
68
|
+
}
|
69
|
+
exports.DeployContractError = DeployContractError;
|
70
|
+
//# sourceMappingURL=errors.js.map
|
@@ -0,0 +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;;;;;;;;yFAQgD,CACpF,CAAC;IACJ,CAAC;CACF;AAdD,oDAcC;AAED,MAAa,6BAA8B,SAAQ,gBAAgB;IACjE,YAAY,OAAe;QACzB,KAAK,CACH,mCAAmC,OAAO;;;;;;;;yFAQyC,CACpF,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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../src/internal/tasks.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,224 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const path_1 = require("path");
|
4
|
+
const promises_1 = require("fs/promises");
|
5
|
+
const config_1 = require("hardhat/config");
|
6
|
+
const task_names_1 = require("hardhat/builtin-tasks/task-names");
|
7
|
+
const contract_names_1 = require("hardhat/utils/contract-names");
|
8
|
+
const fs_utils_1 = require("hardhat/internal/util/fs-utils");
|
9
|
+
const source_names_1 = require("hardhat/utils/source-names");
|
10
|
+
/**
|
11
|
+
* Override task that generates an `artifacts.d.ts` file with `never`
|
12
|
+
* types for duplicate contract names. This file is used in conjunction with
|
13
|
+
* the `artifacts.d.ts` file inside each contract directory to type
|
14
|
+
* `hre.artifacts`.
|
15
|
+
*/
|
16
|
+
(0, config_1.subtask)(task_names_1.TASK_COMPILE_SOLIDITY).setAction(async (_, { config, artifacts }, runSuper) => {
|
17
|
+
const superRes = await runSuper();
|
18
|
+
const duplicateContractNames = await findDuplicateContractNames(artifacts);
|
19
|
+
const duplicateArtifactsDTs = generateDuplicateArtifactsDefinition(duplicateContractNames);
|
20
|
+
try {
|
21
|
+
await (0, promises_1.writeFile)((0, path_1.join)(config.paths.artifacts, "artifacts.d.ts"), duplicateArtifactsDTs);
|
22
|
+
}
|
23
|
+
catch (error) {
|
24
|
+
console.error("Error writing artifacts definition:", error);
|
25
|
+
}
|
26
|
+
return superRes;
|
27
|
+
});
|
28
|
+
/**
|
29
|
+
* Override task to emit TypeScript and definition files for each contract.
|
30
|
+
* Generates a `.d.ts` file per contract, and a `artifacts.d.ts` per solidity
|
31
|
+
* file, which is used in conjunction to the root `artifacts.d.ts`
|
32
|
+
* to type `hre.artifacts`.
|
33
|
+
*/
|
34
|
+
(0, config_1.subtask)(task_names_1.TASK_COMPILE_SOLIDITY_EMIT_ARTIFACTS).setAction(async (_, { artifacts, config }, runSuper) => {
|
35
|
+
const { artifactsEmittedPerFile } = await runSuper();
|
36
|
+
const duplicateContractNames = await findDuplicateContractNames(artifacts);
|
37
|
+
await Promise.all(artifactsEmittedPerFile.map(async ({ file, artifactsEmitted }) => {
|
38
|
+
const srcDir = (0, path_1.join)(config.paths.artifacts, file.sourceName);
|
39
|
+
await (0, promises_1.mkdir)(srcDir, {
|
40
|
+
recursive: true,
|
41
|
+
});
|
42
|
+
const contractTypeData = await Promise.all(artifactsEmitted.map(async (contractName) => {
|
43
|
+
const fqn = (0, contract_names_1.getFullyQualifiedName)(file.sourceName, contractName);
|
44
|
+
const artifact = await artifacts.readArtifact(fqn);
|
45
|
+
const isDuplicate = duplicateContractNames.has(contractName);
|
46
|
+
const declaration = generateContractDeclaration(artifact, isDuplicate);
|
47
|
+
const typeName = `${contractName}$Type`;
|
48
|
+
return { contractName, fqn, typeName, declaration };
|
49
|
+
}));
|
50
|
+
const fp = [];
|
51
|
+
for (const { contractName, declaration } of contractTypeData) {
|
52
|
+
fp.push((0, promises_1.writeFile)((0, path_1.join)(srcDir, `${contractName}.d.ts`), declaration));
|
53
|
+
}
|
54
|
+
const dTs = generateArtifactsDefinition(contractTypeData);
|
55
|
+
fp.push((0, promises_1.writeFile)((0, path_1.join)(srcDir, "artifacts.d.ts"), dTs));
|
56
|
+
try {
|
57
|
+
await Promise.all(fp);
|
58
|
+
}
|
59
|
+
catch (error) {
|
60
|
+
console.error("Error writing artifacts definition:", error);
|
61
|
+
}
|
62
|
+
}));
|
63
|
+
return { artifactsEmittedPerFile };
|
64
|
+
});
|
65
|
+
/**
|
66
|
+
* Override task for cleaning up outdated artifacts.
|
67
|
+
* Deletes directories with stale `artifacts.d.ts` files that no longer have
|
68
|
+
* a matching `.sol` file.
|
69
|
+
*/
|
70
|
+
(0, config_1.subtask)(task_names_1.TASK_COMPILE_REMOVE_OBSOLETE_ARTIFACTS).setAction(async (_, { config, artifacts }, runSuper) => {
|
71
|
+
const superRes = await runSuper();
|
72
|
+
const fqns = await artifacts.getAllFullyQualifiedNames();
|
73
|
+
const existingSourceNames = new Set(fqns.map((fqn) => (0, contract_names_1.parseFullyQualifiedName)(fqn).sourceName));
|
74
|
+
const allArtifactsDTs = await (0, fs_utils_1.getAllFilesMatching)(config.paths.artifacts, (f) => f.endsWith("artifacts.d.ts"));
|
75
|
+
for (const artifactDTs of allArtifactsDTs) {
|
76
|
+
const dir = (0, path_1.dirname)(artifactDTs);
|
77
|
+
const sourceName = (0, source_names_1.replaceBackslashes)((0, path_1.relative)(config.paths.artifacts, dir));
|
78
|
+
// If sourceName is empty, it means that the artifacts.d.ts file is in the
|
79
|
+
// root of the artifacts directory, and we shouldn't delete it.
|
80
|
+
if (sourceName === "") {
|
81
|
+
continue;
|
82
|
+
}
|
83
|
+
if (!existingSourceNames.has(sourceName)) {
|
84
|
+
await (0, promises_1.rm)(dir, { force: true, recursive: true });
|
85
|
+
}
|
86
|
+
}
|
87
|
+
return superRes;
|
88
|
+
});
|
89
|
+
const AUTOGENERATED_FILE_PREFACE = `// This file was autogenerated by hardhat-viem, do not edit it.
|
90
|
+
// prettier-ignore
|
91
|
+
// tslint:disable
|
92
|
+
// eslint-disable`;
|
93
|
+
/**
|
94
|
+
* Generates TypeScript code that extends the `ArtifactsMap` with `never` types
|
95
|
+
* for duplicate contract names.
|
96
|
+
*/
|
97
|
+
function generateDuplicateArtifactsDefinition(duplicateContractNames) {
|
98
|
+
return `${AUTOGENERATED_FILE_PREFACE}
|
99
|
+
|
100
|
+
import "hardhat/types/artifacts";
|
101
|
+
|
102
|
+
declare module "hardhat/types/artifacts" {
|
103
|
+
interface ArtifactsMap {
|
104
|
+
${Array.from(duplicateContractNames)
|
105
|
+
.map((name) => `${name}: never;`)
|
106
|
+
.join("\n ")}
|
107
|
+
}
|
108
|
+
}
|
109
|
+
`;
|
110
|
+
}
|
111
|
+
/**
|
112
|
+
* Generates TypeScript code to declare a contract and its associated
|
113
|
+
* TypeScript types.
|
114
|
+
*/
|
115
|
+
function generateContractDeclaration(artifact, isDuplicate) {
|
116
|
+
const { contractName, sourceName } = artifact;
|
117
|
+
const fqn = (0, contract_names_1.getFullyQualifiedName)(sourceName, contractName);
|
118
|
+
const validNames = isDuplicate ? [fqn] : [contractName, fqn];
|
119
|
+
const json = JSON.stringify(artifact, undefined, 2);
|
120
|
+
const contractTypeName = `${contractName}$Type`;
|
121
|
+
const constructorAbi = artifact.abi.find(({ type }) => type === "constructor");
|
122
|
+
const inputs = constructorAbi !== undefined ? constructorAbi.inputs : [];
|
123
|
+
const constructorArgs = inputs.length > 0
|
124
|
+
? `constructorArgs: [${inputs
|
125
|
+
.map(({ name, type }) => getArgType(name, type))
|
126
|
+
.join(", ")}]`
|
127
|
+
: `constructorArgs?: []`;
|
128
|
+
return `${AUTOGENERATED_FILE_PREFACE}
|
129
|
+
|
130
|
+
import type { Address } from "viem";
|
131
|
+
${inputs.length > 0
|
132
|
+
? `import type { AbiParameterToPrimitiveType, GetContractReturnType } from "@nomicfoundation/hardhat-viem/types";`
|
133
|
+
: `import type { GetContractReturnType } from "@nomicfoundation/hardhat-viem/types";`}
|
134
|
+
import "@nomicfoundation/hardhat-viem/types";
|
135
|
+
|
136
|
+
export interface ${contractTypeName} ${json}
|
137
|
+
|
138
|
+
declare module "@nomicfoundation/hardhat-viem/types" {
|
139
|
+
${validNames
|
140
|
+
.map((name) => `export function deployContract(
|
141
|
+
contractName: "${name}",
|
142
|
+
${constructorArgs},
|
143
|
+
config?: DeployContractConfig
|
144
|
+
): Promise<GetContractReturnType<${contractTypeName}["abi"]>>;`)
|
145
|
+
.join("\n ")}
|
146
|
+
|
147
|
+
${validNames
|
148
|
+
.map((name) => `export function sendDeploymentTransaction(
|
149
|
+
contractName: "${name}",
|
150
|
+
${constructorArgs},
|
151
|
+
config?: SendDeploymentTransactionConfig
|
152
|
+
): Promise<{
|
153
|
+
contract: GetContractReturnType<${contractTypeName}["abi"]>;
|
154
|
+
deploymentTransaction: GetTransactionReturnType;
|
155
|
+
}>;`)
|
156
|
+
.join("\n ")}
|
157
|
+
|
158
|
+
${validNames
|
159
|
+
.map((name) => `export function getContractAt(
|
160
|
+
contractName: "${name}",
|
161
|
+
address: Address,
|
162
|
+
config?: GetContractAtConfig
|
163
|
+
): Promise<GetContractReturnType<${contractTypeName}["abi"]>>;`)
|
164
|
+
.join("\n ")}
|
165
|
+
}
|
166
|
+
`;
|
167
|
+
}
|
168
|
+
/**
|
169
|
+
* Generates TypeScript code to extend the `ArtifactsMap` interface with
|
170
|
+
* contract types.
|
171
|
+
*/
|
172
|
+
function generateArtifactsDefinition(contractTypeData) {
|
173
|
+
return `${AUTOGENERATED_FILE_PREFACE}
|
174
|
+
|
175
|
+
import "hardhat/types/artifacts";
|
176
|
+
|
177
|
+
${contractTypeData
|
178
|
+
.map((ctd) => `import { ${ctd.typeName} } from "./${ctd.contractName}";`)
|
179
|
+
.join("\n")}
|
180
|
+
|
181
|
+
declare module "hardhat/types/artifacts" {
|
182
|
+
interface ArtifactsMap {
|
183
|
+
${contractTypeData
|
184
|
+
.map((ctd) => `["${ctd.contractName}"]: ${ctd.typeName};`)
|
185
|
+
.join("\n ")}
|
186
|
+
${contractTypeData
|
187
|
+
.map((ctd) => `["${ctd.fqn}"]: ${ctd.typeName};`)
|
188
|
+
.join("\n ")}
|
189
|
+
}
|
190
|
+
}
|
191
|
+
`;
|
192
|
+
}
|
193
|
+
/**
|
194
|
+
* Returns the type of a function argument in one of the following formats:
|
195
|
+
* - If the 'name' is provided:
|
196
|
+
* "name: AbiParameterToPrimitiveType<{ name: string; type: string; }>"
|
197
|
+
*
|
198
|
+
* - If the 'name' is empty:
|
199
|
+
* "AbiParameterToPrimitiveType<{ name: string; type: string; }>"
|
200
|
+
*/
|
201
|
+
function getArgType(name, type) {
|
202
|
+
const argType = `AbiParameterToPrimitiveType<${JSON.stringify({
|
203
|
+
name,
|
204
|
+
type,
|
205
|
+
})}>`;
|
206
|
+
return name !== "" && name !== undefined ? `${name}: ${argType}` : argType;
|
207
|
+
}
|
208
|
+
/**
|
209
|
+
* Returns a set of duplicate contract names.
|
210
|
+
*/
|
211
|
+
async function findDuplicateContractNames(artifacts) {
|
212
|
+
const fqns = await artifacts.getAllFullyQualifiedNames();
|
213
|
+
const contractNames = fqns.map((fqn) => (0, contract_names_1.parseFullyQualifiedName)(fqn).contractName);
|
214
|
+
const duplicates = new Set();
|
215
|
+
const existing = new Set();
|
216
|
+
for (const name of contractNames) {
|
217
|
+
if (existing.has(name)) {
|
218
|
+
duplicates.add(name);
|
219
|
+
}
|
220
|
+
existing.add(name);
|
221
|
+
}
|
222
|
+
return duplicates;
|
223
|
+
}
|
224
|
+
//# sourceMappingURL=tasks.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/internal/tasks.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import type { Address, PublicClientConfig, WalletClientConfig, TestClientConfig } from "viem";
|
2
|
+
import type { PublicClient, TestClient, WalletClient, deployContract, sendDeploymentTransaction, getContractAt } from "../types";
|
3
|
+
import "hardhat/types/runtime";
|
4
|
+
import "hardhat/types/artifacts";
|
5
|
+
declare module "hardhat/types/runtime" {
|
6
|
+
interface HardhatRuntimeEnvironment {
|
7
|
+
viem: {
|
8
|
+
getPublicClient(publicClientConfig?: Partial<PublicClientConfig>): Promise<PublicClient>;
|
9
|
+
getWalletClients(walletClientConfig?: Partial<WalletClientConfig>): Promise<WalletClient[]>;
|
10
|
+
getWalletClient(address: Address, walletClientConfig?: Partial<WalletClientConfig>): Promise<WalletClient>;
|
11
|
+
getTestClient(testClientConfig?: Partial<TestClientConfig>): Promise<TestClient>;
|
12
|
+
deployContract: typeof deployContract;
|
13
|
+
sendDeploymentTransaction: typeof sendDeploymentTransaction;
|
14
|
+
getContractAt: typeof getContractAt;
|
15
|
+
};
|
16
|
+
}
|
17
|
+
}
|
18
|
+
declare module "hardhat/types/artifacts" {
|
19
|
+
interface ArtifactsMap {
|
20
|
+
}
|
21
|
+
interface Artifacts {
|
22
|
+
readArtifact<ArgT extends keyof ArtifactsMap>(contractNameOrFullyQualifiedName: ArgT): Promise<ArtifactsMap[ArgT]>;
|
23
|
+
readArtifactSync<ArgT extends keyof ArtifactsMap>(contractNameOrFullyQualifiedName: ArgT): ArtifactsMap[ArgT];
|
24
|
+
}
|
25
|
+
}
|
26
|
+
//# sourceMappingURL=type-extensions.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"type-extensions.d.ts","sourceRoot":"","sources":["../src/internal/type-extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,MAAM,CAAC;AACd,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,cAAc,EACd,yBAAyB,EACzB,aAAa,EACd,MAAM,UAAU,CAAC;AAClB,OAAO,uBAAuB,CAAC;AAC/B,OAAO,yBAAyB,CAAC;AAEjC,OAAO,QAAQ,uBAAuB,CAAC;IACrC,UAAU,yBAAyB;QACjC,IAAI,EAAE;YACJ,eAAe,CACb,kBAAkB,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAC/C,OAAO,CAAC,YAAY,CAAC,CAAC;YACzB,gBAAgB,CACd,kBAAkB,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAC/C,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;YAC3B,eAAe,CACb,OAAO,EAAE,OAAO,EAChB,kBAAkB,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAC/C,OAAO,CAAC,YAAY,CAAC,CAAC;YACzB,aAAa,CACX,gBAAgB,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAC3C,OAAO,CAAC,UAAU,CAAC,CAAC;YACvB,cAAc,EAAE,OAAO,cAAc,CAAC;YACtC,yBAAyB,EAAE,OAAO,yBAAyB,CAAC;YAC5D,aAAa,EAAE,OAAO,aAAa,CAAC;SACrC,CAAC;KACH;CACF;AAED,OAAO,QAAQ,yBAAyB,CAAC;IAEvC,UAAU,YAAY;KAAG;IAEzB,UAAU,SAAS;QACjB,YAAY,CAAC,IAAI,SAAS,MAAM,YAAY,EAC1C,gCAAgC,EAAE,IAAI,GACrC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QAE/B,gBAAgB,CAAC,IAAI,SAAS,MAAM,YAAY,EAC9C,gCAAgC,EAAE,IAAI,GACrC,YAAY,CAAC,IAAI,CAAC,CAAC;KACvB;CACF"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"type-extensions.js","sourceRoot":"","sources":["../src/internal/type-extensions.ts"],"names":[],"mappings":";;AAcA,iCAA+B;AAC/B,mCAAiC"}
|
package/package.json
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
{
|
2
|
+
"name": "@nomicfoundation/hardhat-viem",
|
3
|
+
"version": "1.0.0",
|
4
|
+
"description": "Hardhat plugin for viem",
|
5
|
+
"homepage": "https://github.com/nomicfoundation/hardhat/tree/main/packages/hardhat-viem",
|
6
|
+
"repository": "github:nomicfoundation/hardhat",
|
7
|
+
"author": "Nomic Foundation",
|
8
|
+
"license": "MIT",
|
9
|
+
"main": "index.js",
|
10
|
+
"types": "index.d.ts",
|
11
|
+
"keywords": [
|
12
|
+
"ethereum",
|
13
|
+
"smart-contracts",
|
14
|
+
"hardhat",
|
15
|
+
"hardhat-plugin",
|
16
|
+
"viem"
|
17
|
+
],
|
18
|
+
"scripts": {
|
19
|
+
"lint": "yarn prettier --check && yarn eslint",
|
20
|
+
"lint:fix": "yarn prettier --write && yarn eslint --fix",
|
21
|
+
"eslint": "eslint 'src/**/*.ts' 'test/**/*.ts'",
|
22
|
+
"prettier": "prettier \"**/*.{js,md,json}\"",
|
23
|
+
"pretest": "cd ../.. && yarn build",
|
24
|
+
"test": "mocha --recursive \"test/**/*.ts\" -c --exit",
|
25
|
+
"snapshots:update": "ts-node test/update-snapshots.ts",
|
26
|
+
"coverage": "nyc yarn test -- --reporter min",
|
27
|
+
"build": "tsc --build .",
|
28
|
+
"prepublishOnly": "yarn build",
|
29
|
+
"clean": "rimraf internal *.{d.ts,js}{,.map} build-test tsconfig.tsbuildinfo"
|
30
|
+
},
|
31
|
+
"files": [
|
32
|
+
"src/",
|
33
|
+
"internal/",
|
34
|
+
"*.d.ts",
|
35
|
+
"*.d.ts.map",
|
36
|
+
"*.js",
|
37
|
+
"*.js.map",
|
38
|
+
"LICENSE",
|
39
|
+
"README.md"
|
40
|
+
],
|
41
|
+
"devDependencies": {
|
42
|
+
"@types/chai": "^4.2.0",
|
43
|
+
"@types/chai-as-promised": "^7.1.3",
|
44
|
+
"@types/lodash.memoize": "^4.1.7",
|
45
|
+
"@types/mocha": ">=9.1.0",
|
46
|
+
"@types/node": "^16.0.0",
|
47
|
+
"@types/sinon": "^9.0.8",
|
48
|
+
"@typescript-eslint/eslint-plugin": "5.61.0",
|
49
|
+
"@typescript-eslint/parser": "5.61.0",
|
50
|
+
"chai": "^4.2.0",
|
51
|
+
"chai-as-promised": "^7.1.1",
|
52
|
+
"eslint": "^8.44.0",
|
53
|
+
"eslint-config-prettier": "8.3.0",
|
54
|
+
"eslint-plugin-import": "2.27.5",
|
55
|
+
"eslint-plugin-no-only-tests": "3.0.0",
|
56
|
+
"eslint-plugin-prettier": "3.4.0",
|
57
|
+
"hardhat": "^2.17.0",
|
58
|
+
"jest-diff": "^29.7.0",
|
59
|
+
"mocha": "^10.0.0",
|
60
|
+
"prettier": "2.4.1",
|
61
|
+
"sinon": "^9.0.0",
|
62
|
+
"ts-node": "^10.8.0",
|
63
|
+
"typescript": "~5.0.0",
|
64
|
+
"viem": "^1.15.1"
|
65
|
+
},
|
66
|
+
"peerDependencies": {
|
67
|
+
"hardhat": "^2.17.0",
|
68
|
+
"typescript": "~5.0.0",
|
69
|
+
"viem": "^1.15.1"
|
70
|
+
},
|
71
|
+
"dependencies": {
|
72
|
+
"abitype": "^0.9.8",
|
73
|
+
"lodash.memoize": "^4.1.2"
|
74
|
+
}
|
75
|
+
}
|