1
0
forked from mico/idle_moloch
idle_moloch/lib/Baal/test/utils/safe.ts
2024-11-01 11:55:27 +01:00

50 lines
1.4 KiB
TypeScript

import { ethers } from "hardhat";
import { GnosisSafeProxyFactory } from "../../src/types";
export const getSaltNonce = (length = 24) => {
let text = '';
const possible = '0123456789';
for (let i = 0; i < length; i++) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return text;
};
const getSafeAddressFromRevertMessage = (e: any): string => {
if (e.error.data) {
return ethers.utils.getAddress(e.error.data.slice(138, 178));
}
const messages: string[] = e.error.split(' ');
return messages.find((m) => m.match(/^0x[a-fA-F0-9]{40,44}$/))?.replace(',', '') ?? ethers.constants.AddressZero;
};
export const calculateSafeProxyAddress = async ({
gnosisSafeProxyFactory,
initializer = "0x",
masterCopyAddress,
saltNonce,
} : {
gnosisSafeProxyFactory: GnosisSafeProxyFactory;
initializer?: string;
masterCopyAddress: string;
saltNonce: string;
}) => {
const signer = await ethers.getSigner(gnosisSafeProxyFactory.address);
let expectedSafeAddress = ethers.constants.AddressZero;
try {
await gnosisSafeProxyFactory.connect(signer).estimateGas.calculateCreateProxyWithNonceAddress(
masterCopyAddress,
initializer,
saltNonce,
{ from: gnosisSafeProxyFactory.address }
);
} catch (e: unknown) {
expectedSafeAddress = getSafeAddressFromRevertMessage(e);
} finally {
return expectedSafeAddress;
}
};