Add readmE
This commit is contained in:
parent
3cecc77cd1
commit
ed9d9b3833
59
README.md
Normal file
59
README.md
Normal file
@ -0,0 +1,59 @@
|
||||
# RedistributedDemurrageToken
|
||||
|
||||
## Ownership
|
||||
|
||||
* Contract creator is owner
|
||||
* Ownership can be transferred (also to ownership void contract)
|
||||
|
||||
|
||||
## Mint
|
||||
|
||||
* Owner can add minters
|
||||
- A faucet contract would be a minter
|
||||
* Minters can mint any amount
|
||||
|
||||
|
||||
## Demurrage
|
||||
|
||||
* Decay amount (ppm) and period (blocks) is set at deploy time.
|
||||
- Cannot be changed
|
||||
* Tax is applied when a **mint** or **transfer** is triggered for first time in new period;
|
||||
- Supply _stays the same_.
|
||||
- Updates `demurrageModiifer` which represents an exponential decay step.
|
||||
* All client-facing values (_balance output_ , _transfer inputs_) are adjusted with `demurrageModifier`.
|
||||
* Edge case: `approve` call, which may be called on either side of a period.
|
||||
|
||||
|
||||
## Redistribution
|
||||
|
||||
* One redistribution entry is added to storage for each period;
|
||||
- When `mint` is triggered, the new totalsupply is stored to the entry
|
||||
- When `transfer` is triggered, and the account did not yet participate in the period, the entry's participant count is incremented.
|
||||
* Account must have "participated" in a period to be redistribution beneficiary.
|
||||
* Redistribution is applied when an account triggers a **transfer** for the first time in a new period;
|
||||
- Check if have participated in period.
|
||||
- Balance is increased by `(total supply at end of period * demurrage modifier ) / number of participants`
|
||||
- Participation field is zeroed out.
|
||||
* Fractions must be rounded down (TODO)
|
||||
- Remainder is "dust" and should be sent to a dedicated "sink" address (TODO)
|
||||
|
||||
|
||||
## Data structures
|
||||
|
||||
* One word per account:
|
||||
- bits 000-159: value
|
||||
- bits 160-255: period
|
||||
- (we have more room here in case we want to cram something else in)
|
||||
* One word per redistribution period:
|
||||
- bits 000-055: period
|
||||
- bits 056-215: supply
|
||||
- bits 216-253: participant count
|
||||
- bits 254: Set if invidiual redistribution amounts are fractions (TODO)
|
||||
- bits 255: Set if "dust" has been transferred to sink (TODO)
|
||||
|
||||
|
||||
## QA
|
||||
|
||||
* Basic python tests in place
|
||||
* How to determine and generate test vectors, and how to adapt them to scripts.
|
||||
* Audit sources?
|
Reference in New Issue
Block a user