169 lines
5.3 KiB
JavaScript
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);
|
|
}); |