Level K and dOrg are nearing completion of the fundraiser app outlined in this proposal. I would like to take this opportunity to walk through the setup parameters for the fundraiser using a potential configuration consistent with what has been discussed in recent Dxdao weekly calls.
The dxDAO fundraiser was built using the Fairmint implementation of the continuous organization model. The token issued gives the buyer access to future cash flows of the dxDAO.
Suggested High Level Parameters
-
DAO Reserve (amount and vesting period)
100,000 DXD Tokens issued to the dxDAO in a pre-mint, vested monthly over 3 years (i.e. 1/36th = ~2775 DXD will be vested each month for 3 years)
-
Curve slope / issuance
The curve slope is linear, as per the cOrg model.
Calculate such that $300,000 USD (in ETH, at current prices) would be raised in exchange for 12,000 DXD, or about 11% of the total supply.
-
Kickstarter goal
This is a minimum threshold for the fundraise, until which point investors can withdraw the entirety of their investment.
$50,000 denominated in ETH using current prices.
-
Reserve percentage
A portion of the collateral invested in the curve is held in reserve to facilitate sell orders (providing a liquidity guarantee).
Set at 10% as per cOrg model recommendations. Investors want their money to be used to grow the dxDAO, not sit in reserve.
-
Dividend percentage
A portion of revenue is allocated to the reserve, increasing the value of all outstanding bonding curve tokens.
Define as 10% of revenue, for a minimum of 5 years. The duration of revenue allocation here can be increased at a later date, but never decreased.
cOrg Mechanics
A more technical look into cOrg parameters and their suggested values
Admin
What properties are set once, and then not changable? (without upgrade)
uint _initReserve = 100,000 DXD,
The pre-mint amount, in DXD tokens.
address _currencyAddress = null,
Collateral token address. Set to null address to use Ether.
Suggested to use Ether.
uint _initGoal = 4,800 DXD,
Kickstarter goal, in DXD tokens.
uint _buySlopeNum / uint _buySlopeDen
Calculate such that $300,000 USD (in ETH, at current prices) would be raised in exchange for 12,000 DXD. This comes out to 1 for _buySlopeNum and 36000000000000000000000 for the _buySlopeDen
uint _investmentReserveBasisPoints = 10%,
Percent of buys() kept in reserve.
string memory _name = Dxdao Token,
Token Name
string memory _symbol = DXD
Token Symbol
What properties are changable via admin?
updateConfig() is the one function used to update properties. You input all of the properties below, keeping ones that you don’t want to change the same.
address _whitelistAddress = null,
The whitelist allows for only allowing certain addresses to do operations. It can be set to null address to disable
Suggested to be set to null
address payable _beneficiary = 0x519b70055af55A007110B4Ff99b0eA33071c720a,
The beneficiary gets the funds raised.
Suggested to be the dxDAO Avatar.
address _control = 0x519b70055af55A007110B4Ff99b0eA33071c720a,
The control is the admin. They can call this function.
Suggested to be the dxDAO Avatar.
address payable _feeCollector = 0x519b70055af55A007110B4Ff99b0eA33071c720a,
The fee collector collects fees on buy.
Suggested to set to the dxDAO Avatar, and for fees to be disabled.
uint _feeBasisPoints = 0,
A fee can be collected each time new tokens are issued via buy, and sent to the feeCollector address.
Suggested to be disabled for the dxDAO use case.
bool _autoBurn = true,
When the dxDAO buys on the curve, all the money goes to the reserve. This is one of the ways to increase the reserve, and therefore the sell curve (the other is pay() function)
In this case the dxDAO gets DXD minted just like anyone else, BUT these can be automatically burned to increase the value of all other DXDs, and have the reserve increase be stronger.
uint _revenueCommitmentBasisPoints = 1000,
What percent of revenue through the pay() function do we want to allocate to the reserve? Suggested to be 10% as per cOrg standard.
uint _minInvestment = 0.001 Ether,
Users that buy() have to spend at least this much. It can be pretty low. 0.01 to 0.001 ETH is probably a good starting value. If it’s TOO low - math will start to have notable rounding errors.
uint _openUntilAtLeast = 5 years from start of fundraise
This is a signal of how long the dxDAO will commit part of revenues to the curve.
As in “We agree to distribute 10% of revenue as ‘dividends’ for 5 years”
Can be INCREASED via this function, but never decreased.
It is enforced in the pay() function.