def setUpTestData(cls): super().setUpTestData() for key, value in contract_addresses.items(): if callable(value): contract_addresses[key] = value(cls.ethereum_client, cls.ethereum_test_account).contract_address settings.SAFE_CONTRACT_ADDRESS = contract_addresses['safe'] settings.SAFE_MULTISEND_ADDRESS = contract_addresses['multi_send'] settings.SAFE_V1_0_0_CONTRACT_ADDRESS = contract_addresses['safe_V1_0_0'] settings.SAFE_V0_0_1_CONTRACT_ADDRESS = contract_addresses['safe_V0_0_1'] settings.SAFE_PROXY_FACTORY_ADDRESS = contract_addresses['proxy_factory'] settings.SAFE_PROXY_FACTORY_V1_0_0_ADDRESS = contract_addresses['proxy_factory_V1_0_0'] settings.SAFE_VALID_CONTRACT_ADDRESSES = {settings.SAFE_CONTRACT_ADDRESS, settings.SAFE_V1_0_0_CONTRACT_ADDRESS, settings.SAFE_V0_0_1_CONTRACT_ADDRESS, } cls.safe_contract_address = contract_addresses['safe'] cls.safe_contract = get_safe_contract(cls.w3, cls.safe_contract_address) cls.safe_contract_V1_0_0_address = contract_addresses['safe_V1_0_0'] cls.safe_contract_V1_0_0 = get_safe_V1_0_0_contract(cls.w3, cls.safe_contract_V1_0_0_address) cls.safe_contract_V0_0_1_address = contract_addresses['safe_V0_0_1'] cls.safe_contract_V0_0_1 = get_safe_V1_0_0_contract(cls.w3, cls.safe_contract_V0_0_1_address) cls.proxy_factory_contract_address = contract_addresses['proxy_factory'] cls.proxy_factory_contract = get_proxy_factory_contract(cls.w3, cls.proxy_factory_contract_address) cls.proxy_factory = ProxyFactory(cls.proxy_factory_contract_address, cls.ethereum_client) cls.multi_send_contract = get_multi_send_contract(cls.w3, contract_addresses['multi_send']) cls.multi_send = MultiSend(cls.multi_send_contract.address, cls.ethereum_client)
def __init__(self, w3: Web3, master_copy_address: str, proxy_factory_address: str): """ Init builder for safe creation using create2 :param w3: Web3 instance :param master_copy_address: `Gnosis Safe` master copy address :param proxy_factory_address: `Gnosis Proxy Factory` address """ assert Web3.isChecksumAddress(master_copy_address) assert Web3.isChecksumAddress(proxy_factory_address) self.w3 = w3 self.master_copy_address = master_copy_address self.proxy_factory_address = proxy_factory_address self.safe_version = get_safe_contract( w3, master_copy_address).functions.VERSION().call() if self.safe_version == '1.1.1': self.master_copy_contract = get_safe_contract( w3, master_copy_address) elif self.safe_version == '1.0.0': self.master_copy_contract = get_safe_V1_0_0_contract( w3, master_copy_address) else: raise ValueError('Safe version must be 1.1.1 or 1.0.0') self.proxy_factory_contract = get_proxy_factory_contract( w3, proxy_factory_address)
def contract_events(self) -> List[ContractEvent]: old_proxy_factory_contract = get_proxy_factory_V1_1_1_contract( self.ethereum_client.w3) proxy_factory_contract = get_proxy_factory_contract( self.ethereum_client.w3) return [ old_proxy_factory_contract.events.ProxyCreation(), proxy_factory_contract.events.ProxyCreation(), ]
def deploy_proxy_factory_contract(cls, ethereum_client: EthereumClient, deployer_account: LocalAccount) -> EthereumTxSent: """ Deploy proxy factory contract :param ethereum_client: :param deployer_account: Ethereum Account :return: deployed contract address """ proxy_factory_contract = get_proxy_factory_contract(ethereum_client.w3) return cls._deploy_proxy_factory_contract(ethereum_client, deployer_account, proxy_factory_contract)
def setUpClass(cls): super().setUpClass() for key, value in _contract_addresses.items(): if callable(value): _contract_addresses[key] = value( cls.ethereum_client, cls.ethereum_test_account).contract_address settings.SAFE_DEFAULT_CALLBACK_HANDLER = _contract_addresses[ "compatibility_fallback_handler"] settings.SAFE_MULTISEND_ADDRESS = _contract_addresses["multi_send"] settings.SAFE_CONTRACT_ADDRESS = _contract_addresses["safe_v1_3_0"] settings.SAFE_V1_1_1_CONTRACT_ADDRESS = _contract_addresses[ "safe_V1_1_1"] settings.SAFE_V1_0_0_CONTRACT_ADDRESS = _contract_addresses[ "safe_V1_0_0"] settings.SAFE_V0_0_1_CONTRACT_ADDRESS = _contract_addresses[ "safe_V0_0_1"] settings.SAFE_PROXY_FACTORY_ADDRESS = _contract_addresses[ "proxy_factory"] settings.SAFE_PROXY_FACTORY_V1_0_0_ADDRESS = _contract_addresses[ "proxy_factory_V1_0_0"] settings.SAFE_VALID_CONTRACT_ADDRESSES = { settings.SAFE_CONTRACT_ADDRESS, settings.SAFE_V1_1_1_CONTRACT_ADDRESS, settings.SAFE_V1_0_0_CONTRACT_ADDRESS, settings.SAFE_V0_0_1_CONTRACT_ADDRESS, } cls.compatibility_fallback_handler = ( get_compatibility_fallback_handler_V1_3_0_contract( cls.w3, _contract_addresses["compatibility_fallback_handler"])) cls.safe_contract_address = _contract_addresses["safe_v1_3_0"] cls.safe_contract = get_safe_V1_3_0_contract(cls.w3, cls.safe_contract_address) cls.safe_contract_V1_1_1_address = _contract_addresses["safe_V1_1_1"] cls.safe_contract_V1_1_1 = get_safe_V1_1_1_contract( cls.w3, cls.safe_contract_V1_1_1_address) cls.safe_contract_V1_0_0_address = _contract_addresses["safe_V1_0_0"] cls.safe_contract_V1_0_0 = get_safe_V1_0_0_contract( cls.w3, cls.safe_contract_V1_0_0_address) cls.safe_contract_V0_0_1_address = _contract_addresses["safe_V0_0_1"] cls.safe_contract_V0_0_1 = get_safe_V1_0_0_contract( cls.w3, cls.safe_contract_V0_0_1_address) cls.proxy_factory_contract_address = _contract_addresses[ "proxy_factory"] cls.proxy_factory_contract = get_proxy_factory_contract( cls.w3, cls.proxy_factory_contract_address) cls.proxy_factory = ProxyFactory(cls.proxy_factory_contract_address, cls.ethereum_client) cls.multi_send_contract = get_multi_send_contract( cls.w3, _contract_addresses["multi_send"]) cls.multi_send = MultiSend(cls.multi_send_contract.address, cls.ethereum_client)
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.proxy_factory_contract = get_proxy_factory_contract(self.ethereum_client.w3) self.proxy_creation_topic = construct_event_topic_set(self.proxy_factory_contract.events.ProxyCreation().abi, None)[0]
def get_contract(self): return get_proxy_factory_contract(self.ethereum_client.w3, self.address)
def __init__(self, ethereum_client: EthereumClient): self.ethereum_client = ethereum_client dummy_w3 = Web3() # Not needed, just used to decode contracts self.proxy_factory_contract = get_proxy_factory_contract(dummy_w3) self.cpk_proxy_factory_contract = get_cpk_factory_contract(dummy_w3)
def __init__(self, ethereum_client: EthereumClient, tracing_enabled: bool): self.ethereum_client = ethereum_client self.tracing_enabled = tracing_enabled dummy_w3 = Web3() # Not needed, just used to decode contracts self.proxy_factory_contract = get_proxy_factory_contract(dummy_w3) self.cpk_proxy_factory_contract = get_cpk_factory_contract(dummy_w3)
def get_contract(self, address: Optional[ChecksumAddress] = None): address = address or self.address return get_proxy_factory_contract(self.ethereum_client.w3, address)