zilliqa python api
pyzil的Python项目详细描述
zilliqa python库api
pyzil是zilliqa区块链api的python3实现。https://apidocs.zilliqa.com
功能
- Zilliqa低级API
- 账户和交易
- Zilliqa ethash
- 智能合约
MacOS或Linux上的Python3.6+。
安装
pip install pyzil
或来源
git clone https://github.com/deepgully/pyzil
cd pyzil
pip install -r requirements.txt
python setup.py install
用法
导入Pyzil
frompprintimportpprintfrompyzil.cryptoimportzilkeyfrompyzil.zilliqaimportchainfrompyzil.zilliqa.unitsimportZil,Qafrompyzil.accountimportAccount,BatchTransfer
设置活动链、主网或测试网
chain.set_active_chain(chain.MainNet)
ZLS事务
# load account from wallet addressaccount=Account(address="95B27EC211F86748DD985E1424B4058E94AA5814")balance=account.get_balance()print("{}: {}".format(account,balance))# load account from private key# private key is required to send ZILsaccount=Account(private_key="05C3CF3387F31202CD0798B7AA882327A1BD365331F90954A58C18F61BD08FFC")balance2=account.get_balance()print("Account balance: {}".format(balance2))# to_addr must be bech32 address or 20 bytes checksum addressto_addr="zil1k5xzgp8xn87eshm3ktplqvs9nufav4pmcm52xx"# send ZILstxn_info=account.transfer(to_addr=to_addr,zils=2.718)pprint(txn_info)txn_id=txn_info["TranID"]# wait chain confirm, may takes 2-3 minutes on MainNettxn_details=account.wait_txn_confirm(txn_id,timeout=300)pprint(txn_details)iftxn_detailsandtxn_details["receipt"]["success"]:print("Txn success: {}".format(txn_id))else:print("Txn failed: {}".format(txn_id))
由QA发送
amount=Qa(1234567890)txn_info=account.transfer(to_addr=to_addr,zils=amount)pprint(txn_info)txn_id=txn_info["TranID"]
等待确认
amount=Zil(3.14)txn_details=account.transfer(to_addr,zils=amount,confirm=True,timeout=300,sleep=20)print("Transfer Result:")pprint(txn_details)pprint(account.last_params)pprint(account.last_txn_info)pprint(account.last_txn_details)
批量传输(将ZIL发送到多个地址)
batch=[BatchTransfer(to_addr=to_addr,zils=i)foriinrange(10)]pprint(batch)txn_info_list=account.transfer_batch(batch)pprint(txn_info_list)fortxn_infointxn_info_list:ifnottxn_info:print("Failed to create txn")continuetxn_details=account.wait_txn_confirm(txn_info["TranID"],timeout=300)pprint(txn_details)iftxn_detailsandtxn_details["receipt"]["success"]:print("Txn success")else:print("Txn failed")balance2=account.get_balance()print("Account balance: {}".format(balance2))
将ZIL从节点发送到电子钱包
nodes_keys=["private_key1","private_key2","private_key3",]to_address="your wallet address"to_account=Account(address=to_address)print("Account balance: {}".format(to_account.get_balance()))min_gas=Qa(chain.active_chain.api.GetMinimumGasPrice())txn_info_list=[]forkeyinnodes_keys:ifnotkey:continueaccount=Account(private_key=key)# send all zilsamount=account.get_balance_qa()-min_gas*2ifamount<=0:continuetxn_info=account.transfer(to_addr=to_account.bech32_address,zils=amount,gas_price=min_gas)pprint(txn_info)txn_info_list.append(txn_info)fortxn_infointxn_info_list:txn_details=chain.active_chain.wait_txn_confirm(txn_info["TranID"],timeout=300)pprint(txn_details)iftxn_detailsandtxn_details["receipt"]["success"]:print("Txn success")else:print("Txn failed")print("Account balance: {}".format(to_account.get_balance()))
从mykey.txt加载帐户
account=Account.from_mykey_txt("mykey.txt")print(account)
从keystore.json加载帐户
account=Account.from_keystore("keystore.json")print(account)# see more examples in tests/test_account.py
bech32地址
# init from bech32 addressaccount1=Account(address="zil1r5verznnwvrzrz6uhveyrlxuhkvccwnju4aehf")print("address: {}".format(account1.address))account2=Account(address="1d19918a737306218b5cbb3241fcdcbd998c3a72")print("bech32 address: {}".format(account2.bech32_address))assertaccount1==account2# tranfer to bech32 addressaccount=Account.from_mykey_txt("mykey.txt")txn_info=account.transfer(to_addr="zil1r5verznnwvrzrz6uhveyrlxuhkvccwnju4aehf",zils=0.01)pprint(txn_info)txn_id=txn_info["TranID"]
Zilliqa低级API
frompyzil.zilliqa.apiimportZilliqaAPI,APIErrorapi=ZilliqaAPI("https://api.zilliqa.com/")print(api)info=api.GetBlockchainInfo()pprint(info)sharding=api.GetShardingStructure()pprint(sharding)ds_block=api.GetCurrentDSEpoch()pprint(ds_block)tx_block=api.GetCurrentMiniEpoch()pprint(tx_block)# see more examples in tests/test_lowlevel_api.py
Zilliqa货币单位
frompyzil.zilliqa.unitsimportZil,Qazil=Zil(1000.123)print(repr(zil))assertzil==Zil("1000.123")qa=Qa(1000123000000000)print(repr(qa))assertqa==zilassertzil==qaprint(repr(zil+qa))print(repr(zil-2))print(repr(zil*2))print(repr(zil/2.0))print(repr(qa-2))print(repr(qa*2))print(repr(qa//2))# see more examples in tests/test_units.py
Zilliqa智能合约
frompprintimportpprintfrompyzil.zilliqaimportchainfrompyzil.accountimportAccountfrompyzil.contractimportContractchain.set_active_chain(chain.TestNet)account=Account.from_keystore("zxcvbnm,","zilliqa_keystore.json")
从地址
获取合同
address="45dca9586598c8af78b191eaa28daf2b0a0b4f43"contract=Contract.load_from_address(address,load_state=True)print(contract)print(contract.status)pprint(contract.state)contract.get_state(get_code=True,get_init=True)pprint(contract.code)pprint(contract.init)pprint(contract.state)
代码
的新合同
code=open("HelloWorld.scilla").read()contract=Contract.new_from_code(code)print(contract)# set account before deploycontract.account=accountcontract.deploy(timeout=300,sleep=10)assertcontract.status==Contract.Status.Deployed
获得合同
owner_addr=account.addresscontracts=Contract.get_contracts(owner_addr)pprint(contracts)contracts2=account.get_contracts()pprint(contracts2)assertcontracts==contracts2
呼叫合同
contract_addr="45dca9586598c8af78b191eaa28daf2b0a0b4f43"contract=Contract.load_from_address(contract_addr)contract.account=accountresp=contract.call(method="getHello",params=[])pprint(resp)pprint(contract.last_receipt)resp=contract.call(method="setHello",params=[Contract.value_dict("msg","String","hi contract.")])pprint(resp)pprint(contract.last_receipt)resp=contract.call(method="getHello",params=[])pprint(resp)pprint(contract.last_receipt)# see more examples in test_contract.py
amount=Zil(3.14)txn_details=account.transfer(to_addr,zils=amount,confirm=True,timeout=300,sleep=20)print("Transfer Result:")pprint(txn_details)pprint(account.last_params)pprint(account.last_txn_info)pprint(account.last_txn_details)
批量传输(将ZIL发送到多个地址)
batch=[BatchTransfer(to_addr=to_addr,zils=i)foriinrange(10)]pprint(batch)txn_info_list=account.transfer_batch(batch)pprint(txn_info_list)fortxn_infointxn_info_list:ifnottxn_info:print("Failed to create txn")continuetxn_details=account.wait_txn_confirm(txn_info["TranID"],timeout=300)pprint(txn_details)iftxn_detailsandtxn_details["receipt"]["success"]:print("Txn success")else:print("Txn failed")balance2=account.get_balance()print("Account balance: {}".format(balance2))
将ZIL从节点发送到电子钱包
nodes_keys=["private_key1","private_key2","private_key3",]to_address="your wallet address"to_account=Account(address=to_address)print("Account balance: {}".format(to_account.get_balance()))min_gas=Qa(chain.active_chain.api.GetMinimumGasPrice())txn_info_list=[]forkeyinnodes_keys:ifnotkey:continueaccount=Account(private_key=key)# send all zilsamount=account.get_balance_qa()-min_gas*2ifamount<=0:continuetxn_info=account.transfer(to_addr=to_account.bech32_address,zils=amount,gas_price=min_gas)pprint(txn_info)txn_info_list.append(txn_info)fortxn_infointxn_info_list:txn_details=chain.active_chain.wait_txn_confirm(txn_info["TranID"],timeout=300)pprint(txn_details)iftxn_detailsandtxn_details["receipt"]["success"]:print("Txn success")else:print("Txn failed")print("Account balance: {}".format(to_account.get_balance()))
从mykey.txt加载帐户
account=Account.from_mykey_txt("mykey.txt")print(account)
从keystore.json加载帐户
account=Account.from_keystore("keystore.json")print(account)# see more examples in tests/test_account.py
bech32地址
# init from bech32 addressaccount1=Account(address="zil1r5verznnwvrzrz6uhveyrlxuhkvccwnju4aehf")print("address: {}".format(account1.address))account2=Account(address="1d19918a737306218b5cbb3241fcdcbd998c3a72")print("bech32 address: {}".format(account2.bech32_address))assertaccount1==account2# tranfer to bech32 addressaccount=Account.from_mykey_txt("mykey.txt")txn_info=account.transfer(to_addr="zil1r5verznnwvrzrz6uhveyrlxuhkvccwnju4aehf",zils=0.01)pprint(txn_info)txn_id=txn_info["TranID"]
Zilliqa低级API
frompyzil.zilliqa.apiimportZilliqaAPI,APIErrorapi=ZilliqaAPI("https://api.zilliqa.com/")print(api)info=api.GetBlockchainInfo()pprint(info)sharding=api.GetShardingStructure()pprint(sharding)ds_block=api.GetCurrentDSEpoch()pprint(ds_block)tx_block=api.GetCurrentMiniEpoch()pprint(tx_block)# see more examples in tests/test_lowlevel_api.py
Zilliqa货币单位
frompyzil.zilliqa.unitsimportZil,Qazil=Zil(1000.123)print(repr(zil))assertzil==Zil("1000.123")qa=Qa(1000123000000000)print(repr(qa))assertqa==zilassertzil==qaprint(repr(zil+qa))print(repr(zil-2))print(repr(zil*2))print(repr(zil/2.0))print(repr(qa-2))print(repr(qa*2))print(repr(qa//2))# see more examples in tests/test_units.py
Zilliqa智能合约
frompprintimportpprintfrompyzil.zilliqaimportchainfrompyzil.accountimportAccountfrompyzil.contractimportContractchain.set_active_chain(chain.TestNet)account=Account.from_keystore("zxcvbnm,","zilliqa_keystore.json")
从地址
获取合同
address="45dca9586598c8af78b191eaa28daf2b0a0b4f43"contract=Contract.load_from_address(address,load_state=True)print(contract)print(contract.status)pprint(contract.state)contract.get_state(get_code=True,get_init=True)pprint(contract.code)pprint(contract.init)pprint(contract.state)
代码
的新合同
code=open("HelloWorld.scilla").read()contract=Contract.new_from_code(code)print(contract)# set account before deploycontract.account=accountcontract.deploy(timeout=300,sleep=10)assertcontract.status==Contract.Status.Deployed
获得合同
owner_addr=account.addresscontracts=Contract.get_contracts(owner_addr)pprint(contracts)contracts2=account.get_contracts()pprint(contracts2)assertcontracts==contracts2
呼叫合同
contract_addr="45dca9586598c8af78b191eaa28daf2b0a0b4f43"contract=Contract.load_from_address(contract_addr)contract.account=accountresp=contract.call(method="getHello",params=[])pprint(resp)pprint(contract.last_receipt)resp=contract.call(method="setHello",params=[Contract.value_dict("msg","String","hi contract.")])pprint(resp)pprint(contract.last_receipt)resp=contract.call(method="getHello",params=[])pprint(resp)pprint(contract.last_receipt)# see more examples in test_contract.py
account=Account.from_mykey_txt("mykey.txt")print(account)