Configuration Template for Fundraising Decentralized Application

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.

4 Likes