mirror of
git://holbrook.no/erc20-demurrage-token
synced 2024-11-29 10:46:46 +01:00
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?
|
Loading…
Reference in New Issue
Block a user