commit 99adbef196e1241f0864fd4ca2c2e81b4f7aaf92
parent ed9d9b3833156ee471eaae0296c4107a15abd4d4
Author: Will Ruddick <willruddick@gmail.com>
Date: Thu, 4 Feb 2021 07:41:01 +0000
added use case example and small clarifications
Diffstat:
M | README.md | | | 31 | ++++++++++++++++++++++++------- |
1 file changed, 24 insertions(+), 7 deletions(-)
diff --git a/README.md b/README.md
@@ -1,25 +1,42 @@
# RedistributedDemurrageToken
+## Use Case
+* Network / Basic Income Token
+ * 100 Sarafu is distributed to anyone in Kenya after user validation by the owner of a faucet which mints new Sarafu.
+ * Validated users are those that validate their phone number in Kenya
+ * A monthly Sarafu holding tax (demmurrage) of 2% is recorded as a `demurrageModiifer`.
+ * Supply and user actual balances stay the same but are displayed minus the `demurrageModiifer`.
+ * Each month the total amount of demurage is distributed out to users _active_ and the `demurrageModiifer` for each user is reset to zero.
+ * a single transaction is considered _active_ (heartbeat).
+ * This is meant to result in a disincentivization to hold (hodl) the Sarafu token and increase it's usage as a medium of excahnge rather than a store of value.
+
+
+## Inputs to Constructor (Set only once during contract deployment)
+
+* 'Decay amount' (ppm) and period (blocks) is set at deploy time.
+ - Cannot be changed
+ - aka a holding Fee: A percentage of a users balance that will be charged and eventually redistributed to active users
+* Demmurage Period: The time frame over which a new Holding Fee is applied and redistributed.
+
+
## Ownership
* Contract creator is owner
-* Ownership can be transferred (also to ownership void contract)
+* Ownership can be transferred (also to ownership void contract to make permissionless)
## Mint
* Owner can add minters
- - A faucet contract would be a minter
+ - A faucet contract would be a minter and set the amount of tokens to mint and distribute to new (validated) users.
* 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.
+ - Updates `demurrageModiifer` which represents an exponential decay step (of size 'Decay amount' and is a a percentage of user balance)
+ - `demurrageModifier`_(i) = 'Decay amount' x demurrageModifier_(i-1) x user balance
* 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.
@@ -28,7 +45,7 @@
* 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.
+ - When `transfer` is triggered, and the account did not yet participate in the period, the entry's participant count `demurrageModifier` 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.