@arcsign/hardhat-plugin 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/dist/index.js ADDED
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ /**
3
+ * @arcsign/hardhat-plugin
4
+ *
5
+ * Hardhat plugin for secure transaction signing with ArcSign wallet.
6
+ * Eliminates the need for private keys in .env files.
7
+ *
8
+ * Usage in hardhat.config.ts:
9
+ *
10
+ * ```typescript
11
+ * import "@arcsign/hardhat-plugin";
12
+ *
13
+ * export default {
14
+ * networks: {
15
+ * mainnet: {
16
+ * url: process.env.RPC_URL,
17
+ * accounts: [], // Empty - ArcSign provides signers
18
+ * arcsign: true, // Enable ArcSign for this network
19
+ * },
20
+ * },
21
+ * };
22
+ * ```
23
+ */
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.getChainIdForNetwork = exports.isTestnet = exports.getExplorerForChainId = exports.ArcSignClient = exports.ArcSignSigner = exports.ArcSignProvider = void 0;
26
+ const config_1 = require("hardhat/config");
27
+ const ArcSignProvider_1 = require("./ArcSignProvider");
28
+ const ArcSignClient_1 = require("./ArcSignClient");
29
+ const utils_1 = require("./utils");
30
+ // Type guard to check if network uses ArcSign
31
+ function isArcSignEnabled(config) {
32
+ return typeof config === "object" && config !== null && config.arcsign === true;
33
+ }
34
+ // Default WebSocket configuration
35
+ const DEFAULT_WS_URL = "ws://127.0.0.1:9527";
36
+ // Extend config to handle arcsign networks
37
+ (0, config_1.extendConfig)((config, userConfig) => {
38
+ // Process each network config
39
+ for (const networkName of Object.keys(userConfig.networks || {})) {
40
+ const networkConfig = userConfig.networks?.[networkName];
41
+ if (isArcSignEnabled(networkConfig)) {
42
+ // Mark this network as using ArcSign
43
+ // The actual signer will be created at runtime
44
+ console.log(`[ArcSign] Network "${networkName}" will use ArcSign wallet for signing`);
45
+ }
46
+ }
47
+ });
48
+ // Extend the Hardhat Runtime Environment
49
+ (0, config_1.extendEnvironment)((hre) => {
50
+ // Create ArcSign provider and client
51
+ const arcsignProvider = new ArcSignProvider_1.ArcSignProvider(DEFAULT_WS_URL);
52
+ const arcsignClient = new ArcSignClient_1.ArcSignClient(DEFAULT_WS_URL);
53
+ // Add arcsign namespace to hre
54
+ hre.arcsign = {
55
+ provider: arcsignProvider,
56
+ client: arcsignClient,
57
+ isConnected: () => arcsignProvider.isConnected(),
58
+ getAccounts: () => arcsignProvider.getAccounts(),
59
+ getExplorerApiKey: async (explorer) => {
60
+ try {
61
+ if (!arcsignClient.isConnected()) {
62
+ await arcsignClient.connect();
63
+ }
64
+ return await arcsignClient.getExplorerApiKey(explorer);
65
+ }
66
+ catch (err) {
67
+ console.error(`[ArcSign] Failed to get API key for ${explorer}:`, err);
68
+ return null;
69
+ }
70
+ },
71
+ };
72
+ // Override getSigners for networks using ArcSign
73
+ // This requires @nomicfoundation/hardhat-ethers to be installed
74
+ const hreAny = hre;
75
+ if (hreAny.ethers && typeof hreAny.ethers.getSigners === "function") {
76
+ const originalGetSigners = hreAny.ethers.getSigners.bind(hreAny.ethers);
77
+ hreAny.ethers.getSigners = async () => {
78
+ const networkConfig = hre.network.config;
79
+ if (isArcSignEnabled(networkConfig)) {
80
+ // Connect to ArcSign if not already connected
81
+ if (!(await arcsignProvider.isConnected())) {
82
+ await arcsignProvider.connect();
83
+ }
84
+ // Get signers from ArcSign
85
+ const signers = await arcsignProvider.getSigners(hreAny.ethers.provider);
86
+ return signers;
87
+ }
88
+ // Fall back to default behavior
89
+ return originalGetSigners();
90
+ };
91
+ }
92
+ });
93
+ // Override the verify task to auto-inject API keys from ArcSign
94
+ (0, config_1.task)("verify", async (taskArgs, hre, runSuper) => {
95
+ // Get the current network's chain ID
96
+ const chainId = hre.network.config.chainId;
97
+ if (chainId) {
98
+ const explorer = (0, utils_1.getExplorerForChainId)(chainId);
99
+ if (explorer) {
100
+ console.log(`[ArcSign] Checking for ${explorer} API key...`);
101
+ try {
102
+ const apiKey = await hre.arcsign.getExplorerApiKey(explorer);
103
+ if (apiKey) {
104
+ console.log(`[ArcSign] Found ${explorer} API key, injecting into config...`);
105
+ // Inject the API key into the config
106
+ // This works with both @nomiclabs/hardhat-etherscan and @nomicfoundation/hardhat-verify
107
+ const config = hre.config;
108
+ if (!config.etherscan) {
109
+ config.etherscan = { apiKey: {} };
110
+ }
111
+ const etherscanConfig = config.etherscan;
112
+ // Handle both single string and object format for apiKey
113
+ if (typeof etherscanConfig.apiKey === "string" && etherscanConfig.apiKey.length > 0) {
114
+ // If it's already a non-empty string, keep it (user configured)
115
+ console.log(`[ArcSign] API key already configured, using existing...`);
116
+ }
117
+ else if (!etherscanConfig.apiKey || etherscanConfig.apiKey === "") {
118
+ // Set as single API key if none exists or is empty
119
+ etherscanConfig.apiKey = apiKey;
120
+ console.log(`[ArcSign] Injected API key successfully`);
121
+ }
122
+ else {
123
+ // It's an object, set for the specific network
124
+ const networkKey = getEtherscanNetworkKey(chainId);
125
+ if (networkKey) {
126
+ etherscanConfig.apiKey[networkKey] = apiKey;
127
+ console.log(`[ArcSign] Injected API key for ${networkKey}`);
128
+ }
129
+ }
130
+ }
131
+ else {
132
+ console.log(`[ArcSign] No ${explorer} API key found in ArcSign settings`);
133
+ console.log(`[ArcSign] You can configure it in Developer Mode > Settings`);
134
+ }
135
+ }
136
+ catch (err) {
137
+ // Not a critical error, continue with verification
138
+ console.log(`[ArcSign] Could not fetch API key (is Dashboard running?)`);
139
+ }
140
+ }
141
+ }
142
+ // Continue with the original verify task
143
+ return runSuper(taskArgs);
144
+ });
145
+ /**
146
+ * Get the etherscan config network key for a chain ID
147
+ */
148
+ function getEtherscanNetworkKey(chainId) {
149
+ const mapping = {
150
+ // Ethereum
151
+ 1: "mainnet",
152
+ 11155111: "sepolia",
153
+ 5: "goerli",
154
+ // BSC
155
+ 56: "bsc",
156
+ 97: "bscTestnet",
157
+ // Polygon
158
+ 137: "polygon",
159
+ 80001: "polygonMumbai",
160
+ 80002: "polygonAmoy",
161
+ // Arbitrum
162
+ 42161: "arbitrumOne",
163
+ 421614: "arbitrumSepolia",
164
+ // Optimism
165
+ 10: "optimisticEthereum",
166
+ 11155420: "optimisticSepolia",
167
+ // Base
168
+ 8453: "base",
169
+ 84532: "baseSepolia",
170
+ // Avalanche
171
+ 43114: "avalanche",
172
+ 43113: "avalancheFujiTestnet",
173
+ };
174
+ return mapping[chainId] || null;
175
+ }
176
+ // Export types and classes
177
+ var ArcSignProvider_2 = require("./ArcSignProvider");
178
+ Object.defineProperty(exports, "ArcSignProvider", { enumerable: true, get: function () { return ArcSignProvider_2.ArcSignProvider; } });
179
+ var ArcSignSigner_1 = require("./ArcSignSigner");
180
+ Object.defineProperty(exports, "ArcSignSigner", { enumerable: true, get: function () { return ArcSignSigner_1.ArcSignSigner; } });
181
+ var ArcSignClient_2 = require("./ArcSignClient");
182
+ Object.defineProperty(exports, "ArcSignClient", { enumerable: true, get: function () { return ArcSignClient_2.ArcSignClient; } });
183
+ var utils_2 = require("./utils");
184
+ Object.defineProperty(exports, "getExplorerForChainId", { enumerable: true, get: function () { return utils_2.getExplorerForChainId; } });
185
+ Object.defineProperty(exports, "isTestnet", { enumerable: true, get: function () { return utils_2.isTestnet; } });
186
+ Object.defineProperty(exports, "getChainIdForNetwork", { enumerable: true, get: function () { return utils_2.getChainIdForNetwork; } });
187
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Utility functions for ArcSign Hardhat Plugin
3
+ */
4
+ /**
5
+ * Explorer name type
6
+ */
7
+ export type ExplorerName = "etherscan" | "bscscan" | "polygonscan" | "arbiscan" | "optimism" | "basescan" | "snowtrace";
8
+ /**
9
+ * Get explorer name for a given chain ID
10
+ *
11
+ * @param chainId - The blockchain chain ID
12
+ * @returns Explorer name or null if not supported
13
+ */
14
+ export declare function getExplorerForChainId(chainId: number): ExplorerName | null;
15
+ /**
16
+ * Get chain ID for network name (common network names)
17
+ *
18
+ * @param networkName - Network name (e.g., "mainnet", "sepolia", "bscTestnet")
19
+ * @returns Chain ID or null if not recognized
20
+ */
21
+ export declare function getChainIdForNetwork(networkName: string): number | null;
22
+ /**
23
+ * Check if a chain ID is a testnet
24
+ *
25
+ * @param chainId - The blockchain chain ID
26
+ * @returns True if testnet, false otherwise
27
+ */
28
+ export declare function isTestnet(chainId: number): boolean;
29
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,SAAS,GACT,aAAa,GACb,UAAU,GACV,UAAU,GACV,UAAU,GACV,WAAW,CAAC;AAqChB;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAE1E;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0CvE;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAclD"}
package/dist/utils.js ADDED
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ /**
3
+ * Utility functions for ArcSign Hardhat Plugin
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getExplorerForChainId = getExplorerForChainId;
7
+ exports.getChainIdForNetwork = getChainIdForNetwork;
8
+ exports.isTestnet = isTestnet;
9
+ /**
10
+ * Chain ID to explorer name mapping
11
+ */
12
+ const CHAIN_ID_TO_EXPLORER = {
13
+ // Etherscan (Ethereum)
14
+ 1: "etherscan", // Ethereum Mainnet
15
+ 11155111: "etherscan", // Sepolia
16
+ 5: "etherscan", // Goerli (deprecated)
17
+ // BSCScan
18
+ 56: "bscscan", // BSC Mainnet
19
+ 97: "bscscan", // BSC Testnet
20
+ // Polygonscan
21
+ 137: "polygonscan", // Polygon Mainnet
22
+ 80001: "polygonscan", // Mumbai (deprecated)
23
+ 80002: "polygonscan", // Amoy
24
+ // Arbiscan
25
+ 42161: "arbiscan", // Arbitrum One
26
+ 421614: "arbiscan", // Arbitrum Sepolia
27
+ // Optimism Etherscan
28
+ 10: "optimism", // Optimism Mainnet
29
+ 11155420: "optimism", // Optimism Sepolia
30
+ // Basescan
31
+ 8453: "basescan", // Base Mainnet
32
+ 84532: "basescan", // Base Sepolia
33
+ // Snowtrace (Avalanche)
34
+ 43114: "snowtrace", // Avalanche C-Chain
35
+ 43113: "snowtrace", // Avalanche Fuji
36
+ };
37
+ /**
38
+ * Get explorer name for a given chain ID
39
+ *
40
+ * @param chainId - The blockchain chain ID
41
+ * @returns Explorer name or null if not supported
42
+ */
43
+ function getExplorerForChainId(chainId) {
44
+ return CHAIN_ID_TO_EXPLORER[chainId] || null;
45
+ }
46
+ /**
47
+ * Get chain ID for network name (common network names)
48
+ *
49
+ * @param networkName - Network name (e.g., "mainnet", "sepolia", "bscTestnet")
50
+ * @returns Chain ID or null if not recognized
51
+ */
52
+ function getChainIdForNetwork(networkName) {
53
+ const NETWORK_TO_CHAIN_ID = {
54
+ // Ethereum
55
+ mainnet: 1,
56
+ ethereum: 1,
57
+ sepolia: 11155111,
58
+ goerli: 5,
59
+ // BSC
60
+ bsc: 56,
61
+ bscMainnet: 56,
62
+ bscTestnet: 97,
63
+ // Polygon
64
+ polygon: 137,
65
+ polygonMainnet: 137,
66
+ mumbai: 80001,
67
+ polygonAmoy: 80002,
68
+ // Arbitrum
69
+ arbitrum: 42161,
70
+ arbitrumOne: 42161,
71
+ arbitrumSepolia: 421614,
72
+ // Optimism
73
+ optimism: 10,
74
+ optimismMainnet: 10,
75
+ optimismSepolia: 11155420,
76
+ // Base
77
+ base: 8453,
78
+ baseMainnet: 8453,
79
+ baseSepolia: 84532,
80
+ // Avalanche
81
+ avalanche: 43114,
82
+ avalancheMainnet: 43114,
83
+ avalancheFuji: 43113,
84
+ fuji: 43113,
85
+ };
86
+ return NETWORK_TO_CHAIN_ID[networkName] || null;
87
+ }
88
+ /**
89
+ * Check if a chain ID is a testnet
90
+ *
91
+ * @param chainId - The blockchain chain ID
92
+ * @returns True if testnet, false otherwise
93
+ */
94
+ function isTestnet(chainId) {
95
+ const TESTNET_CHAIN_IDS = [
96
+ 5, // Goerli
97
+ 11155111, // Sepolia
98
+ 97, // BSC Testnet
99
+ 80001, // Mumbai
100
+ 80002, // Amoy
101
+ 421614, // Arbitrum Sepolia
102
+ 11155420, // Optimism Sepolia
103
+ 84532, // Base Sepolia
104
+ 43113, // Avalanche Fuji
105
+ ];
106
+ return TESTNET_CHAIN_IDS.includes(chainId);
107
+ }
108
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAuDH,sDAEC;AAQD,oDA0CC;AAQD,8BAcC;AAnHD;;GAEG;AACH,MAAM,oBAAoB,GAAiC;IACzD,uBAAuB;IACvB,CAAC,EAAE,WAAW,EAAE,mBAAmB;IACnC,QAAQ,EAAE,WAAW,EAAE,UAAU;IACjC,CAAC,EAAE,WAAW,EAAE,sBAAsB;IAEtC,UAAU;IACV,EAAE,EAAE,SAAS,EAAE,cAAc;IAC7B,EAAE,EAAE,SAAS,EAAE,cAAc;IAE7B,cAAc;IACd,GAAG,EAAE,aAAa,EAAE,kBAAkB;IACtC,KAAK,EAAE,aAAa,EAAE,sBAAsB;IAC5C,KAAK,EAAE,aAAa,EAAE,OAAO;IAE7B,WAAW;IACX,KAAK,EAAE,UAAU,EAAE,eAAe;IAClC,MAAM,EAAE,UAAU,EAAE,mBAAmB;IAEvC,qBAAqB;IACrB,EAAE,EAAE,UAAU,EAAE,mBAAmB;IACnC,QAAQ,EAAE,UAAU,EAAE,mBAAmB;IAEzC,WAAW;IACX,IAAI,EAAE,UAAU,EAAE,eAAe;IACjC,KAAK,EAAE,UAAU,EAAE,eAAe;IAElC,wBAAwB;IACxB,KAAK,EAAE,WAAW,EAAE,oBAAoB;IACxC,KAAK,EAAE,WAAW,EAAE,iBAAiB;CACtC,CAAC;AAEF;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,OAAe;IACnD,OAAO,oBAAoB,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,SAAgB,oBAAoB,CAAC,WAAmB;IACtD,MAAM,mBAAmB,GAA2B;QAClD,WAAW;QACX,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,CAAC;QAET,MAAM;QACN,GAAG,EAAE,EAAE;QACP,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,EAAE;QAEd,UAAU;QACV,OAAO,EAAE,GAAG;QACZ,cAAc,EAAE,GAAG;QACnB,MAAM,EAAE,KAAK;QACb,WAAW,EAAE,KAAK;QAElB,WAAW;QACX,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,KAAK;QAClB,eAAe,EAAE,MAAM;QAEvB,WAAW;QACX,QAAQ,EAAE,EAAE;QACZ,eAAe,EAAE,EAAE;QACnB,eAAe,EAAE,QAAQ;QAEzB,OAAO;QACP,IAAI,EAAE,IAAI;QACV,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,KAAK;QAElB,YAAY;QACZ,SAAS,EAAE,KAAK;QAChB,gBAAgB,EAAE,KAAK;QACvB,aAAa,EAAE,KAAK;QACpB,IAAI,EAAE,KAAK;KACZ,CAAC;IAEF,OAAO,mBAAmB,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC;AAClD,CAAC;AAED;;;;;GAKG;AACH,SAAgB,SAAS,CAAC,OAAe;IACvC,MAAM,iBAAiB,GAAG;QACxB,CAAC,EAAE,SAAS;QACZ,QAAQ,EAAE,UAAU;QACpB,EAAE,EAAE,cAAc;QAClB,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,mBAAmB;QAC3B,QAAQ,EAAE,mBAAmB;QAC7B,KAAK,EAAE,eAAe;QACtB,KAAK,EAAE,iBAAiB;KACzB,CAAC;IAEF,OAAO,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "@arcsign/hardhat-plugin",
3
+ "version": "1.0.0",
4
+ "description": "Hardhat plugin for secure transaction signing with ArcSign wallet - No more private keys in .env files",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist/**/*"
9
+ ],
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "clean": "rm -rf dist",
13
+ "prepare": "npm run build",
14
+ "test": "mocha --exit --recursive 'test/**/*.test.ts'",
15
+ "lint": "eslint 'src/**/*.ts'"
16
+ },
17
+ "keywords": [
18
+ "hardhat",
19
+ "hardhat-plugin",
20
+ "ethereum",
21
+ "wallet",
22
+ "signer",
23
+ "arcsign",
24
+ "hardware-wallet",
25
+ "cold-wallet",
26
+ "smart-contracts",
27
+ "security"
28
+ ],
29
+ "author": "ArcSign Team",
30
+ "license": "MIT",
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://github.com/ArcSign/arcsign.git",
34
+ "directory": "packages/hardhat-plugin"
35
+ },
36
+ "publishConfig": {
37
+ "registry": "https://registry.npmjs.org/",
38
+ "access": "public"
39
+ },
40
+ "peerDependencies": {
41
+ "ethers": "^6.0.0",
42
+ "hardhat": "^2.0.0"
43
+ },
44
+ "dependencies": {
45
+ "ws": "^8.14.0"
46
+ },
47
+ "devDependencies": {
48
+ "@types/node": "^20.0.0",
49
+ "@types/ws": "^8.5.0",
50
+ "typescript": "^5.0.0",
51
+ "hardhat": "^2.19.0",
52
+ "ethers": "^6.9.0"
53
+ }
54
+ }