diff --git a/package.json b/package.json index 883bf173e..8339133c9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@across-protocol/sdk", "author": "UMA Team", - "version": "4.1.57", + "version": "4.1.58", "license": "AGPL-3.0", "homepage": "https://docs.across.to/reference/sdk", "files": [ diff --git a/src/utils/Multicall.ts b/src/utils/Multicall.ts index cf8315a22..73a9c77c2 100644 --- a/src/utils/Multicall.ts +++ b/src/utils/Multicall.ts @@ -43,6 +43,10 @@ const DETERMINISTIC_MULTICALL_CHAINS = [ ...Object.keys(hreNetworks).map(Number), // See test/utils/multicall.ts ]; +const PERMISSIONED_MULTICALL3_ADDRESSES = { + [CHAIN_IDs.BSC]: "0x9367CC85B16932b19ee160A7AA2B251C8606d5b4", +}; + export function getMulticallAddress(chainId: number): string | undefined { if (chainIsOPStack(chainId) || DETERMINISTIC_MULTICALL_CHAINS.includes(chainId)) { return DETERMINISTIC_MULTICALL_ADDRESS; @@ -59,6 +63,18 @@ export function getMulticall3(chainId: number, signerOrProvider: Signer | Provid return Multicall3__factory.connect(address, signerOrProvider); } +export function getPermissionedMulticall3( + chainId: number, + signerOrProvider: Signer | Provider +): Multicall3 | undefined { + const address = PERMISSIONED_MULTICALL3_ADDRESSES[chainId]; + if (!address) { + return undefined; + } + + return Multicall3__factory.connect(address, signerOrProvider); +} + export async function aggregate(multicall3: Contract, calls: Call3[], blockTag?: BlockTag): Promise { const inputs = calls.map(({ contract, method, args }) => ({ target: contract.address,