You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
916 B
42 lines
916 B
import {
|
|
ChainDoesNotSupportContract,
|
|
type ChainDoesNotSupportContractErrorType,
|
|
} from '../../errors/chain.js'
|
|
import type { Chain, ChainContract } from '../../types/chain.js'
|
|
|
|
export type GetChainContractAddressErrorType =
|
|
ChainDoesNotSupportContractErrorType
|
|
|
|
export function getChainContractAddress({
|
|
blockNumber,
|
|
chain,
|
|
contract: name,
|
|
}: {
|
|
blockNumber?: bigint | undefined
|
|
chain: Chain
|
|
contract: string
|
|
}) {
|
|
const contract = (chain?.contracts as Record<string, ChainContract>)?.[name]
|
|
if (!contract)
|
|
throw new ChainDoesNotSupportContract({
|
|
chain,
|
|
contract: { name },
|
|
})
|
|
|
|
if (
|
|
blockNumber &&
|
|
contract.blockCreated &&
|
|
contract.blockCreated > blockNumber
|
|
)
|
|
throw new ChainDoesNotSupportContract({
|
|
blockNumber,
|
|
chain,
|
|
contract: {
|
|
name,
|
|
blockCreated: contract.blockCreated,
|
|
},
|
|
})
|
|
|
|
return contract.address
|
|
}
|