uclcoin:一个幼稚的区块链/加密货币实现

uclcoin的Python项目详细描述


https://img.shields.io/pypi/v/uclcoin.svg?style=flat-squarehttps://img.shields.io/pypi/pyversions/uclcoin.svg?style=flat-squarehttps://img.shields.io/pypi/l/uclcoin.svg?style=flat-square

用于教育目的的天真的区块链/加密货币实现。

安装

uclcoin在pypi上发布,在linux/macos和windows上可用,并支持python 3.6+。

$ pip install -U uclcoin

示例

对于以下代码示例,假定已导入必要的依赖项。

>>>fromuclcoinimportKeyPair,Transaction,Block,BlockChain

生成密钥对

私钥用于签署事务,公钥是您的uclcoin地址。它被使用 从交易中获得硬币,从采矿中获得奖励。

使用KeyPair类生成密钥

>>>wallet=KeyPair()>>>address=wallet.public_key>>>address'03d70f9a58c9bc6d8fdc47f96d6931f14a7abb0d72cd76886ee05047023fd49471'

要重用密钥对,请使用私钥wallet.private_key

>>>wallet=KeyPair('your-private-key')

区块链

创建用于执行测试的新区块链:

>>>blockchain=BlockChain()

您的blockchain将只包含genesis块。准备接受 交易,但如果你的余额为零,你就不能寄硬币。

>>>blockchain.get_balance(wallet.public_key)0

开采区块

从区块链中获取新的可开采区块:

>>>new_block=blockchain.get_minable_block(wallet.public_key)

区块链返回一个带有下一个有效索引的新块,任何挂起的 交易和对您的公钥(wallet.public_key)的CoinBase(奖励)交易

uclcoin的工作证明包括操作nonce字段和重新计算 块哈希,直到它以N0开头。当前的难度可以通过 calculate_hash_difficulty方法。

>>>N=blockchain.calculate_hash_difficulty()

一种简单的挖掘方法是增加nonce,直到得到一个有效的散列:

>>>whilenew_block.current_hash[:N].count('0')<N:...new_block.nonce+=1...new_block.recalculate_hash()

计算哈希时,操作将阻塞。完成后,只需提交 区块链的新区块。如果它被接受,你的余额将被更新。

>>>blockchain.add_block(new_block)True>>>blockchain.get_balance(wallet.public_key)10

发送事务

你现在可以花掉你的新硬币了。

>>>destination='public_key_of_the_receiver'>>>value=wallet.create_transaction(destination,2)>>>blockchain.add_transaction(value)True

您的事务将被添加到挂起事务队列中。只有在 包括在矿块中。

>>>blockchain.get_balance(wallet.public_key)10

您可以检查您的余额,包括待处理的交易

>>>blockchain.get_balance_pending(wallet.public_key)8

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

推荐PyPI第三方库


热门话题
java在未知属性上的PUT和POST失败会引发不同的行为   java无法使GWTRPC正常工作   java如何在安卓中更改一个特定视图的主题?   机器学习为什么改变了java中等式的两面?   java继承和重定向标准输出   java为什么Clojure中嵌套循环/重复速度慢?   使用JavaParser解析Java代码并查找父节点的语句类型   java读取类的方法并在arraylist中存储Web服务的路径名   java模板聚合匹配和投影一个没有id的字段   java为什么给定数组不返回false   java如何链接JLabel和JSpinner以调整大小   在java中,当过滤器只返回一个对象时,如何使用流和过滤器将值填充到对象中   java为什么使用getInstance   如何得到我的。运行java命令的bat文件