def get_constructor_arguments(contract: Contract, args: Optional[list] = None, kwargs: Optional[dict] = None): """Get constructor arguments for Etherscan verify. https://etherscanio.freshdesk.com/support/solutions/articles/16000053599-contract-verification-constructor-arguments """ # return contract._encode_constructor_data(args=args, kwargs=kwargs) constructor_abi = get_constructor_abi(contract.abi) # constructor_abi can be none in case of libraries if constructor_abi is None: return to_hex(contract.bytecode) if args is not None: return contract.encodeABI(constructor_abi['name'], args)[2:] # No 0x else: constructor_abi = get_constructor_abi(contract.abi) kwargs = kwargs or {} arguments = merge_args_and_kwargs(constructor_abi, [], kwargs) # deploy_data = add_0x_prefix( # contract._encode_abi(constructor_abi, arguments) # ) # TODO: Looks like recent Web3.py ABI change deploy_data = encode_abi(contract.web3, constructor_abi, arguments) return deploy_data
def encodeConstructorData(cls, arguments=None): if arguments is None: arguments = [] constructor = get_constructor_abi(cls.abi) if constructor: if constructor['inputs'] and not arguments: raise ValueError( "This contract requires {0} constructor arguments".format( len(constructor['inputs']), ) ) if arguments: if len(arguments) != len(constructor['inputs']): raise ValueError( "This contract requires {0} constructor arguments".format( len(constructor['inputs']), ) ) is_encodable = check_if_arguments_can_be_encoded( get_abi_input_types(constructor), arguments, ) if not is_encodable: raise ValueError("Unable to encode provided arguments.") deploy_data = add_0x_prefix(cls._encodeABI(constructor, arguments, data=cls.code)) else: deploy_data = add_0x_prefix(cls.code) return deploy_data
def get_constructor_arguments(contract: Contract, args: Optional[list]=None, kwargs: Optional[dict]=None): """Get constructor arguments for Etherscan verify. https://etherscanio.freshdesk.com/support/solutions/articles/16000053599-contract-verification-constructor-arguments """ constructor_abi = get_constructor_abi(contract.abi) if args is not None: return contract._encode_abi(constructor_abi, args)[2:] # No 0x else: constructor_abi = get_constructor_abi(contract.abi) arguments = merge_args_and_kwargs(constructor_abi, [], kwargs) deploy_data = add_0x_prefix( contract._encode_abi(constructor_abi, arguments) ) return deploy_data
def encodeConstructorData(cls, arguments=None): if arguments is None: arguments = [] constructor = get_constructor_abi(cls.abi) if constructor: if constructor['inputs'] and not arguments: raise ValueError( "This contract requires {0} constructor arguments".format( len(constructor['inputs']), )) if arguments: if len(arguments) != len(constructor['inputs']): raise ValueError( "This contract requires {0} constructor arguments". format(len(constructor['inputs']), )) is_encodable = check_if_arguments_can_be_encoded( constructor, arguments, {}, ) if not is_encodable: raise ValueError("Unable to encode provided arguments.") deploy_data = add_0x_prefix( cls._encodeABI(constructor, arguments, data=cls.code)) else: deploy_data = add_0x_prefix(cls.code) return deploy_data
def _encode_constructor_data(cls, args=None, kwargs=None): constructor_abi = get_constructor_abi(cls.abi) if constructor_abi: if args is None: args = tuple() if kwargs is None: kwargs = {} arguments = merge_args_and_kwargs(constructor_abi, args, kwargs) deploy_data = add_0x_prefix( cls._encode_abi(constructor_abi, arguments, data=cls.bytecode)) else: deploy_data = add_0x_prefix(cls.bytecode) return deploy_data
def _encode_data_in_transaction(self, *args, **kwargs): constructor_abi = get_constructor_abi(self.abi) if constructor_abi: if not args: args = tuple() if not kwargs: kwargs = {} arguments = merge_args_and_kwargs(constructor_abi, args, kwargs) data = add_0x_prefix( encode_abi(self.web3, constructor_abi, arguments, data=self.bytecode) ) else: data = to_hex(self.bytecode) return data
def _encode_constructor_data(cls, args=None, kwargs=None): constructor_abi = get_constructor_abi(cls.abi) if constructor_abi: if args is None: args = tuple() if kwargs is None: kwargs = {} arguments = merge_args_and_kwargs(constructor_abi, args, kwargs) deploy_data = add_0x_prefix( cls._encode_abi(constructor_abi, arguments, data=cls.bytecode) ) else: deploy_data = add_0x_prefix(cls.bytecode) return deploy_data
def encode_constructor_data(abi, bytecode, web3, args=None, kwargs=None): constructor_abi = get_constructor_abi(abi) if constructor_abi: if args is None: args = tuple() if kwargs is None: kwargs = {} arguments = merge_args_and_kwargs(constructor_abi, args, kwargs) deploy_data = add_0x_prefix( encode_abi(web3, constructor_abi, arguments, data=bytecode)) else: deploy_data = to_hex(bytecode) return deploy_data