drand的Python客户端。

drand的Python项目详细描述


https://img.shields.io/pypi/v/drand.svghttps://img.shields.io/travis/initc3/drand.py.svgCodecovDocumentation StatusIC3 Powered

Python客户机查询drand网络是否可公开验证, 无偏、不可预测的随机值。在

要了解更多关于drand的信息,请参阅drand’s documentation。在

警告:此软件目前仅用于 实验目的。它是为原型和 使用drand^{str1}$网络进行实验,它本身仍然是静态的 实验性的!

IMPORTANT:当前仅适用于drand服务器代码 来自master分行(截至2020年3月8日)。要使用Python查询drand test network(例如:League of Entropy),您可以尝试 drb-client。在

Install

$ pip install drand

Usage

Prerequisite: Run a local drand network

首先,运行一个本地drand网络。请参见devnet/README.md 更多细节。在

^{pr2}$

获取drand服务器的地址

fromdrand.utilsimportget_addresses_from_group_filegroup_file='devnet/data/group.toml'addresses=get_addresses_from_group_file(group_file)
>>>addresses['172.15.238.2:8084','172.15.238.3:8081','172.15.238.4:8080','172.15.238.6:8082','172.15.238.5:8083']

Query a drand server

importdrand

Get the public key of the network (/api/info/distkey)

每个节点都有这个组密钥的公共共享。在

distkey=awaitdrand.get_distkey(addresses[0],tls=False)
>>>distkey'9509e2c2a5d04776bedce40839341375c89aa34a0372a1db273f562d89050b4ae54a76a276a26580166b0cd91e63f909'

Get and verify a random value (/api/public)

验证意味着验证“随机性”值是 签名的哈希值,并且该签名对于 公钥(distkey)和消息(round+previous)

res=awaitdrand.get_and_verify(addresses[3],distkey=distkey,tls=False,)
>>>res{'round':73,'previous':'b894ccc3859d1fb6d2ce6722b7195d359fbe6b0a387a3693e539e4957f1c69025936919fff3bd89a303ccfbcb929aae10eb68172997bdc84ccc6295dd21903a77994a116e203514935e9e25bf3f830cb00e6546470260f9beab65a5e389050bd','signature':'817254f9267e5345f5160a794ad5ffca0a9a2295cbfedc8c3d19215f91c8ccd07faa8354564d18159905477757c21f8a05140761ab5eb7b1d622ef5b62d64cdecf7f5c1e3d06d7ac016e16c4bfaddc4b27985625d32cd73e650e8fb7ea8dccf0','randomness':'66c3554bc0927a4ccbfdd73856071be792e3ddec7c27193d2f2f4d482c78b6b2'}

获取第5轮的随机值

res=awaitdrand.get_and_verify(addresses[3],distkey=distkey,tls=False,round_=5)
>>>res{'round':5,'previous':'aab94951afa626c26af5e08baa111fb98b1f5300556dc472f5e976a1ca4ccb074ecb7778cf18e08272fb40e1421a630914fe178ff1353d1247f58ecf4b82c417a55b8867e1f6eca4ca4bc548db2c2d1ce31c52e34f97c7f001774dc3fb6f22d5','signature':'ad3e4f0bf0ef93c2ced95c12e1e7b5d0adbc4791e5592a83ce6119e0b610b7de40786e639861aa62df9d3a01b0ac50f90c84b1b20c5cc0662774c324f03fda0a69f0625a54a0c4c066f3b441cb33a8782f88d53861a5d4d8035a96488e340141','randomness':'baee3fd77cd09349325794f766c0c81c887987907ec2834ac09a8a46c2193747'}

获取一系列回合的随机值

importasynciofromaiohttpimportClientSessionasyncdefget_rands(rounds):asyncwithClientSession()assession:tasks=[]forrinrounds:tasks.append(drand.get_and_verify(addresses[4],distkey=distkey,session=session,tls=False,round_=r,))rands=awaitasyncio.gather(*tasks)returnrands
>>>asyncio.run(get_rands(range(2,5)))[{'round':2,'previous':'b816229db70d3d7ab727bf0dc8ae3de27c354b066d5d931d3b6fb14d2fcf2433cd72f0271a9c47e7448de7c9589de2250d85ad444175cb616ca6fa0f6f0d376e608378c3688ee528631132c3c7928dfcec9f302a91daac51f1e87c98ebff78d5','signature':'a515fe873dc18810d3aa446614786aa63567930f888c82b1edf66ea1e0f604c46948863dc349320219eba7d11a784813152719f0d6d471a08227c27393d14eb02a8df7c18cb48f5df6918510948e6170922ad5164da0965c47b63ba80ee7a682','randomness':'185963dba81d25158bb60bc0bc16823b7687a87cca739a6a9e4a2bccac16c5f0'},{'round':3,'previous':'a515fe873dc18810d3aa446614786aa63567930f888c82b1edf66ea1e0f604c46948863dc349320219eba7d11a784813152719f0d6d471a08227c27393d14eb02a8df7c18cb48f5df6918510948e6170922ad5164da0965c47b63ba80ee7a682','signature':'81d3a98e63e8480d61e64ef7126dea5f83cc98303d43c66221f15edab8dc4e02d7c229a645f107ee76e0de11673569810f18fc6fd5d27e5a50aa0cbf95e90f1d6c750715a9e4b79ec8a5982421e2a324864d1471e36a0af3c773864923a3e3b4','randomness':'0b7d6c4a465b4cd6099f4a888ea355c2173a8108ad749a7790c64592a9c2ee9f'},{'round':4,'previous':'81d3a98e63e8480d61e64ef7126dea5f83cc98303d43c66221f15edab8dc4e02d7c229a645f107ee76e0de11673569810f18fc6fd5d27e5a50aa0cbf95e90f1d6c750715a9e4b79ec8a5982421e2a324864d1471e36a0af3c773864923a3e3b4','signature':'aab94951afa626c26af5e08baa111fb98b1f5300556dc472f5e976a1ca4ccb074ecb7778cf18e08272fb40e1421a630914fe178ff1353d1247f58ecf4b82c417a55b8867e1f6eca4ca4bc548db2c2d1ce31c52e34f97c7f001774dc3fb6f22d5','randomness':'2dcc3e4894c91d092cdbcbe6daf777c5cbe2e6948cf8a18693009762273d52aa'}]

Acknowledgments

此包的初始代码接口基于 JavaScript客户端drandjs。在

已获取repo根目录下的devnet目录 从drand/drand存储库下的demo目录中,树 使用提交哈希a40dc25e1aec6822a79c72b4aaca12e65c700f01。这个 代码是使用git-filter-repo带过来的,以便保留 提交历史记录。在

这个包的原始样板是用 Cookiecutter和{a37}项目 模板。在

感谢IC3(加密货币和合同倡议) 支持这项工作。在

Reminder & Future Work

此软件目前仅用于 实验目的。它是为原型和 使用drand^{str1}$网络进行实验,它本身仍然是静态的 实验性的!

Github issue tracker将用于规划和管理未来 工作。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将springboot war部署到debian jetty8   java破坏了函数,即使它看起来是正确的   当MockMvc不可自动编译时,java会有选择地从Spring Security向其应用单个过滤器   java AndroidStudio每秒播放n次生成的声音   JavaJBossSeam:继承的方法被拦截了吗?   ScheduledExecutorService中线程默认名称中池号的java含义   在Java中用递归方法实现类Fibonacci的递归   java虚拟路径/文件夹   java即时与ZoneDateTime。转换到另一时区   用GaussLegendre算法在java中逼近Pi   java RecyclerView findFirstVisibleItemPosition()返回1   java根据当前经过身份验证的用户的角色返回不同的JSON对象   java从内部类访问扩展类的方法   Android程序中的Java语法WRT静态方法   可选参数初始化Java字符串文字时出错