def generate_tx_nonce(seller: Address, client: Address) -> str: """ Generate a unique hash to distinguish txs with the same terms. :param seller: the address of the seller. :param client: the address of the client. :return: return the hash in hex. """ time_stamp = int(time.time()) aggregate_hash = hashlib.sha256( b"".join([seller.encode(), client.encode(), time_stamp.to_bytes(32, "big")]) ) return aggregate_hash.hexdigest()
def generate_tx_nonce(self, seller: Address, client: Address) -> str: """ Generate a random str message. :param seller: the address of the seller. :param client: the address of the client. :return: return the hash in hex. """ time_stamp = int(time.time()) aggregate_hash = sha256_hash(b"".join( [seller.encode(), client.encode(), time_stamp.to_bytes(32, "big")])) return aggregate_hash.hex()
def _get_hash( tx_sender_addr: Address, tx_counterparty_addr: Address, good_ids: List[int], sender_supplied_quantities: List[int], counterparty_supplied_quantities: List[int], tx_amount: int, tx_nonce: int, ) -> bytes: """ Generate a hash from transaction information. :param tx_sender_addr: the sender address :param tx_counterparty_addr: the counterparty address :param good_ids: the list of good ids :param sender_supplied_quantities: the quantities supplied by the sender (must all be positive) :param counterparty_supplied_quantities: the quantities supplied by the counterparty (must all be positive) :param tx_amount: the amount of the transaction :param tx_nonce: the nonce of the transaction :return: the hash """ aggregate_hash = Web3.keccak( b"".join( [ good_ids[0].to_bytes(32, "big"), sender_supplied_quantities[0].to_bytes(32, "big"), counterparty_supplied_quantities[0].to_bytes(32, "big"), ] ) ) for i in range(len(good_ids)): if not i == 0: aggregate_hash = Web3.keccak( b"".join( [ aggregate_hash, good_ids[i].to_bytes(32, "big"), sender_supplied_quantities[i].to_bytes(32, "big"), counterparty_supplied_quantities[i].to_bytes(32, "big"), ] ) ) m_list = [] # type: List[bytes] m_list.append(tx_sender_addr.encode("utf-8")) m_list.append(tx_counterparty_addr.encode("utf-8")) m_list.append(aggregate_hash) m_list.append(tx_amount.to_bytes(32, "big")) m_list.append(tx_nonce.to_bytes(32, "big")) return Web3.keccak(b"".join(m_list))