Skip to main content
https://img.shields.io/pypi/v/uclcoin.svg?style=flat-square https://img.shields.io/pypi/pyversions/uclcoin.svg?style=flat-square https://img.shields.io/pypi/l/uclcoin.svg?style=flat-square

A naive blockchain/cryptocurrency implementation for educational purposes.

Installation

UCLCoin is distributed on PyPI and is available on Linux/macOS and Windows and supports Python 3.6+.

$ pip install -U uclcoin

Examples

For the following code examples it is assumed that the necessary dependecies were imported.

>>> from uclcoin import KeyPair, Transaction, Block, BlockChain

Generating your key pair

The private key is used to sign transactions and the public key is your UCLCoin address. It is used to receive coins from transactions and rewards from mining.

Use the KeyPair class to generate your keys

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

To reuse your key pair instantiate the class using your private key wallet.private_key

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

BlockChain

Create a new BlockChain for doing your tests:

>>> blockchain = BlockChain()

Your blockchain will contain only the Genesis block. It is ready to accept transactions, but you can’t send any coins if your balance is zero.

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

Mining a block

Get a new minable block from the blockchain:

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

The blockchain returns a new block with the next valid index, any pending transactions and a coinbase (reward) transaction to your public key (wallet.public_key)

UCLCoin the proof of work consists on manipulating the nonce field and recalculating the block hash until it starts with N zeros. The current difficulty can be obtained with the calculate_hash_difficulty method.

>>> N = blockchain.calculate_hash_difficulty()

A simple mining method is to increment the nonce until you get a valid hash:

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

The operation will block while the hash is calculated. After finishing just submit the new block to the blockchain. If it is accepted your balance will be updated.

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

Sending a transaction

You can now spent your new coins.

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

Your transaction will be added to the pending transactions queue. It will only be confirmed after being included in a mined block.

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

You can check your balance including the pending transactions

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

Release files for uclcoin 0.3.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for uclcoin 0.3.2
File Size Uploaded
uclcoin-0.3.2.tar.gz 7.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for uclcoin 0.3.2
File Interpreter ABI Platform
uclcoin-0.3.2-py3-none-any.whl Python 3 none any Details

Total release size: 15.7 kB

Release files / uclcoin-0.3.2.tar.gz

Download URL uclcoin-0.3.2.tar.gz
Size 7.6 kB
Tags Source
SHA-256 checksum
How to use checksums
87ca5a2c8f5139d2b60f687e16e56d1a644c68a7f75cd7ab1c043855bcb5e315
BLAKE2b-256 checksum
How to use checksums
081d3d2ed3186cd59632c76695ecc31595edada3e7d8ddb3d544b54f50c9d96d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / uclcoin-0.3.2-py3-none-any.whl

Download URL uclcoin-0.3.2-py3-none-any.whl
Size 8.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
718aa1d14bbdea42fce7e668b0548d65e436bbde432526df91cbe90dc9d123c6
BLAKE2b-256 checksum
How to use checksums
b9d241896f28f01072044d229a39392f4c0dc4207d2d525b8a591c9afdbb2932
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.3.2 This release

2 release files

0.2.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page