Hash-chain log implementation
Project description
HashLog
Principles
- Records are immutable
- Records are ordered
- It must be possible to check
hash(Xi)
for anyi
hash(Xi)
can be sent to anyone as a proofhash(Xi) == hash(X, hash(Xi-1))
- You do not need X to perform the check
Installation
$ pip install hlog
Usage
Getting started
# create a chain
c = Chain()
# send some messages
c.append(message="Alice gives 10.36 euros to Bob", amount=10.36, currency="EUR")
c.append(message="Bob gives 2 dollars to Alice", amount=2, currency="USD")
# you can loop through the chain records
used_currencies = set(r.fields["currency"] for r in c.records)
# call verify() to ensure records have not been modified
c.verify()
Raising an exception during validation
c.verify(raise_on_error=True)
Verify will raise a ModifiedRecordException
. It has 3 interesting attributes:
index
: the index in the chain where validation starts to failmessage
: a user-friendly message to indicate the errorrecord
: theRecord
object itself
Dumping
c = Chain()
c.append(message="hello")
c.append(message="wonderful")
c.append(message="world")
rows = c.dump()
rows
is a tuple
of bytes
, each item being one record of the chain.
Restoring from a dump
If you want to reconstruct your chain based on a file or database records, you can use Chain.from_dump()
c = Chain()
c.append(message="hello")
c.append(message="wonderful")
c.append(message="world")
d = c.dump()
c2 = Chain.from_dump(d)
c2.verify()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
hlog-1.0.1.tar.gz
(5.9 kB
view hashes)