- 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
$ pip install hlog
# 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()
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
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.
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()