1.0.0 • Published 4 years ago

@ablack/fundraising-templates-multisig v1.0.0

Weekly downloads
-
License
(GPL-3.0-or-later...
Repository
-
Last release
4 years ago

Aragon 0.8 Fundraising Multisig Template

Description

Aragon Fundraising Multisig Template differenciate two set actors: the board and the shareholders.

Board

The board are the ones being funded by the fundraising campaign. They are represented through a custom BOARD token and a dedicated voting app set to be used as a multisig. Their privileges are intentionnaly limited to protect shareholders. Thus, they only have the following rights.

Handling board members

The board decides on who is to be included / excluded from the board through its TokenManager.

Opening presale

The board decides on when the presale and thus the fundraising campaign is to be open.

Handling fundraising proceeds

The board decides on what use is to be made of the fundraising proceeds which are periodically transferred to their discretionnary Vault / Finance app.

Opening votes

The board decides on when new votes should be open for shareholders to enforce decisions over the organization.

Shareholders

The shareholders are the one contributing to the fundraising campaign. They are represented through a SHARE bonded-token they can buy and redeem through the Aragon Fundraising interface and a voting app. They hold most of the rights over the organization.

Handling system

Shareholders decide on which apps are to be installed, which apps are to to upgraded and how permissions are to be set.

Handling fundraising parameters

Shareholders decide on whether / how beneficiary, fees, collateralization settings and collaterals taps should be updated.

Rationale

This architecture grants most of the governance rights to shareholders to protect their investment. There is thus a need to mitigate situations where a shareholder owning more than 50% of the shares would own the whole organization. This is why SHARE based votes i.e. most of the organization decisions can only be open and initiated by the board.

Usage

Prepare instance

Deploy a DAO and install all board related apps

template.prepareInstance(boardTokenName, boardTokenSymbol, boardMembers, boardVotingsSettings, financePeriod)

Install share apps

template.installShareApps(id, shareTokenName, shareTokenSymbol, shareVotingsSettings)

Install fundraising apps

template.installFundraisingApps(
    goal,
    period,
    exchangeRate,
    vestingCliffPeriod,
    vestingCompletePeriod,
    supplyOfferedPct,
    fundingForBeneficiaryPct,
    openDate,
    batchBlocks,
    maximumTapRateIncreasePct,
    maximumTapFloorDecreasePct
)
  • goal The presale goal
  • period The presale period
  • exchangeRate The presale exchange rate in PPM
  • vestingCliffPeriod The cliff period for vested shares purchased during presale
  • vestingCompletePeriod The complete period for vested shares purchased during presale
  • supplyOfferedPct The percentage of the initial token supply offered to presale's contributors
  • fundingForBeneficiaryPct The percentage of the presale raised funds which are to be transferred to the board's discretionnary vault
  • openDate The date upon which the presale will be open if 0, the presale can be open manually later
  • batchBlocks The number of blocks trading batches will last
  • maximumTapRateIncreasePct The maximum percentage tap rates can be increased at once
  • maximumTapFloorDecreasePct The maximum percentage tap floors can be decreased at once

Finalize instance

Set collateralization settings

template.finalizeInstance(virtualSupplies, virtualBalances, slippages, daiRate, daiFloor)

Permissions

System

Handle apps and permissions

AppPermissionGranteeManager
KernelAPP_MANAGERVoting [SHARE]Voting [SHARE]
ACLCREATE_PERMISSIONSVoting [SHARE]Voting [SHARE]
EVMScriptRegistryREGISTRY_MANAGERVoting [SHARE]Voting [SHARE]
EVMScriptRegistryREGISTRY_ADD_EXECUTORVoting [SHARE]Voting [SHARE]

Board

TokenManager

Represents board's membership

AppPermissionGranteeManager
Token Manager [BOARD]MINTVoting [BOARD]Voting [SHARE]
Token Manager [BOARD]BURNVoting [BOARD]Voting [SHARE]
Token Manager [BOARD]ISSUENULLNULL
Token Manager [BOARD]ASSIGNNULLNULL
Token Manager [BOARD]REVOKE_VESTINGSNULLNULL

Voting

Enforces board's decisions

AppPermissionGranteeManager
Voting [BOARD]CREATE_VOTESToken Manager [BOARD]Voting [SHARE]
Voting [BOARD]MODIFY_QUORUMVoting [BOARD]Voting [SHARE]
Voting [BOARD]MODIFY_SUPPORTVoting [BOARD]Voting [SHARE]

Vault and Finance

Handle board's funds

AppPermissionGranteeManager
VaultTRANSFERFinanceVoting [SHARE]
FinanceCREATE_PAYMENTSVoting [BOARD]Voting [SHARE]
FinanceEXECUTE_PAYMENTSVoting [BOARD]Voting [SHARE]
FinanceMANAGE_PAYMENTSVoting [BOARD]Voting [SHARE]
FinanceCHANGE_PERIODNULLNULL
FinanceCHANGE_BUDGETS_ROLENULLNULL

Share Holders

TokenManager

Handle shares / bonds minting and burning

AppPermissionGranteeManager
Token Manager [SHARE]MINTMarketMakerVoting [SHARE]
Token Manager [SHARE]BURNMarketMaker, PresaleVoting [SHARE]
Token Manager [SHARE]ISSUEPresaleVoting [SHARE]
Token Manager [SHARE]ASSIGNPresaleVoting [SHARE]
Token Manager [SHARE]REVOKE_VESTINGSPresaleVoting [SHARE]

Voting

Enforces share holders decisions

AppPermissionGranteeManager
Voting [SHARE]CREATE_VOTESToken Manager [BOARD]Voting [SHARE]
Voting [SHARE]MODIFY_QUORUMVoting [SHARE]Voting [SHARE]
Voting [SHARE]MODIFY_SUPPORTVoting [SHARE]Voting [SHARE]

Fundraising apps

Agent / Reserve

Handle market maker funds

AppPermissionGranteeManager
PoolSAFE_EXECUTEVoting [SHARE]Voting [SHARE]
PoolADD_PROTECTED_TOKENControllerVoting [SHARE]
PoolREMOVE_PROTECTED_TOKENNULLNULL
PoolEXECUTENULLNULL
PoolDESIGNATE_SIGNERNULLNULL
PoolADD_PRESIGNED_HASHNULLNULL
PoolRUN_SCRIPTNULLNULL
PoolTRANSFERTap, MarketMakerVoting [SHARE]

Presale

Handle preliminary sale

AppPermissionGranteeManager
PresaleOPENControllerVoting [SHARE]
PresaleCONTRIBUTEControllerVoting [SHARE]

MarketMaker

Handle buy and sell orders

AppPermissionGranteeManager
MarketMakerOPENControllerVoting [SHARE]
MarketMakerUPDATE_FORMULANULLNULL
MarketMakerUPDATE_BENEFICIARYControllerVoting [SHARE]
MarketMakerUPDATE_FEESControllerVoting [SHARE]
MarketMakerADD_COLLATERAL_TOKENControllerVoting [SHARE]
MarketMakerREMOVE_COLLATERAL_TOKENControllerVoting [SHARE]
MarketMakerUPDATE_COLLATERAL_TOKENControllerVoting [SHARE]
MarketMakerOPEN_BUY_ORDERControllerVoting [SHARE]
MarketMakerOPEN_SELL_ORDERControllerVoting [SHARE]

Tap

Control the flow of funds from reserve to board

AppPermissionGranteeManager
TapUPDATE_CONTROLLERNULLNULL
TapUPDATE_RESERVENULLNULL
TapUPDATE_BENEFICIARYControllerVoting [SHARE]
TapUPDATE_MAXIMUM_TAP_RATE_INCREASE_PCTControllerVoting [SHARE]
TapUPDATE_MAXIMUM_TAP_FLOOR_DECREASE_PCTControllerVoting [SHARE]
TapADD_TAPPED_TOKENControllerVoting [SHARE]
TapREMOVE_TAPPED_TOKENNULLNULL
TapUPDATE_TAPPED_TOKENControllerVoting [SHARE]
TapRESET_TAPPED_TOKENControllerVoting [SHARE]
TapWITHDRAWControllerVoting [SHARE]

Controller

API contract forwarding transactions to relevant contracts

AppPermissionGranteeManager
ControllerUPDATE_BENEFICIARYVoting [SHARE]Voting [SHARE]
ControllerUPDATE_FEESVoting [SHARE]Voting [SHARE]
ControllerADD_COLLATERAL_TOKENVoting [SHARE]Voting [SHARE]
ControllerREMOVE_COLLATERAL_TOKENVoting [SHARE]Voting [SHARE]
ControllerUPDATE_COLLATERAL_TOKENVoting [SHARE]Voting [SHARE]
ControllerUPDATE_MAXIMUM_TAP_RATE_INCREASE_PCTVoting [SHARE]Voting [SHARE]
ControllerUPDATE_MAXIMUM_TAP_FLOOR_DECREASE_PCTVoting [SHARE]Voting [SHARE]
ControllerADD_TOKEN_TAPVoting [SHARE]Voting [SHARE]
ControllerUPDATE_TOKEN_TAPVoting [SHARE]Voting [SHARE]
ControllerOPEN_PRESALEVoting [BOARD]Voting [SHARE]
ControllerOPEN_TRADINGPresaleVoting [SHARE]
ControllerCONTRIBUTEAnyVoting [SHARE]
ControllerOPEN_BUY_ORDERAnyVoting [SHARE]
ControllerOPEN_SELL_ORDERAnyVoting [SHARE]
ControllerWITHDRAWAnyVoting [SHARE]