Commit Graph

47 Commits

Author SHA1 Message Date
Greg Fitzgerald b725fdb093 Sha256Hash -> Hash
Because in Loom, there's just the one. Hopefully no worries that it
shares a name with std::Hash.
2018-03-06 17:40:01 -07:00
Greg Fitzgerald 1436bb1ff2 Move entry into its own module
Hmm, Logger doesn't depend on log.
2018-03-06 17:40:01 -07:00
Greg Fitzgerald 5a44c36b1f Move hash into its own module 2018-03-06 17:40:01 -07:00
Greg Fitzgerald f09952f3d7 DRY up transaction signing
Cleanup the big mess I copy-pasted myself into.
2018-03-06 16:34:25 -07:00
Greg Fitzgerald 4376032e3a data -> asset
'data' is too vague.
2018-03-06 14:50:32 -07:00
Greg Fitzgerald 624c151ca2 Add signature module
Because things other than transactions can be signed.
2018-03-06 12:48:28 -07:00
Greg Fitzgerald 5d0356f74b Move verify_entry to a method as well 2018-03-06 12:35:12 -07:00
Greg Fitzgerald b019416518 Move verify into methods
A little overly-coupled to Serialize, but makes the code a lot tighter
2018-03-06 12:27:08 -07:00
Greg Fitzgerald 4fcd9e3bd6 Give Transaction its own module 2018-03-06 12:18:17 -07:00
Greg Fitzgerald 66bf889c39 Rename Transfer to Transaction
struct names should be nouns
2018-03-06 11:54:47 -07:00
Greg Fitzgerald 6543497c17 Move Transaction data into its own struct
This will allow us to add addition transfer types to the log.
2018-03-06 10:50:32 -07:00
Greg Fitzgerald 720c54a5bb Allow balances to be negative
* Will allow owners to loan token to others.
* Will allow for parallel verification of balances without spilling
  over 64 bits.

Fixes #43
2018-03-05 17:30:53 -07:00
Greg Fitzgerald 48c28c2267 Transactions now require a hash of the last entry they've seen
This ensures the transaction cannot be processed on a chain
that forked before that ID. It will also provide a basis for
expiration constraints. A client may want their transaction
to expire, and the generators may want to reject transactions
that have been floating in the ether for years.
2018-03-05 12:48:14 -07:00
Greg Fitzgerald 955f76baab Finally, genesis block generation without channels 2018-03-04 14:32:30 -07:00
Greg Fitzgerald ff82fbf112 Make num_hashes mean the num_hashes since the last ID
Before this change, num_hashes meant the number of hashes since
the last ID, minus any hashing done on the event data. It made
no difference for Tick events, but logged Transaction events with
one less hash than actually occurred.
2018-03-04 09:52:36 -07:00
Greg Fitzgerald 8503a0a58f Refactor 2018-03-04 09:21:45 -07:00
Greg Fitzgerald b1e9512f44 Rename end_hash to id 2018-03-04 07:50:26 -07:00
Greg Fitzgerald 608def9c78 Consolidate imports 2018-03-04 07:28:51 -07:00
Greg Fitzgerald 7cf0d55546 Remove optional 'from' field 2018-03-03 20:41:07 -07:00
Greg Fitzgerald 0d0fee1ca1 Sign Claim's 'to' field
Otherwise, the accountant will treat deposits of the same amount as
duplicates.
2018-03-02 11:46:22 -07:00
Greg Fitzgerald a0410c4677 Pipe all Claim constructors through a function 2018-03-02 10:58:43 -07:00
Greg Fitzgerald 8fe464cfa3 Rename Claim's key field to match same field in Transaction 2018-03-02 10:47:21 -07:00
Greg Fitzgerald 3e2d6d9e8b Generalize Transaction to express a Claim
If a Transaction doesn't have an existing address, it's being used
to create new funds.
2018-03-02 10:41:15 -07:00
Greg Fitzgerald 1b77e8a69a Move Event into its own crate
The log crate was starting to be the catch-all for all things
related to entries, events, signatures, and hashes. This split
shows us that:

* Event depends only on signatures, not on hashes [directly]
* All event testing was done via log testing (shame on me)
* Accounting depends only on events
2018-03-02 08:43:57 -07:00
Greg Fitzgerald c935fdb12f Move signature duplicate detection into the historian 2018-03-01 17:44:10 -07:00
Greg Fitzgerald 9e16937914 Delete the Discovery event
Not useful to the accountant.
2018-03-01 17:02:41 -07:00
Greg Fitzgerald f705202381 No need to hash data that's already hashed to create the signature 2018-03-01 16:39:09 -07:00
Greg Fitzgerald 3fcc2dd944 Add testnode
Fixes #20
2018-02-28 18:05:20 -07:00
Greg Fitzgerald 604ccf7552 Add network interface for accountant 2018-02-28 14:00:04 -07:00
Greg Fitzgerald c3bb207488 Verify event signatures before adding log entries 2018-02-28 10:23:01 -07:00
Greg Fitzgerald f98e9a2ad7 Fix overuse of search-and-replace 2018-02-26 17:03:50 -07:00
Greg Fitzgerald 0443b39264 Allow event log to hold events of any serializable (hashable) type 2018-02-26 16:42:31 -07:00
Greg Fitzgerald 8b0b8efbcb Allow Entry to hold events of any kind of data 2018-02-26 15:37:33 -07:00
Greg Fitzgerald 97449cee43 Allow events to hold any kind of data 2018-02-26 15:31:01 -07:00
Greg Fitzgerald ab5252c750 Move entry verification out of Entry impl 2018-02-26 14:39:01 -07:00
Greg Fitzgerald b02eab57d2 Extend the event log with a Transaction event to transfer possession
This implementation assumes 'from' is the current owner of 'data'.
Once that's verified, the signature ensures that nobody modified
'data' (the asset being transferred) or 'to' the entity taking
ownership.

Fixes #14
2018-02-26 11:09:11 -07:00
Greg Fitzgerald b8d52cc3e4 Make the Discovery event into a struct instead of a tuple 2018-02-24 11:15:03 -07:00
Greg Fitzgerald d78082f5e4 Test bad signature 2018-02-24 10:27:51 -07:00
Greg Fitzgerald 08e501e57b Extend the event log with a Claim event to claim possession
Unlike a Discovery event, a Claim event associates a public key
with a hash. It's intended to to be used to claim ownership of
some hashable data. For example, a graphic designer could claim
copyright by hashing some image they created, signing it with
their private key, and publishing the hash-signature pair via
the historian. If someone else tries to claim it as their own,
the designer can point to the historian's log as cryptographically
secure evidence that the designer's copy existed before anyone
else's.

Note there's nothing here that verifies the first claim is the actual
content owner, only that the first claim almost certainly happened
before a second.
2018-02-24 10:09:49 -07:00
Greg Fitzgerald 29a607427d Rename UserDataKey to Discovery
From the perspective of the log, when some data's hash is added,
that data is "discovered" by the historian.  Another event
might be a "claim" that some signed data belongs to the owner of a
public key.
2018-02-24 05:25:19 -07:00
Greg Fitzgerald fa4e232d73 Add serialization/deseriation support to event log
See bincode and serde_json for usage:
https://github.com/TyOverby/bincode

Fixes #1
2018-02-20 16:26:13 -07:00
Greg Fitzgerald 6e37f70d55 Test reorder attack 2018-02-20 14:46:36 -07:00
Greg Fitzgerald d97112d7f0 Explain proof-of-history in the readme
Also:
* Hash userdata so that verification works as the readme describes.
* Drop itertools package. Found a way to use std::iter instead.

Fixes #8
2018-02-20 14:04:49 -07:00
Greg Fitzgerald ba90e43f72 Update benchmark
* Add asm, though it doesn't make it faster. TODO: use avx instructions.
* Do 10x less hashes, since sha256 is more expensive.
2018-02-19 16:51:35 -07:00
Greg Fitzgerald 0297edaf1f Use sha256 hashes instead of Rust's builtin hasher.
Causes a 20x performance degradation. Enabling asm did not
speed things up.
2018-02-19 16:23:53 -07:00
Greg Fitzgerald 4a7156de43 Move hash generation into stateless function 2018-02-19 12:09:58 -07:00
Greg Fitzgerald fd209ef1a9 Rename event crate to log 2018-02-18 09:59:33 -07:00