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

feature: allow overriding module address #118

Merged
merged 12 commits into from
Jan 21, 2025
Merged
131 changes: 131 additions & 0 deletions src/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
import { Address } from 'viem'

export const ACCOUNT_LOCKER_HOOK = '0x97fbddd688327229eb193e824c8466d0c8c848fb'
export const ACCOUNT_LOCKER_SOURCE_EXECUTOR =
'0x868E00ae42214a5a1BB2d01aE1587c8814cF45BB'
export const ACCOUNT_LOCKER_TARGET_EXECUTOR =
'0xaffd5668449271Ce63B2a37fB0631f3B27F053b8'
export const AUTO_SAVINGS_ADDRESS: Address =
'0x6AE48bD83B6bdc8489584Ea0814086f963d1BD95'
export const CANCEL_EXPIRED_RECOVERY_COOLDOWN = 24 * 60 * 60 // 1 day in seconds
Dhruv-Mishra marked this conversation as resolved.
Show resolved Hide resolved
export const COLD_STORAGE_FLASHLOAN_ADDRESS: Address =
'0x4422dbC3D055D59ee08F4A4D60E1046A9aFb287f'
export const COLD_STORAGE_HOOK_ADDRESS: Address =
'0x7E31543b269632ddc55a23553f902f84C9DD8454'
export const DEADMAN_SWITCH_ADDRESS: Address =
'0x8bAdE54bca47199B6732EB2F92318DD666bdE413'
export const HOOK_MULTI_PLEXER_ADDRESS: Address =
'0xF6782ed057F95f334D04F0Af1Af4D14fb84DE549'
export const INDEXER_URL =
Dhruv-Mishra marked this conversation as resolved.
Show resolved Hide resolved
'https://indexer.bigdevenergy.link/c03b38d/v1/graphql'
export const MAX_NUMBER_OF_GUARDIANS = 32
export const MAX_VALIDATORS = 32
export const MINIMUM_RECOVERY_WINDOW = 2 * 24 * 60 * 60 // 2 days in seconds
export const MOCK_ATTESTER_ADDRESS: Address =
Dhruv-Mishra marked this conversation as resolved.
Show resolved Hide resolved
'0xA4C777199658a41688E9488c4EcbD7a2925Cc23A'
export const MULTI_FACTOR_VALIDATOR_ADDRESS: Address =
'0xf6bDf42c9BE18cEcA5C06c42A43DAf7FBbe7896b'
export const OWNABLE_EXECUTOR_ADDRESS: Address =
'0x4Fd8d57b94966982B62e9588C27B4171B55E8354'
export const OWNABLE_VALIDATOR_ADDRESS: Address =
'0x2483DA3A338895199E5e538530213157e931Bf06'
export const REGISTRY_ADDRESS: Address =
'0x000000000069E2a187AEFFb852bF3cCdC95151B2'
export const REGISTRY_HOOK_ADDRESS: Address =
'0x0ac6160DBA30d665cCA6e6b6a2CDf147DC3dED22'
export const RHINESTONE_ATTESTER_ADDRESS: Address =
Dhruv-Mishra marked this conversation as resolved.
Show resolved Hide resolved
'0x000000333034E9f539ce08819E12c1b8Cb29084d'
export const SCHEDULED_ORDERS_EXECUTOR_ADDRESS: Address =
'0x40dc90D670C89F322fa8b9f685770296428DCb6b'
export const SCHEDULED_TRANSFERS_EXECUTOR_ADDRESS: Address =
'0xA8E374779aeE60413c974b484d6509c7E4DDb6bA'
export const SENTINEL_ADDRESS: Address =
Dhruv-Mishra marked this conversation as resolved.
Show resolved Hide resolved
'0x0000000000000000000000000000000000000001'
export const SMART_SESSIONS_ADDRESS: Address =
'0x00000000002B0eCfbD0496EE71e01257dA0E37DE'
export const SMART_SESSIONS_COMPATIBILITY_FALLBACK_ADDRESS: Address =
'0xBad7E91C4F2803978cd6c7C3Fe80B5Fd7f7B0b50'
export const SOCIAL_RECOVERY_ADDRESS: Address =
'0xA04D053b3C8021e8D5bF641816c42dAA75D8b597'
export const UNIVERSAL_EMAIL_RECOVERY_ADDRESS__BASE: Address =
'0x36A470159F8170ad262B9518095a9FeD0824e7dD'
export const UNIVERSAL_EMAIL_RECOVERY_ADDRESS__ETH_SEPOLIA: Address =
'0x8ECcb707C4770239D7e95743cd01aaA72d6D313E'
export const WEBAUTHN_VALIDATOR_ADDRESS: Address =
'0xD990393C670dCcE8b4d8F858FB98c9912dBFAa06'

export const DEFAULT_CONSTANTS = {
Dhruv-Mishra marked this conversation as resolved.
Show resolved Hide resolved
ACCOUNT_LOCKER_HOOK,
ACCOUNT_LOCKER_SOURCE_EXECUTOR,
ACCOUNT_LOCKER_TARGET_EXECUTOR,
AUTO_SAVINGS_ADDRESS,
CANCEL_EXPIRED_RECOVERY_COOLDOWN,
COLD_STORAGE_FLASHLOAN_ADDRESS,
COLD_STORAGE_HOOK_ADDRESS,
DEADMAN_SWITCH_ADDRESS,
HOOK_MULTI_PLEXER_ADDRESS,
INDEXER_URL,
MAX_NUMBER_OF_GUARDIANS,
MAX_VALIDATORS,
MINIMUM_RECOVERY_WINDOW,
MOCK_ATTESTER_ADDRESS,
MULTI_FACTOR_VALIDATOR_ADDRESS,
OWNABLE_EXECUTOR_ADDRESS,
OWNABLE_VALIDATOR_ADDRESS,
REGISTRY_ADDRESS,
REGISTRY_HOOK_ADDRESS,
RHINESTONE_ATTESTER_ADDRESS,
SCHEDULED_ORDERS_EXECUTOR_ADDRESS,
SCHEDULED_TRANSFERS_EXECUTOR_ADDRESS,
SENTINEL_ADDRESS,
SMART_SESSIONS_ADDRESS,
SMART_SESSIONS_COMPATIBILITY_FALLBACK_ADDRESS,
SOCIAL_RECOVERY_ADDRESS,
UNIVERSAL_EMAIL_RECOVERY_ADDRESS__BASE,
UNIVERSAL_EMAIL_RECOVERY_ADDRESS__ETH_SEPOLIA,
WEBAUTHN_VALIDATOR_ADDRESS,
} as const

export let GLOBAL_CONSTANTS = {
ACCOUNT_LOCKER_HOOK,
ACCOUNT_LOCKER_SOURCE_EXECUTOR,
ACCOUNT_LOCKER_TARGET_EXECUTOR,
AUTO_SAVINGS_ADDRESS,
CANCEL_EXPIRED_RECOVERY_COOLDOWN,
COLD_STORAGE_FLASHLOAN_ADDRESS,
COLD_STORAGE_HOOK_ADDRESS,
DEADMAN_SWITCH_ADDRESS,
HOOK_MULTI_PLEXER_ADDRESS,
INDEXER_URL,
MAX_NUMBER_OF_GUARDIANS,
MAX_VALIDATORS,
MINIMUM_RECOVERY_WINDOW,
MOCK_ATTESTER_ADDRESS,
MULTI_FACTOR_VALIDATOR_ADDRESS,
OWNABLE_EXECUTOR_ADDRESS,
OWNABLE_VALIDATOR_ADDRESS,
REGISTRY_ADDRESS,
REGISTRY_HOOK_ADDRESS,
RHINESTONE_ATTESTER_ADDRESS,
SCHEDULED_ORDERS_EXECUTOR_ADDRESS,
SCHEDULED_TRANSFERS_EXECUTOR_ADDRESS,
SENTINEL_ADDRESS,
SMART_SESSIONS_ADDRESS,
SMART_SESSIONS_COMPATIBILITY_FALLBACK_ADDRESS,
SOCIAL_RECOVERY_ADDRESS,
UNIVERSAL_EMAIL_RECOVERY_ADDRESS__BASE,
UNIVERSAL_EMAIL_RECOVERY_ADDRESS__ETH_SEPOLIA,
WEBAUTHN_VALIDATOR_ADDRESS,
}

export const setGlobalConstants = (
overrides: Partial<typeof DEFAULT_CONSTANTS>,
): void => {
GLOBAL_CONSTANTS = { ...GLOBAL_CONSTANTS, ...overrides }
}

export const getModifiedConstants = (
overrides?: Partial<typeof DEFAULT_CONSTANTS>,
): typeof GLOBAL_CONSTANTS => {
return { ...GLOBAL_CONSTANTS, ...overrides }
}
7 changes: 7 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -215,3 +215,10 @@ export {
getScheduledOrders,
getScheduledOrderByJobId,
} from './common'

export {
DEFAULT_CONSTANTS,
GLOBAL_CONSTANTS,
setGlobalConstants,
getModifiedConstants,
} from './constants'
17 changes: 8 additions & 9 deletions src/module/cold-storage/installation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,10 @@ import {
PublicClient,
} from 'viem'
import { Module } from '../types'
import {
COLD_STORAGE_HOOK_ADDRESS,
COLD_STORAGE_FLASHLOAN_ADDRESS,
} from './constants'
import { Account } from '../../account'
import { getInstalledModules } from '../../account'
import { CallType } from '../../module/types'
import { GLOBAL_CONSTANTS } from '../../constants'

type Params = {
account: Account
Expand All @@ -33,13 +30,15 @@ export const getColdStorageHook = async ({
}: Params): Promise<Module> => {
const installedModules = await getInstalledModules({ account, client })

const initData = installedModules.includes(COLD_STORAGE_HOOK_ADDRESS)
const initData = installedModules.includes(
GLOBAL_CONSTANTS.COLD_STORAGE_HOOK_ADDRESS,
)
? '0x'
: encodePacked(['uint128', 'address'], [BigInt(waitPeriod), owner])

return {
address: COLD_STORAGE_HOOK_ADDRESS,
module: COLD_STORAGE_HOOK_ADDRESS,
address: GLOBAL_CONSTANTS.COLD_STORAGE_HOOK_ADDRESS,
module: GLOBAL_CONSTANTS.COLD_STORAGE_HOOK_ADDRESS,
initData,
deInitData: '0x',
additionalContext: '0x',
Expand All @@ -64,8 +63,8 @@ export const getAllowedCallbackSenders = ({
hook,
}: FlashloanParams): Module => {
return {
address: COLD_STORAGE_FLASHLOAN_ADDRESS,
module: COLD_STORAGE_FLASHLOAN_ADDRESS,
address: GLOBAL_CONSTANTS.COLD_STORAGE_FLASHLOAN_ADDRESS,
module: GLOBAL_CONSTANTS.COLD_STORAGE_FLASHLOAN_ADDRESS,
initData: encodeAbiParameters(
[{ internalType: 'address[]', name: 'addresses', type: 'address[]' }],
[addresses],
Expand Down
43 changes: 35 additions & 8 deletions test/unit/module/coldStorage/coldStorage.test.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
import {
COLD_STORAGE_HOOK_ADDRESS,
COLD_STORAGE_FLASHLOAN_ADDRESS,
getColdStorageSetWaitPeriodAction,
getColdStorageExecutionTime,
getRequestTimelockedExecution,
getRequestTimelockedModuleConfigExecution,
getFlashloanAddAddressAction,
getFlashloanRemoveAddressAction,
getFlashloanWhitelist,
COLD_STORAGE_HOOK_ADDRESS,
} from 'src'
import { Address, toHex } from 'viem'
import { getClient } from 'src'
Expand All @@ -16,6 +15,7 @@ import { getAccount } from 'src'
import { MockAccountDeployed } from '../../../utils/mocks/account'
import { getColdStorageHook, getAllowedCallbackSenders } from 'src/module'
import { CallType } from 'src/module/types'
import { GLOBAL_CONSTANTS, setGlobalConstants } from 'src'

describe('Cold storage Module', () => {
// Setup
Expand All @@ -33,7 +33,9 @@ describe('Cold storage Module', () => {
waitPeriod: 100,
})

expect(installColdStorageModule.module).toEqual(COLD_STORAGE_HOOK_ADDRESS)
expect(installColdStorageModule.module).toEqual(
GLOBAL_CONSTANTS.COLD_STORAGE_HOOK_ADDRESS,
)
expect(installColdStorageModule.initData).toBeDefined()
expect(installColdStorageModule.type).toEqual('hook')
})
Expand All @@ -46,7 +48,7 @@ describe('Cold storage Module', () => {
})

expect(installColdStorageFlashloanModule.module).toEqual(
COLD_STORAGE_FLASHLOAN_ADDRESS,
GLOBAL_CONSTANTS.COLD_STORAGE_FLASHLOAN_ADDRESS,
)
expect(installColdStorageFlashloanModule.initData).toBeDefined()
expect(installColdStorageFlashloanModule.type).toEqual('fallback')
Expand All @@ -57,7 +59,9 @@ describe('Cold storage Module', () => {
waitPeriod: 100,
})

expect(setWaitPeriodExecution.target).toEqual(COLD_STORAGE_HOOK_ADDRESS)
expect(setWaitPeriodExecution.target).toEqual(
GLOBAL_CONSTANTS.COLD_STORAGE_HOOK_ADDRESS,
)
expect(setWaitPeriodExecution.value).toEqual(BigInt(0))
expect(setWaitPeriodExecution.callData).toBeDefined()
})
Expand All @@ -84,7 +88,9 @@ describe('Cold storage Module', () => {
additionalWait: 100,
})

expect(requestTimelockedExecution.target).toEqual(COLD_STORAGE_HOOK_ADDRESS)
expect(requestTimelockedExecution.target).toEqual(
GLOBAL_CONSTANTS.COLD_STORAGE_HOOK_ADDRESS,
)
expect(requestTimelockedExecution.value).toEqual(BigInt(0))
expect(requestTimelockedExecution.callData).toBeDefined()
})
Expand All @@ -100,7 +106,7 @@ describe('Cold storage Module', () => {
})

expect(requestTimelockedModuleConfig.target).toEqual(
COLD_STORAGE_HOOK_ADDRESS,
GLOBAL_CONSTANTS.COLD_STORAGE_HOOK_ADDRESS,
)
expect(requestTimelockedModuleConfig.value).toEqual(BigInt(0))
expect(requestTimelockedModuleConfig.callData).toBeDefined()
Expand All @@ -111,7 +117,9 @@ describe('Cold storage Module', () => {
addressToAdd: account.address,
})

expect(addAddressExecution.target).toEqual(COLD_STORAGE_FLASHLOAN_ADDRESS)
expect(addAddressExecution.target).toEqual(
GLOBAL_CONSTANTS.COLD_STORAGE_FLASHLOAN_ADDRESS,
)
expect(addAddressExecution.value).toEqual(BigInt(0))
expect(addAddressExecution.callData).toBeDefined()
})
Expand All @@ -136,4 +144,23 @@ describe('Cold storage Module', () => {

expect(whitelistAddresses.length).toEqual(0)
})

it('setGlobalConstants should update COLD_STORAGE_HOOK_ADDRESS', async () => {
expect(GLOBAL_CONSTANTS.COLD_STORAGE_HOOK_ADDRESS).toEqual(
COLD_STORAGE_HOOK_ADDRESS,
)
const mockAddress: Address = '0x0Cb7EAb54EB751579a82D80Fe2683687zec911g0'

setGlobalConstants({ COLD_STORAGE_HOOK_ADDRESS: mockAddress })

expect(GLOBAL_CONSTANTS.COLD_STORAGE_HOOK_ADDRESS).not.toEqual(
COLD_STORAGE_HOOK_ADDRESS,
)
expect(GLOBAL_CONSTANTS.COLD_STORAGE_HOOK_ADDRESS).toEqual(mockAddress)

setGlobalConstants({ COLD_STORAGE_HOOK_ADDRESS: COLD_STORAGE_HOOK_ADDRESS })
expect(GLOBAL_CONSTANTS.COLD_STORAGE_HOOK_ADDRESS).toEqual(
COLD_STORAGE_HOOK_ADDRESS,
)
})
})
Loading