? ? hardhat可以同时编译不同版本的.sol智能合约,只需要在hardhat.config.ts或hardhat.config.js配置文件的compilers/version字段添加对应的版本号即可。比如,同时编译 solc-v0.4.26、v0.5.12、v0.6.12的sol智能合约,则新增一个compilers/version字段,在该字段里添加版本号即可。这里以hardhat v2.6.5为例进行说明。
? ? 配置文件hardhat.config.js 或 hardhat.config.ts
修改前
require("@nomiclabs/hardhat-waffle");
module.exports = {
solidity: "0.6.12", //修改此处
networks: {
localhost: {
url: "http://127.0.0.1:8545"
},
// ropsten: {
// url: `https://eth-ropsten.alchemyapi.io/v2/${ALCHEMY_API_KEY}`,
// accounts: [`0x${ROPSTEN_PRIVATE_KEY}`]
// },
}
};
修改后
require("@nomiclabs/hardhat-waffle");
module.exports = {
solidity: {
compilers: [ //可指定多个sol版本
{version: "0.4.26"},
{version: "0.5.12"},
{version: "0.6.12"}
]
},
networks: {
localhost: {
url: "http://127.0.0.1:8545"
},
// ropsten: {
// url: `https://eth-ropsten.alchemyapi.io/v2/${ALCHEMY_API_KEY}`,
// accounts: [`0x${ROPSTEN_PRIVATE_KEY}`]
// },
}
};
或者指定其硬分叉的版本
solidity: {
compilers: [
{version: "0.5.16",
settings: {
optimizer: {
enabled: true,
runs: 200,
},
evmVersion: "istanbul"
}
},
{version: "0.6.6",
settings: {
optimizer: {
enabled: true,
runs: 200,
},
evmVersion: "istanbul"
}
}
]
},
附录: 以太坊硬分叉
代号 | 时间 | 区块高度 | 修改项 |
---|
london | 2021年8月 | 12965000 | 伦敦版本,引入EIP-1559、EIP-3554、EIP-3198等协议、支持POS共识、LAY2分片 | berlin | 2021年4月 | 1224400 | 柏林版本,执行多种类型的交易,节省EVM的gas费用 | istanbul | 2019年8月 | 9069000 | 伊斯坦布尔版本,优化SNARKs和STARKs的第2层扩展解决方案性能,加强对拒绝服务的抵抗力 | constantinople | 2019年2月 | 7280000 | 君士坦丁堡版本,优化EVM的gas执行费用 | byzantium | 2017年10月 | 4370000 | 拜占庭版本,区块奖励由5ETH降到3ETH,将难度炸弹延迟1年 | spuriousDragon | 2016年11月 | 2675000 | 幻龙版本 调整操作码定价,抵御重放攻击 | tangerineWhite | 2016年10月 | 2463000 | 白橘子版本,抵御DOS攻击 | DAO | 2016年7月 | 1920000 | DAO版本,因DAO合约被黑客攻击事件,导致以太坊分裂为2条链:ETC和ETH,ETC是经典以太坊,其chainId=61,ETH是现在的mainnet主网,其chainId=1 | homestead | 2016年3月 | 1150000 | 家园版本, 是初始版本,定义了网络和服务 |
参考文献
? ? [1] 以太坊硬分叉历史 ? ? [2] hardhat编译设置 ? ? [3] 主网、测试网的chainID含义
|