UNPKG

arb-upgrades

Version:

125 lines (111 loc) 3.75 kB
export interface QueuedUpdate { address: string deployTxn: string arbitrumCommitHash: string buildInfo: string } export interface CurrentDeployment { proxyAddress: string implAddress: string implDeploymentTxn: string implArbitrumCommitHash: string implBuildInfo: string } export type QueuedUpdates = { [key in ContractNames]?: QueuedUpdate } export interface CurrentDeployments { proxyAdminAddress: string contracts: { [key in ContractNames]: CurrentDeployment } } export enum ContractNames { L1GatewayRouter = 'L1GatewayRouter', L1ERC20Gateway = 'L1ERC20Gateway', L1CustomGateway = 'L1CustomGateway', L1WethGateway = 'L1WethGateway', L2ERC20Gateway = 'L2ERC20Gateway', L2GatewayRouter = 'L2GatewayRouter', L2CustomGateway = 'L2CustomGateway', L2WethGateway = 'L2WethGateway', StandardArbERC20 = 'StandardArbERC20', Rollup = 'Rollup', RollupAdminFacet = 'RollupAdminFacet', RollupUserFacet = 'RollupUserFacet', RollupEventBridge = 'RollupEventBridge', Node = 'Node', Challenge = 'Challenge', OneStepProof = 'OneStepProof', OneStepProof2 = 'OneStepProof2', OneStepProofHash = 'OneStepProofHash', Inbox = 'Inbox', Bridge = 'Bridge', SequencerInbox = 'SequencerInbox', Outbox = 'Outbox', OutboxEntry = 'OutboxEntry', } export enum UpgradeableType { BeaconOwnedByEOA = 'BeaconOwnedByEOA', BeaconOwnedByRollup = 'BeaconOwnedByRollup', TransparentProxy = 'TransparentProxy', Proxy = 'Proxy', RollupUserFacet = 'RollupUserFacet', RollupAdminFacet = 'RollupAdminFacet', } export const proxyType = (contractName: ContractNames): UpgradeableType => { switch (contractName) { case ContractNames.StandardArbERC20: return UpgradeableType.BeaconOwnedByEOA case ContractNames.Node: case ContractNames.Challenge: case ContractNames.OutboxEntry: return UpgradeableType.BeaconOwnedByRollup case ContractNames.RollupAdminFacet: return UpgradeableType.RollupAdminFacet case ContractNames.RollupUserFacet: return UpgradeableType.RollupUserFacet default: return UpgradeableType.TransparentProxy } } export const isBeacon = (contractName: ContractNames): boolean => isBeaconOwnedByEOA(contractName) || isBeaconOwnedByRollup(contractName) export const isBeaconOwnedByEOA = (contractName: ContractNames): boolean => proxyType(contractName) === UpgradeableType.BeaconOwnedByEOA export const isBeaconOwnedByRollup = (contractName: ContractNames): boolean => proxyType(contractName) === UpgradeableType.BeaconOwnedByRollup export const isRollupUserFacet = (contractName: ContractNames): boolean => proxyType(contractName) === UpgradeableType.RollupUserFacet export const isRollupAdminFacet = (contractName: ContractNames): boolean => proxyType(contractName) === UpgradeableType.RollupAdminFacet export const getLayer = (contractName: ContractNames): 2 | 1 => { switch (contractName) { case 'L2ERC20Gateway': case 'L2GatewayRouter': case 'L2WethGateway': case 'L2CustomGateway': case 'StandardArbERC20': return 2 default: return 1 } } export const hasPostInitHook = (contractName: ContractNames): boolean => { switch (contractName) { case ContractNames.L1GatewayRouter: case ContractNames.L1ERC20Gateway: case ContractNames.L1CustomGateway: case ContractNames.L1WethGateway: case ContractNames.L2ERC20Gateway: case ContractNames.L2GatewayRouter: case ContractNames.L2CustomGateway: case ContractNames.L2WethGateway: case ContractNames.Rollup: case ContractNames.SequencerInbox: // case ContractNames.Inbox: // Uncomment if upgrading to Inbox with postInitHook return true default: return false } }