Add JSON metadata to event log entries.
EZQG2APB36DDMIAYDPPDGOIXOD7K2RZZSGC2NKGZIHB2HZBTW7EQC
2G3GNDDUOVPF45PELJ65ZB2IXEHJJXJILFRVHZXGPXUL4BVNZJFQC
AXKKXBWN4EMUOLV43WN52JSKJPBV7TLSGLNJW5EZXHSJNKCYUWOQC
NTPC7KJEAPA34SBIA74FVQSJXYNW32RIUQTHUSUTKMEUCPLUIBJAC
OBFPJS2GHO2PEHBHGEHKIUOUAFIQHPIZXEVD2YIE3ZIE2PVMH5VAC
XMONXALY6ZE6GED7TZGLNS5AUHTO23C5AUC74LEBQSFXRMQDPOLQC
W35DDBFYF6Z4ZPCFEO5RPAONZLYCSNTXUSTS6FIUUVZHCI6Q7GHAC
IZEVQF627FA7VV25KJAWYWGGC35LZUUBBQRPN5ZAINTQLPEDRTEAC
Z7KS5XHHC6PAMTVBHXY7KUSS3BWAOU6FSYIITUCFOOJZU4OUJHBAC
PBD7LZYQHXAA3KLH2ZUX5GW4UFML6BQ32KXZF4KZ6OYFASUYFJ5QC
TNR3TEHKVADAEZSTOD2XLSUTSW5AWST2YUW4CWK5KE7DSC6XHZNAC
4IQVQL4TS35GL2GYZJG254TKJLL5EHMRSFT77Z4VTRZIG2TMBM3QC
Y35QCWYW2OTZ27ZVTH2BA3XJTUCJ2WMLKU32ZCOCDY3AW7TIZXRAC
TLQ72DSJD7GGPWN6HGBHAVPBRQFKEQ6KSK43U7JWWID4ZWAF47JAC
NVOCQVASZWTKQJG7GPH7KHKZZR7NUG4WLV5YY4KAIRPCJRWCZPIAC
7DBNV3GV773FH5ZLQWFX4RBOS4Q3CIK2RYZNNABY3ZOETYZCXRNQC
N4NDAZYTLSI2W22KT3SYXL257DBMSH3UT2BXOYM7LH7FSZAY4RLAC
RSEB2NFGUBTFESE5BJKDUVQL5Y5ZVGY5O4CJX2LNP63MS3NRHHZQC
75N3UJ4JK56KXF56GASGPAWLFYGJDETVJNYTF4KXFCQM767JUU5AC
WO2MINIF4TXOHWSE7JWXRZYN64XRVLYIRFMF4SMPSOXKA2V77KMQC
BROSTG5KP3NUNLSYPVQID254TE47E5RKQAKLPIY7PGWETE6JNMTAC
I2KHGVD44KT4MQJXGCTVSQKMBO6TVCY72F26TLXGWRL6PHGF6RNQC
General:
* Convert SQLite code to use Persistent
User Interface:
* Login
* Evaluate OAuth options
* Invite
* Record who invited a participant.
* When a new participant is invited to the project, allow them to create an account.
* Profile
* Timeline - Yours
* Log Start
* Log Stop
* Amend Event
* Amend operations targeting events older than <commit_delay hours> fail.
* Future work - garnish/reimburse based approach?
* Payouts
* History of payouts (read from blockchain?)
* Projected payout given current data
* Voting
* List Proposals
* Create Proposal
* Options to be considered
* Closing date
* Vote
* Resource Pooling
* Create Resource Pool
* Describe resource need
* Base resource award set by socialized vote?
* Voting on continuous values?
* Set resource contribution timeline
* Solicit/Suggest resource acquisition designee (& vote)
* Escrow of resource acquisition contributions.
* Resource award bidding?
* In case of oversubscription, award is reduced by a function of the oversubscription amount.
* "Test Oversubscription" functionality.
* Read blockchain transactions; when a payment is observed, distribute it to participants.
* Adjust work index reader to only read work index entries older than <commit_delay hours>.
* Tabulate votes & randomly pick from weighted distribution.
* Resource pool awarding
Payouts Service
* BTC address alias chains (in case new payouts should go elsewhere)
* Update Payout Address
- authenticate by asking the user to sign and broadcast a small txn with a specific
- amount from the old address to the new address
- user creates account & provides payout address
- inviting user asked to sign a txn that transfers a specific amount of btc from their
- current payout address to the invitee's payout address
Guiding Principle:
Trust in your collaborators is the foremost design principle. Any attempt to
inhibit abuse or fraud within a company will ultimately be circumventable, so
it's more important to provide features that will be useful to friendly actors.
Any feature that can be used to retroactively punish a malicious actor can also
be used to abuse a friendly but unpopular actor, and so should be avoided. The
correct way to exclude a malicious actor is to fork the company to exclude that
actor.
Design Goals:
* Do not discard information. Mutable caches of state are fine, but
retain all information necessary to reproduce both the current state and
all prior states of the cache.
* Timestamp EVERYTHING.
* Keep a cryptographically verified audit trail.
* Use cryptographic signatures for authentication of all requests to secured
resources.
Library:
* Invite
* When a new participant is invited to the project, allow them to create an account.
- user creates account ands provides initial payout address
- inviting user asked to sign a txn that transfers a specific amount of btc from their
current payout address to the invitee's payout address as confirmation of
the invitation
* Timeline
* Amend Event
* Amend operations targeting events older than <commit_delay hours> fail.
* MAYBE garnish/reimburse based approach?
* Secure the transaction log via inclusion of periodic hashes of the log
into the public blockchain?
* User
* Add public keys that can be used to sign requests. How does this interact
with certificate-based auth from browsers? Require openpgpjs?
* Payout Address Update
- authenticate by asking the user to sign and broadcast a small txn with a specific
amount from the old address to the new address
* Payouts
* Payouts should not include events younger than <commit_delay hours> to permit amends.
* Find current verified address for each payout.
* History of payouts (read from blockchain?)
* Include hours won in resource auction - requires confirmation that contribution
was actually made (observed in the confirmed blockchain)
* Resource Pooling
* Resource auction bids should include the source address which will be used in the CoinJoin txn.
* Create election for resource acquisition designee
* Elections
* Create Election
- Options to be considered
- Closing date
* List Proposals
* Record Vote
Webserver:
* Login
* Evaluate OpenID options
* Companion Creation
* Require user to provide the PGP public key that will be used to authenticate requests
* Authentication
* Require bodies of all
* Timeline
* Amend Event
Payouts Service:
* Read blockchain transactions
* Invitation validation
* Payout Address Update validation
* When a payment is observed, distribute it to participants.
* When a resource acquisition CoinJoin is observed, record time awards
* Elections
* Close voting window
* Tabulate votes & randomly pick winner from weighted distribution
* Record & announce winning option
* Resource Pooling
* Finalize resource pooling auction
* Create CoinJoin transaction to award BTC to the resource acquisition designee
* Notify auction winners so that input addresses & signatures may be collected.