idle_moloch/lib/Baal/scripts/deployFactories.js
2024-11-01 11:55:27 +01:00

169 lines
5.3 KiB
JavaScript

const { ethers, upgrades } = require('hardhat');
const _shamans = {
4: [''],
1: [''],
137: [''],
42: [''],
100: [''],
}
// same default for all networks, but different sometimes
// https://github.com/gnosis/zodiac/blob/master/src/factory/constants.ts#L20
// https://github.com/safe-global/safe-deployments/tree/main/src/assets
// moduleProxyFactory https://github.com/gnosis/zodiac/blob/master/src/factory/constants.ts#L21
const _addresses = {
gnosisSingleton: "0xd9db270c1b5e3bd161e8c8503c55ceabee709552",
gnosisFallbackLibrary: "0xf48f2b2d2a534e402487b3ee7c18c33aec0fe5e4",
gnosisMultisendLibrary: "0xa238cbeb142c10ef7ad8442c6d1f9e89e07e7761",
poster: "0x000000000000cd17345801aa8147b8D3950260FF",
gnosisSafeProxyFactory: "0xa6B71E26C5e0845f74c812102Ca7114b6a896AB2",
moduleProxyFactory: "0x00000000000DC7F163742Eb4aBEf650037b1f588",
DAO: "0x4A9a27d614a74Ee5524909cA27bdBcBB7eD3b315" // Change to Daohaus protocol zodiac baal avatar
}
// optimism
// Safe singleton: 0x69f4D1788e39c87893C980c06EdF4b7f686e2938
// fall back: 0x017062a1dE2FE6b99BE3d9d37841FeD19F573804
// multisend: 0x998739BFdAAdde7C933B942a68053933098f9EDa
// GnosisSafeProxyFactory: 0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC
// DAO: "0x1aCFF11474B9C6D15966Da7A08eD23438CDE23D4"
const _shares = ['1'];
const _loot = ['1'];
const _minVoting = 60;
const _maxVoting = 600;
const _proposalOffering = 1;
const _name = "TestBaal";
const _symbol = "BAALTO";
const networkName = {
4: 'Rinkeby',
5: 'Goerli',
1: 'mainnet',
137: 'matic',
42: 'kovan',
100: 'gnosis',
42161: 'arbitrum',
10: 'optimism'
};
const networkCurrency = {
4: 'ETH',
5: 'ETH',
1: 'ETH',
137: 'matic',
42: 'ETH',
100: 'xDai',
42161: 'ETH',
10: 'ETH'
};
async function main() {
const [deployer] = await ethers.getSigners();
const address = await deployer.getAddress();
const { chainId } = await deployer.provider.getNetwork();
console.log('Summoning Baal factories on network:', networkName[chainId]);
console.log('Account address:', address);
console.log(
'Account balance:',
ethers.utils.formatEther(await deployer.provider.getBalance(address)),
networkCurrency[chainId]
);
// const tx = await deployer.sendTransaction({
// to:_addresses.DAO,
// value: ethers.utils.parseEther("0.3")
// }
// )
// console.log('return funds', tx);
console.log('start deploy');
const LootFactory = await ethers.getContractFactory('Loot')
const lootSingleton = (await LootFactory.deploy())
console.log('loot waiting');
await lootSingleton.deployed();
console.log('loot deploy');
console.log('lootSingleton',lootSingleton.address)
const SharesFactory = await ethers.getContractFactory('Shares')
const sharesSingleton = (await SharesFactory.deploy())
await sharesSingleton.deployed();
console.log('shares deploy');
console.log('sharesSingleton',sharesSingleton.address)
const BaalFactory = await ethers.getContractFactory('Baal')
const baalSingleton = (await BaalFactory.deploy())
await baalSingleton.deployed();
console.log('baalSingleton',baalSingleton.address)
console.log('baal deploy');
const BaalSummoner = await ethers.getContractFactory('BaalSummoner')
const BaalAndVaultSummoner = await ethers.getContractFactory('BaalAndVaultSummoner')
// deploy proxy upgrades
baalSummoner = await upgrades.deployProxy(BaalSummoner);
await baalSummoner.deployed();
console.log('Factory Contract Address:', baalSummoner.address);
console.log('imp:', await upgrades.erc1967.getImplementationAddress(baalSummoner.address));
// set addresses of templates and libraries
await baalSummoner.setAddrs(
baalSingleton.address,
_addresses.gnosisSingleton,
_addresses.gnosisFallbackLibrary,
_addresses.gnosisMultisendLibrary,
_addresses.gnosisSafeProxyFactory,
_addresses.moduleProxyFactory,
lootSingleton.address,
sharesSingleton.address
);
// transfer ownership to DAO
if(_addresses.DAO=="0x0000000000000000000000000000000000000000"){
console.log("You need to transfer ownership of summoner");
} else {
console.log("transffering ownership too: ", _addresses.DAO);
await baalSummoner.transferOwnership(_addresses.DAO);
}
const txHash = baalSummoner.deployTransaction.hash;
const receipt = await deployer.provider.getTransactionReceipt(txHash);
console.log('Transaction Hash:', txHash);
console.log('Block Number:', receipt.blockNumber);
// deploy vault factory proxy upgrades
baalAndVaultSummoner = await upgrades.deployProxy(BaalAndVaultSummoner);
await baalAndVaultSummoner.deployed();
console.log('Vault Factory Contract Address:', baalAndVaultSummoner.address);
console.log('Vault imp:', await upgrades.erc1967.getImplementationAddress(baalAndVaultSummoner.address));
await baalAndVaultSummoner.setSummonerAddr(baalSummoner.address);
if(_addresses.DAO=="0x0000000000000000000000000000000000000000"){
console.log("You need to transfer ownership of vault registery");
} else {
console.log("transffering ownership of vault summoner too: ", _addresses.DAO);
await baalAndVaultSummoner.transferOwnership(_addresses.DAO);
}
const vaulTxHash = baalSummoner.deployTransaction.hash;
const vaultReceipt = await deployer.provider.getTransactionReceipt(txHash);
console.log('Transaction Hash:', vaulTxHash);
console.log('Block Number:', vaultReceipt.blockNumber);
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});