uclcoin:一个幼稚的区块链/加密货币实现
uclcoin的Python项目详细描述
用于教育目的的天真的区块链/加密货币实现。
安装
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