コード例 #1
0
    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
コード例 #2
0
ファイル: test_account.py プロジェクト: renlulu/pyzil
    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
コード例 #3
0
ファイル: responder.py プロジェクト: JSeam2/Tora-Zilliqa
 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)
コード例 #4
0
ファイル: account.py プロジェクト: cryptowhizzard/pyzil
    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
コード例 #5
0
ファイル: account.py プロジェクト: cryptowhizzard/pyzil
    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
        ]
コード例 #6
0
ファイル: account.py プロジェクト: dranov/pyzil
 def checksum_address(self) -> str:
     """Return str of checksum address."""
     return zilkey.to_checksum_address(self.address)