Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(contracts): add aliases for latest versions of the contracts #13484

Merged
merged 11 commits into from Mar 20, 2024
22 changes: 14 additions & 8 deletions packages/contracts/src/index.ts
Expand Up @@ -37,9 +37,9 @@ import UnlockDiscountTokenV3 from './abis/UnlockDiscountToken/UnlockDiscountToke
import GovernorUnlockProtocol from './abis/Governor/UnlockProtocolGovernor.json'
import GovernorUnlockProtocolTimelock from './abis/Governor/UnlockProtocolTimelock.json'
import LockSerializer from './abis/utils/LockSerializer.json'
import UnlockSwapPurchaser from './abis/utils/UnlockSwapPurchaser.json'
import UnlockSwapBurner from './abis/utils/UnlockSwapBurner.json'
import UniswapOracleV3 from './abis/utils/UniswapOracleV3.json'
import UnlockSwapBurner from './abis/utils/UnlockSwapBurner.json'
import UnlockSwapPurchaser from './abis/utils/UnlockSwapPurchaser.json'

// exports
export { PublicLockV0 }
Expand Down Expand Up @@ -77,9 +77,15 @@ export { UnlockDiscountTokenV2 }
export { UnlockDiscountTokenV3 }
export { GovernorUnlockProtocol }
export { GovernorUnlockProtocolTimelock }
export {
LockSerializer,
UnlockSwapPurchaser,
UnlockSwapBurner,
UniswapOracleV3,
}
Copy link
Member Author

@clemsos clemsos Mar 18, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removing that file should fix the annoying build issue with git staged lint

export { LockSerializer }
export { UniswapOracleV3 }
export { UnlockSwapBurner }
export { UnlockSwapPurchaser }

// latest
export { PublicLockV14 as PublicLock }
const PUBLICLOCK_LATEST_VERSION = 14
export { PUBLICLOCK_LATEST_VERSION }
export { UnlockV13 as Unlock }
const UNLOCK_LATEST_VERSION = 13
export { UNLOCK_LATEST_VERSION }
1 change: 1 addition & 0 deletions packages/contracts/src/utils/files.ts
Expand Up @@ -36,6 +36,7 @@ export const getAbiPaths = async () => {
'abis/Unlock',
'abis/UnlockDiscountToken',
'abis/Governor',
'abis/utils',
]

const paths = await Promise.all(folders.map((f) => parseExports(f)))
Expand Down
56 changes: 38 additions & 18 deletions packages/contracts/src/utils/parser.ts
@@ -1,11 +1,39 @@
import { getAbiPaths } from './files'

type contractVersion = {
contractName: string
versionNumber: string
abiPath: string
}

const findLatest = (exports: contractVersion[], contract: string) => {
const [latest] = exports
.filter(({ contractName }) => contractName === contract)
.sort(
({ versionNumber: a }, { versionNumber: b }) =>
parseInt(b.replace('V', '')) - parseInt(a.replace('V', ''))
)
const { contractName, versionNumber } = latest
const varName = `${contract.toLocaleUpperCase()}_LATEST_VERSION`
const versionInt = versionNumber.replace('V', '')

console.log(`export { ${contractName}${versionNumber} as ${contract} }`)
console.log(`const ${varName} = ${versionInt}`)
console.log(`export { ${varName} }`)
return latest
}

async function main() {
const paths = await getAbiPaths()
const exports = paths.flat().map((abiPath) => {
const s = abiPath.split('/')
const contractName = s[2]
const versionNumber = s[3].replace(contractName, '').replace('.json', '')
const exports: contractVersion[] = paths.flat().map((abiPath) => {
let contractName, fileName, versionNumber
if (abiPath.includes('/utils/')) {
;[, , , fileName] = abiPath.split('/')
contractName = fileName.replace('.json', '')
} else {
;[, , contractName, fileName] = abiPath.split('/')
versionNumber = fileName.replace(contractName, '').replace('.json', '')
}
return {
contractName,
versionNumber,
Expand All @@ -16,28 +44,20 @@ async function main() {
console.log("// This file is generated, please don't edit directly")
console.log("// Refer to 'utils/parser.ts' and 'yarn build:index' for more\n")

exports.forEach(({ contractName, versionNumber, abiPath }) =>
exports.forEach(({ contractName, versionNumber = '', abiPath }) =>
console.log(`import ${contractName}${versionNumber} from '${abiPath}'`)
)

const utils = [
'LockSerializer',
'UnlockSwapPurchaser',
'UnlockSwapBurner',
'UniswapOracleV3',
]

utils.forEach((util) => {
console.log(`import ${util} from './abis/utils/${util}.json'`)
})

console.log('\n// exports')

exports.forEach(({ contractName, versionNumber }) =>
exports.forEach(({ contractName, versionNumber = '' }) =>
console.log(`export { ${contractName}${versionNumber} }`)
)

console.log(`export { ${utils.toString()} }`)
// alias for the newest versions
console.log('\n// latest')
findLatest(exports, 'PublicLock')
findLatest(exports, 'Unlock')
}

main()
Expand Down