-
Notifications
You must be signed in to change notification settings - Fork 30
/
hardhat.config.ts
130 lines (117 loc) · 8.19 KB
/
hardhat.config.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import {task, HardhatUserConfig} from "hardhat/config";
import "@nomicfoundation/hardhat-chai-matchers";
import "@nomiclabs/hardhat-etherscan";
import "@openzeppelin/hardhat-upgrades";
import '@typechain/hardhat'
import "hardhat-dependency-compiler";
import "solidity-coverage";
import * as dotenv from "dotenv"
import {Wallet, parseEther} from "ethers";
import {HardhatNetworkAccountUserConfig} from "hardhat/types/config";
dotenv.config();
task("erc1820", "Deploy ERC1820 contract", async (_, {ethers}) => {
if (await ethers.provider.getCode("0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24") === "0x") {
console.log("Deploy ERC1820 contract");
const [ owner,] = await ethers.getSigners();
let transaction = await owner.sendTransaction({to: "0xa990077c3205cbDf861e17Fa532eeB069cE9fF96", value: ethers.parseEther("0.08")});
await transaction.wait();
transaction = await ethers.provider.broadcastTransaction("0xf90a388085174876e800830c35008080b909e5608060405234801561001057600080fd5b506109c5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100a5576000357c010000000000000000000000000000000000000000000000000000000090048063a41e7d5111610078578063a41e7d51146101d4578063aabbb8ca1461020a578063b705676514610236578063f712f3e814610280576100a5565b806329965a1d146100aa5780633d584063146100e25780635df8122f1461012457806365ba36c114610152575b600080fd5b6100e0600480360360608110156100c057600080fd5b50600160a060020a038135811691602081013591604090910135166102b6565b005b610108600480360360208110156100f857600080fd5b5035600160a060020a0316610570565b60408051600160a060020a039092168252519081900360200190f35b6100e06004803603604081101561013a57600080fd5b50600160a060020a03813581169160200135166105bc565b6101c26004803603602081101561016857600080fd5b81019060208101813564010000000081111561018357600080fd5b82018360208201111561019557600080fd5b803590602001918460018302840111640100000000831117156101b757600080fd5b5090925090506106b3565b60408051918252519081900360200190f35b6100e0600480360360408110156101ea57600080fd5b508035600160a060020a03169060200135600160e060020a0319166106ee565b6101086004803603604081101561022057600080fd5b50600160a060020a038135169060200135610778565b61026c6004803603604081101561024c57600080fd5b508035600160a060020a03169060200135600160e060020a0319166107ef565b604080519115158252519081900360200190f35b61026c6004803603604081101561029657600080fd5b508035600160a060020a03169060200135600160e060020a0319166108aa565b6000600160a060020a038416156102cd57836102cf565b335b9050336102db82610570565b600160a060020a031614610339576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b6103428361092a565b15610397576040805160e560020a62461bcd02815260206004820152601a60248201527f4d757374206e6f7420626520616e204552433136352068617368000000000000604482015290519081900360640190fd5b600160a060020a038216158015906103b85750600160a060020a0382163314155b156104ff5760405160200180807f455243313832305f4143434550545f4d4147494300000000000000000000000081525060140190506040516020818303038152906040528051906020012082600160a060020a031663249cb3fa85846040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182600160a060020a0316600160a060020a031681526020019250505060206040518083038186803b15801561047e57600080fd5b505afa158015610492573d6000803e3d6000fd5b505050506040513d60208110156104a857600080fd5b5051146104ff576040805160e560020a62461bcd02815260206004820181905260248201527f446f6573206e6f7420696d706c656d656e742074686520696e74657266616365604482015290519081900360640190fd5b600160a060020a03818116600081815260208181526040808320888452909152808220805473ffffffffffffffffffffffffffffffffffffffff19169487169485179055518692917f93baa6efbd2244243bfee6ce4cfdd1d04fc4c0e9a786abd3a41313bd352db15391a450505050565b600160a060020a03818116600090815260016020526040812054909116151561059a5750806105b7565b50600160a060020a03808216600090815260016020526040902054165b919050565b336105c683610570565b600160a060020a031614610624576040805160e560020a62461bcd02815260206004820152600f60248201527f4e6f7420746865206d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b81600160a060020a031681600160a060020a0316146106435780610646565b60005b600160a060020a03838116600081815260016020526040808220805473ffffffffffffffffffffffffffffffffffffffff19169585169590951790945592519184169290917f605c2dbf762e5f7d60a546d42e7205dcb1b011ebc62a61736a57c9089d3a43509190a35050565b600082826040516020018083838082843780830192505050925050506040516020818303038152906040528051906020012090505b92915050565b6106f882826107ef565b610703576000610705565b815b600160a060020a03928316600081815260208181526040808320600160e060020a031996909616808452958252808320805473ffffffffffffffffffffffffffffffffffffffff19169590971694909417909555908152600284528181209281529190925220805460ff19166001179055565b600080600160a060020a038416156107905783610792565b335b905061079d8361092a565b156107c357826107ad82826108aa565b6107b85760006107ba565b815b925050506106e8565b600160a060020a0390811660009081526020818152604080832086845290915290205416905092915050565b6000808061081d857f01ffc9a70000000000000000000000000000000000000000000000000000000061094c565b909250905081158061082d575080155b1561083d576000925050506106e8565b61084f85600160e060020a031961094c565b909250905081158061086057508015155b15610870576000925050506106e8565b61087a858561094c565b909250905060018214801561088f5750806001145b1561089f576001925050506106e8565b506000949350505050565b600160a060020a0382166000908152600260209081526040808320600160e060020a03198516845290915281205460ff1615156108f2576108eb83836107ef565b90506106e8565b50600160a060020a03808316600081815260208181526040808320600160e060020a0319871684529091529020549091161492915050565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff161590565b6040517f01ffc9a7000000000000000000000000000000000000000000000000000000008082526004820183905260009182919060208160248189617530fa90519096909550935050505056fea165627a7a72305820377f4a2d4301ede9949f163f319021a6e9c687c292a5e2b2c4734c126b524e6c00291ba01820182018201820182018201820182018201820182018201820182018201820a01820182018201820182018201820182018201820182018201820182018201820");
await transaction.wait();
}
});
task("accounts", "Prints the list of accounts", async (_, {ethers}) => {
const accounts = await ethers.getSigners();
for (const account of accounts) {
console.log(account.address);
}
});
function getAccounts() {
const accounts: HardhatNetworkAccountUserConfig[] = [];
const defaultBalance = parseEther("2000000").toString();
const n = 10;
for (let i = 0; i < n; ++i) {
accounts.push({
privateKey: Wallet.createRandom().privateKey,
balance: defaultBalance
})
}
return accounts;
}
function getCustomUrl(url: string | undefined) {
if (url) {
return url;
} else {
return "http://127.0.0.1:8545"
}
}
function getCustomPrivateKey(privateKey: string | undefined) {
if (privateKey) {
return [privateKey];
} else {
return [];
}
}
function getGasPrice(gasPrice: string | undefined) {
if (gasPrice) {
return parseInt(gasPrice, 10);
} else {
return "auto";
}
}
const config: HardhatUserConfig = {
defaultNetwork: "hardhat",
solidity: {
compilers: [
{
version: '0.8.17',
settings: {
optimizer:{
enabled: true,
runs: 100
}
}
},
{
version: '0.8.26',
settings: {
optimizer: {
enabled: true,
runs: 300
}
}
}
]
},
mocha: {
timeout: 2000000
},
networks: {
hardhat: {
accounts: getAccounts(),
blockGasLimit: 12000000,
allowUnlimitedContractSize: true
},
custom: {
url: getCustomUrl(process.env.ENDPOINT),
accounts: getCustomPrivateKey(process.env.PRIVATE_KEY),
gasPrice: getGasPrice(process.env.GASPRICE)
}
},
etherscan: {
apiKey: process.env.ETHERSCAN
},
typechain: {
externalArtifacts: [
'node_modules/@openzeppelin/upgrades-core/artifacts/AdminUpgradeabilityProxy.json',
'node_modules/@openzeppelin/upgrades-core/artifacts/ProxyAdmin.json'
],
target: "ethers-v6"
},
dependencyCompiler: {
paths: [
'@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol',
],
keep: true,
}
};
export default config;