def vote_proposal(self, proposal_id, has_approval, voter_address=None): """Proposal approval Args: proposal_id (int): proposal id has_approval (bool): Approved voter_address (str): Approve address """ # If the address of the sender is not specified, we prescribe the default if voter_address is None: voter_address = self.tron.default_address.hex if not self.tron.isAddress(voter_address): raise TronError('Invalid voter_address address provided') if not is_integer(proposal_id) or proposal_id < 0: raise TronError('Invalid proposal_id provided') if not is_boolean(has_approval): raise TronError('Invalid has_approval provided') return self.tron.manager.request( '/wallet/proposalapprove', { 'owner_address': self.tron.address.to_hex(voter_address), 'proposal_id': int(proposal_id), 'is_add_approval': bool(has_approval) })
def to_hex(self, val): """ Helper function that will convert a generic value to hex. Note: This function does not convert TRX addresses to Hex. If you wish to specifically convert TRX addresses to HEX, please use tron.address.to_hex instead. Example: >>> tron.to_hex("test") >>> # result "74657374" """ if is_boolean(val): return self.from_decimal(+val) if type(val) == dict: return self.from_utf8(json.dumps(val).replace(' ', '')) if is_string(val): if val[:2] == '0x': return val if not isinstance(val, numbers.Real): return self.from_utf8(val) return self.from_decimal(val)
def validate_abi_value(abi_type, value): """ Helper function for validating a value against the expected abi_type Note: abi_type 'bytes' must either be python3 'bytes' object or '' """ if is_array_type(abi_type) and is_list_like(value): # validate length specified_length = length_of_array_type(abi_type) if specified_length is not None: if specified_length < 1: raise TypeError( "Invalid abi-type: {abi_type}. Length of fixed sized arrays" "must be greater than 0.".format(abi_type=abi_type)) if specified_length != len(value): raise TypeError( "The following array length does not the length specified" "by the abi-type, {abi_type}: {value}".format( abi_type=abi_type, value=value)) # validate sub_types sub_type = sub_type_of_array_type(abi_type) for v in value: validate_abi_value(sub_type, v) return elif is_bool_type(abi_type) and is_boolean(value): return elif is_uint_type(abi_type) and is_integer(value) and value >= 0: return elif is_int_type(abi_type) and is_integer(value): return elif is_address_type(abi_type): is_address(value) return elif is_bytes_type(abi_type): if is_bytes(value): return elif is_string(value): if is_0x_prefixed(value): return else: raise TypeError( "ABI values of abi-type 'bytes' must be either" "a python3 'bytes' object or an '0x' prefixed string.") elif is_string_type(abi_type) and is_string(value): return raise TypeError( "The following abi value is not a '{abi_type}': {value}".format( abi_type=abi_type, value=value))
def to_bytes(primitive=None, hexstr=None, text=None): assert_one_val(primitive, hexstr=hexstr, text=text) if is_boolean(primitive): return b'\x01' if primitive else b'\x00' elif isinstance(primitive, bytes): return primitive elif is_integer(primitive): return to_bytes(hexstr=to_hex(primitive)) elif hexstr is not None: if len(hexstr) % 2: hexstr = '0x0' + remove_0x_prefix(hexstr) return decode_hex(hexstr) elif text is not None: return text.encode('utf-8') raise TypeError("expected an int in first arg, or keyword of hexstr or text")
def vote_proposal(self, proposal_id, has_approval, voter_address): """Proposal approval Args: proposal_id (int): proposal id has_approval (bool): Approved voter_address (str): Approve address """ if not self.tron.isAddress(voter_address): raise TronError('Invalid voter_address address provided') if not is_integer(proposal_id) or proposal_id < 0: raise TronError('Invalid proposal_id provided') if not is_boolean(has_approval): raise TronError('Invalid has_approval provided') return self.tron.manager.request('/wallet/proposalapprove', { 'owner_address': self.tron.address.to_hex(voter_address), 'proposal_id': int(proposal_id), 'is_add_approval': bool(has_approval) })