Skip to content

Commit

Permalink
feat: add multi-target Typechain typings build option
Browse files Browse the repository at this point in the history
Signed-off-by: Jawad Tariq <[email protected]>
  • Loading branch information
JDawg287 committed Mar 1, 2024
1 parent 79b07de commit 88ad0d4
Show file tree
Hide file tree
Showing 14 changed files with 77 additions and 31 deletions.
48 changes: 47 additions & 1 deletion hardhat.config.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,47 @@
import { HardhatUserConfig } from 'hardhat/config'
import { HardhatUserConfig, task } from 'hardhat/config'
import '@nomicfoundation/hardhat-toolbox'

enum SupportedTypechainTargets {
'ethers-v5' = 'ethers-v5',
'ethers-v6' = 'ethers-v6',
'truffle-v4' = 'truffle-v4',
'truffle-v5' = 'truffle-v5',
'web3-v1' = 'web3-v1',
}

/**
* This task overrides the original compile task to allow for setting the Typechain target
* via several methods:
* 1. Command line argument: `npx hardhat compile --typechain ethers-v5`
* 2. Environment variable: `TYPECHAIN_TARGET=ethers-v5 npx hardhat compile`
* 3. Hardhat config: `const config: HardhatUserConfig = { typechain: { target: 'ethers-v5' } }`
* @param args.typechainTarget (optional) The Typechain target to build for
*/
task(
'compile',
'Compiles the entire project, building all artifacts and custom Typechain typings'
)
.addOptionalParam('typechainTarget', 'The Typechain target to build for')
.setAction(async (args, hre, runSuper) => {
const typechainTarget =
args.typechainTarget ||
process.env.TYPECHAIN_TARGET ||
hre.config.typechain.target // default 'ethers-v6'

// Validate the Typechain target
if (!Object.values(SupportedTypechainTargets).includes(typechainTarget)) {
throw new Error(`Unsupported typechain target: ${typechainTarget}`)
}
// Override the Typechain target
hre.config.typechain.target = typechainTarget
hre.config.typechain.outDir = `typechain-types/${typechainTarget}`

// Call the original compile task
if (runSuper.isDefined) {
await runSuper(args)
}
})

const config: HardhatUserConfig = {
solidity: {
version: '0.8.9',
Expand All @@ -11,6 +52,11 @@ const config: HardhatUserConfig = {
},
},
},
typechain: {
// default 'ethers-v6'
outDir: 'typechain-types/ethers-v6',
target: 'ethers-v6',
},
}

export default config
2 changes: 1 addition & 1 deletion scripts/const-addr-deployer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import {
Wallet,
} from 'ethers'

import { ConstAddressDeployer__factory } from '../typechain-types/factories/contracts/topos-core/ConstAddressDeployer__factory'
import { ConstAddressDeployer__factory } from '../typechain-types/ethers-v6/factories/contracts/topos-core/ConstAddressDeployer__factory'

export type Arg = string | number

Expand Down
2 changes: 1 addition & 1 deletion scripts/deploy-subnet-registrator.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { computeAddress, isHexString, JsonRpcProvider, Wallet } from 'ethers'

import subnetRegistratorJSON from '../artifacts/contracts/topos-core/SubnetRegistrator.sol/SubnetRegistrator.json'
import { SubnetRegistrator__factory } from '../typechain-types/factories/contracts/topos-core/SubnetRegistrator__factory'
import { SubnetRegistrator__factory } from '../typechain-types/ethers-v6/factories/contracts/topos-core/SubnetRegistrator__factory'
import { Arg, deployContractConstant } from './const-addr-deployer'

const main = async function (..._args: Arg[]) {
Expand Down
6 changes: 3 additions & 3 deletions scripts/deploy-topos-core.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { isHexString, JsonRpcProvider, Wallet } from 'ethers'

import { ToposCore__factory } from '../typechain-types/factories/contracts/topos-core/ToposCore__factory'
import { ToposCoreProxy__factory } from '../typechain-types/factories/contracts/topos-core/ToposCoreProxy__factory'
import { ToposCore } from '../typechain-types/contracts/topos-core/ToposCore'
import { ToposCore__factory } from '../typechain-types/ethers-v6/factories/contracts/topos-core/ToposCore__factory'
import { ToposCoreProxy__factory } from '../typechain-types/ethers-v6/factories/contracts/topos-core/ToposCoreProxy__factory'
import { ToposCore } from '../typechain-types/ethers-v6/contracts/topos-core/ToposCore'

const main = async function (...args: string[]) {
const [_providerEndpoint, _sequencerPrivateKey, _gasLimit] = args
Expand Down
10 changes: 5 additions & 5 deletions scripts/deploy-topos-msg-protocol-dynamic.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { isHexString, JsonRpcProvider, Wallet } from 'ethers'

import { TokenDeployer__factory } from '../typechain-types/factories/contracts/topos-core/TokenDeployer__factory'
import { ToposCore__factory } from '../typechain-types/factories/contracts/topos-core/ToposCore__factory'
import { ToposCoreProxy__factory } from '../typechain-types/factories/contracts/topos-core/ToposCoreProxy__factory'
import { ERC20Messaging__factory } from '../typechain-types/factories/contracts/examples/ERC20Messaging__factory'
import { ToposCore } from '../typechain-types/contracts/topos-core/ToposCore'
import { TokenDeployer__factory } from '../typechain-types/ethers-v6/factories/contracts/topos-core/TokenDeployer__factory'
import { ToposCore__factory } from '../typechain-types/ethers-v6/factories/contracts/topos-core/ToposCore__factory'
import { ToposCoreProxy__factory } from '../typechain-types/ethers-v6/factories/contracts/topos-core/ToposCoreProxy__factory'
import { ERC20Messaging__factory } from '../typechain-types/ethers-v6/factories/contracts/examples/ERC20Messaging__factory'
import { ToposCore } from '../typechain-types/ethers-v6/contracts/topos-core/ToposCore'

const main = async function (...args: string[]) {
const [providerEndpoint, _sequencerPrivateKey] = args
Expand Down
4 changes: 2 additions & 2 deletions scripts/deploy-topos-msg-protocol.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import {
deployContractConstant,
predictContractConstant,
} from './const-addr-deployer'
import { ToposCore__factory } from '../typechain-types/factories/contracts/topos-core/ToposCore__factory'
import { ToposCore } from '../typechain-types/contracts/topos-core/ToposCore'
import { ToposCore__factory } from '../typechain-types/ethers-v6/factories/contracts/topos-core/ToposCore__factory'
import { ToposCore } from '../typechain-types/ethers-v6/contracts/topos-core/ToposCore'

const main = async function (...args: string[]) {
const [providerEndpoint, _sequencerPrivateKey] = args
Expand Down
4 changes: 2 additions & 2 deletions scripts/register-subnet.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { isHexString, JsonRpcProvider, Wallet } from 'ethers'

import { SubnetRegistrator__factory } from '../typechain-types/factories/contracts/topos-core/SubnetRegistrator__factory'
import { SubnetRegistrator } from '../typechain-types/contracts/topos-core/SubnetRegistrator'
import { SubnetRegistrator__factory } from '../typechain-types/ethers-v6/factories/contracts/topos-core/SubnetRegistrator__factory'
import { SubnetRegistrator } from '../typechain-types/ethers-v6/contracts/topos-core/SubnetRegistrator'

const main = async function (...args: string[]) {
const [
Expand Down
6 changes: 3 additions & 3 deletions scripts/test/send-token.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { isHexString, JsonRpcProvider, Wallet } from 'ethers'
import { ERC20Messaging__factory } from '../../typechain-types/factories/contracts/examples/ERC20Messaging__factory'
import { BurnableMintableCappedERC20__factory } from '../../typechain-types/factories/contracts/topos-core/BurnableMintableCappedERC20__factory'
import { ERC20Messaging } from '../../typechain-types/contracts/examples/ERC20Messaging'
import { ERC20Messaging__factory } from '../../typechain-types/ethers-v6/factories/contracts/examples/ERC20Messaging__factory'
import { BurnableMintableCappedERC20__factory } from '../../typechain-types/ethers-v6/factories/contracts/topos-core/BurnableMintableCappedERC20__factory'
import { ERC20Messaging } from '../../typechain-types/ethers-v6/contracts/examples/ERC20Messaging'
import * as cc from '../../test/topos-core/shared/constants/certificates'
import * as tc from '../../test/topos-core/shared/constants/tokens'
import * as testUtils from '../../test/topos-core/shared/utils/common'
Expand Down
4 changes: 2 additions & 2 deletions scripts/upgrade-topos-core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import {
Wallet,
} from 'ethers'

import { ToposCore__factory } from '../typechain-types/factories/contracts/topos-core/ToposCore__factory'
import { CodeHash__factory } from '../typechain-types/factories/contracts/topos-core/CodeHash__factory'
import { ToposCore__factory } from '../typechain-types/ethers-v6/factories/contracts/topos-core/ToposCore__factory'
import { CodeHash__factory } from '../typechain-types/ethers-v6/factories/contracts/topos-core/CodeHash__factory'

import toposCoreJSON from '../artifacts/contracts/topos-core/ToposCore.sol/ToposCore.json'

Expand Down
4 changes: 2 additions & 2 deletions test/topos-core/BurnableMintableCappedERC20.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import { EventLog } from 'ethers'
import { expect } from 'chai'
import { ethers } from 'hardhat'

import { BurnableMintableCappedERC20__factory } from '../../typechain-types/factories/contracts/topos-core/BurnableMintableCappedERC20__factory'
import { TokenDeployer__factory } from '../../typechain-types/factories/contracts/topos-core/TokenDeployer__factory'
import { BurnableMintableCappedERC20__factory } from '../../typechain-types/ethers-v6/factories/contracts/topos-core/BurnableMintableCappedERC20__factory'
import { TokenDeployer__factory } from '../../typechain-types/ethers-v6/factories/contracts/topos-core/TokenDeployer__factory'
import * as tc from './shared/constants/tokens'

describe('BurnableMintableCappedERC20', () => {
Expand Down
4 changes: 2 additions & 2 deletions test/topos-core/Bytes32Sets.test.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { ethers } from 'hardhat'
import { expect } from 'chai'

import { Bytes32SetsTest__factory } from '../../typechain-types/factories/contracts/topos-core/Bytes32Sets.sol/Bytes32SetsTest__factory'
import { Bytes32SetsTest } from '../../typechain-types/contracts/topos-core/Bytes32Sets.sol/Bytes32SetsTest'
import { Bytes32SetsTest__factory } from '../../typechain-types/ethers-v6/factories/contracts/topos-core/Bytes32Sets.sol/Bytes32SetsTest__factory'
import { Bytes32SetsTest } from '../../typechain-types/ethers-v6/contracts/topos-core/Bytes32Sets.sol/Bytes32SetsTest'

describe('Bytes32Sets', () => {
let bytes32SetsTest: Bytes32SetsTest
Expand Down
4 changes: 2 additions & 2 deletions test/topos-core/SubnetRegistrator.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import { Signer } from 'ethers'
import { ethers } from 'hardhat'
import { expect } from 'chai'

import { SubnetRegistrator__factory } from '../../typechain-types/factories/contracts/topos-core/SubnetRegistrator__factory'
import { SubnetRegistrator } from '../../typechain-types'
import { SubnetRegistrator__factory } from '../../typechain-types/ethers-v6/factories/contracts/topos-core/SubnetRegistrator__factory'
import { SubnetRegistrator } from '../../typechain-types/ethers-v6'

describe('SubnetRegistrator', () => {
const chainId = 1
Expand Down
8 changes: 4 additions & 4 deletions test/topos-core/ToposCore.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ import { loadFixture } from '@nomicfoundation/hardhat-network-helpers'
import { ethers } from 'hardhat'
import { expect } from 'chai'

import { ToposCore__factory } from '../../typechain-types/factories/contracts/topos-core/ToposCore__factory'
import { ToposCoreProxy__factory } from '../../typechain-types/factories/contracts/topos-core/ToposCoreProxy__factory'
import { CodeHash__factory } from '../../typechain-types/factories/contracts/topos-core/CodeHash__factory'
import { ToposCoreProxy } from '../../typechain-types/contracts/topos-core/ToposCoreProxy'
import { ToposCore__factory } from '../../typechain-types/ethers-v6/factories/contracts/topos-core/ToposCore__factory'
import { ToposCoreProxy__factory } from '../../typechain-types/ethers-v6/factories/contracts/topos-core/ToposCoreProxy__factory'
import { CodeHash__factory } from '../../typechain-types/ethers-v6/factories/contracts/topos-core/CodeHash__factory'
import { ToposCoreProxy } from '../../typechain-types/ethers-v6/contracts/topos-core/ToposCoreProxy'
import * as cc from './shared/constants/certificates'
import * as testUtils from './shared/utils/common'

Expand Down
2 changes: 1 addition & 1 deletion test/topos-core/ToposMessaging.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import {
ToposCoreProxy__factory,
ERC20Messaging__factory,
ERC20Messaging,
} from '../../typechain-types'
} from '../../typechain-types/ethers-v6'
import * as cc from './shared/constants/certificates'
import * as testUtils from './shared/utils/common'
import { getReceiptMptProof } from './shared/utils/mpt_proof'
Expand Down

0 comments on commit 88ad0d4

Please sign in to comment.