From 99adbef196e1241f0864fd4ca2c2e81b4f7aaf92 Mon Sep 17 00:00:00 2001 From: Will Ruddick Date: Thu, 4 Feb 2021 07:41:01 +0000 Subject: [PATCH] added use case example and small clarifications --- README.md | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 5e7f8d1..4bd9be2 100644 --- 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.