def test_new_account(self): with pytest.raises(ValueError): Account() account = Account.generate() assert account and account.address assert account.zil_key.address == account.address address = "b50c2404e699fd985f71b2c3f032059f13d6543b" account = Account(address=address) assert account and account.address assert account.checksum_address == zilkey.to_checksum_address(address) assert account.zil_key is None pub_key = "0x03949D29723DA4B2628224D3EC8E74C518ACA98C6630B00527F86B8349E982CB57" private_key = "05C3CF3387F31202CD0798B7AA882327A1BD365331F90954A58C18F61BD08FFC" address = "95B27EC211F86748DD985E1424B4058E94AA5814" account = Account(address=address, private_key=private_key) assert account and account.address assert account.checksum_address == zilkey.to_checksum_address(address) assert account.zil_key is not None account = Account(address=address, public_key=pub_key) assert account and account.address assert account.checksum_address == zilkey.to_checksum_address(address) assert account.zil_key is not None account = Account(address=address, public_key=pub_key, private_key=private_key) assert account and account.address assert account.checksum_address == zilkey.to_checksum_address(address) assert account.zil_key is not None
def test_new_account(self): with pytest.raises(ValueError): Account() account = Account.generate() assert account and account.address assert account.zil_key.address == account.address address = "b50c2404e699fd985f71b2c3f032059f13d6543b" account = Account(address=address) assert account and account.address assert account.checksum_address == zilkey.to_checksum_address(address) assert account.zil_key is None pub_key = "0x03949D29723DA4B2628224D3EC8E74C518ACA98C6630B00527F86B8349E982CB57" private_key = "05C3CF3387F31202CD0798B7AA882327A1BD365331F90954A58C18F61BD08FFC" address = "95B27EC211F86748DD985E1424B4058E94AA5814" account = Account(address=address, private_key=private_key) assert account and account.address assert account.checksum_address == zilkey.to_checksum_address(address) assert account.zil_key is not None account = Account(address=address, public_key=pub_key) assert account and account.address assert account.checksum_address == zilkey.to_checksum_address(address) assert account.zil_key is not None account = Account(address=address, public_key=pub_key, private_key=private_key) assert account and account.address assert account.checksum_address == zilkey.to_checksum_address(address) assert account.zil_key is not None addr = "1d19918a737306218b5cbb3241fcdcbd998c3a72" bech32_addr = "zil1r5verznnwvrzrz6uhveyrlxuhkvccwnju4aehf" account1 = Account(address=addr) account2 = Account(address=bech32_addr) assert account1 == account2 assert account1.bech32_address == bech32_addr assert account2.address == addr
def respond(self): if not self.res_q.empty(): response = self.res_q.get() self.logger.info("zilliqa respond: " + response.result) request_id = response.request_id tora_contract_address = response.tora_addr zilkey.normalise_address(KMSConnector.oracle_owner_address) if response.response_method == 'responseString': data = self.__generate_send_data(method=response.response_method, params=[self.__value_dict('id', 'Uint32', str(request_id)), self.__value_dict('result', 'String', response.result.replace('"', "'")), self.__value_dict('oracle_owner_address', 'ByStr20', zilkey.normalise_address(KMSConnector.oracle_owner_address).lower()), self.__value_dict('param', 'String', response.params) ]) else: data = self.__generate_send_data(method=response.response_method, params=[self.__value_dict('id', 'Uint32', str(request_id)), self.__value_dict('result', 'String', response.result.replace('"', "'")), self.__value_dict('oracle_owner_address', 'ByStr20', zilkey.normalise_address( KMSConnector.oracle_owner_address).lower()) ]) try: resp = self.__send_data_to_address(tora_contract_address, 0, response.gas_price, response.gas_limit, data) except Exception as e: self.logger.info(e) resp = None if not resp: self.logger.info("Respond fail") return print(resp) if resp['receipt']['success']: self.logger.info("Respond success") remain_gas = response.gas_limit - int(resp['receipt']['cumulative_gas']) # 一部分是退款的手续费,一部分作为withdraw的手续费 refund_gas = remain_gas * response.gas_price - TRANSFER_GAS * TRANSFER_GAS_PRICE - WITHDRAW_GAS * WITHDRAW_GAS_PRICE if refund_gas < 0: self.logger.info("Refund_gas<0") return if refund_gas == 0: self.logger.info("Refund_gas=0") return self.logger.info("Refund_gas:"+str(refund_gas)) refund_resp = self.__send_data_to_address(zilkey.to_checksum_address(response.user_addr), refund_gas, TRANSFER_GAS_PRICE, TRANSFER_GAS) print(refund_resp) else: self.logger.info("Respond fail") else: time.sleep(1)
def transfer(self, to_addr: str, zils: Union[str, float, Zil, Qa], nonce: Optional[int]=None, gas_price: Optional[int]=None, gas_limit=1, code="", data="", priority=False): """Transfer zils to another address.""" if not self.zil_key or not self.zil_key.encoded_private_key: raise RuntimeError("can not create transaction without private key") to_addr = zilkey.to_checksum_address(to_addr) if not to_addr: raise ValueError("invalid to address") if isinstance(zils, Qa): amount = zils else: if not isinstance(zils, Zil): zils = Zil(zils) amount = zils.toQa() if gas_price is None: gas_price = self.get_min_gas_price(refresh=False) if nonce is None: resp = self.get_balance_nonce() if amount > Qa(resp["balance"]): raise ValueError("insufficient balance to send") nonce = resp["nonce"] + 1 params = active_chain.build_transaction_params( self.zil_key, to_addr, amount, nonce, gas_price, gas_limit, code, data, priority ) txn_info = active_chain.api.CreateTransaction(params) return txn_info
def transfer_batch(self, batch: BatchTransfer, gas_price: Optional[int]=None, gas_limit=1): """Batch Transfer zils to addresses.""" if not self.zil_key or not self.zil_key.encoded_private_key: raise RuntimeError("can not create transaction without private key") if gas_price is None: gas_price = self.get_min_gas_price(refresh=False) resp = self.get_balance_nonce() batch_nonce = resp["nonce"] + 1 txn_params = [] for to_addr, zils in batch: to_addr = zilkey.to_checksum_address(to_addr) if not to_addr: raise ValueError("invalid to address") if isinstance(zils, Qa): amount = zils else: if not isinstance(zils, Zil): zils = Zil(zils) amount = zils.toQa() params = active_chain.build_transaction_params( self.zil_key, to_addr, amount, batch_nonce, gas_price, gas_limit ) txn_params.append(params) batch_nonce += 1 return [ active_chain.api.CreateTransaction(params) for params in txn_params ]
def checksum_address(self) -> str: """Return str of checksum address.""" return zilkey.to_checksum_address(self.address)