{"_id":"@ablack/fundraising-templates-multisig","_rev":"1-4c30516e879b5ed8ce684d975511aba7","name":"@ablack/fundraising-templates-multisig","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@ablack/fundraising-templates-multisig","version":"1.0.0","author":{"name":"Aragon Assocation","email":"legal@aragon.org"},"contributors":[{"name":"Olivier Sarrouy","email":"olivier@aragon.black"}],"license":"(GPL-3.0-or-later OR AGPL-3.0-or-later)","homepage":"https://github.com/AragonBlack/fundraising","scripts":{"lint":"solium --dir ./contracts  --config ../../.soliumrc.json","compile":"truffle compile --all","test":"npm run test:ganache","test:ganache":"./node_modules/@aragon/templates-shared/scripts/test-ganache.sh","test:geth":"npm run docker:run && npm run docker:wait-gas && npm run deploy:devnet && truffle test --network devnet && npm run docker:stop","docker:run":"cd ./node_modules/@aragon/templates-shared/; docker-compose -f docker-compose.yml up -d; RESULT=$?; cd -; $(exit $RESULT)","docker:stop":"cd ./node_modules/@aragon/templates-shared/; docker-compose down; cd -","docker:wait-gas":"truffle exec ./node_modules/@aragon/templates-shared/scripts/sleep-until-gaslimit.js --network devnet 6900000","prepublishOnly":"npm run compile && npm run abi:extract -- --no-compile","abi:extract":"truffle-extract --output abi/ --keys abi","deploy:arachain":"npm run compile && truffle exec scripts/deploy_raw.js rpc --network rpc","deploy:rpc":"npm run compile && truffle exec ./scripts/deploy.js --network rpc","deploy:devnet":"npm run compile && truffle exec ./scripts/deploy.js --network devnet","deploy:staging":"npm run compile && truffle exec ./scripts/deploy.js --network rinkeby --ens 0xfe03625ea880a8cba336f9b5ad6e15b0a3b5a939","deploy:rinkeby":"npm run compile && truffle exec scripts/deploy_raw.js rinkeby --network frame","deploy:ropsten":"npm run compile && truffle exec ./scripts/deploy.js --network ropsten --ens 0x6afe2cacee211ea9179992f89dc61ff25c61e923","deploy:mainnet":"npm run compile && truffle exec ./scripts/deploy.js --network mainnet --ens 0x314159265dd8dbb310642f98f50c066173c1259b","publish:arachain":"aragon apm publish major $(npm run deploy:arachain | tail -n 1) --environment default --skip-confirmation true --propagate-content false","publish:rpc":"aragon apm publish major $(npm run deploy:rpc | tail -n 1) --environment default","publish:devnet":"aragon apm publish major $(npm run deploy:devnet | tail -n 1) --environment default","publish:staging":"aragon apm publish major $(npm run deploy:rinkeby | tail -n 1) --environment rinkeby","publish:hatch":"aragon apm publish major $(npm run deploy:hatch | tail -n 1) --environment hatch","publish:rinkeby":"aragon apm publish major $(npm run deploy:rinkeby | tail -n 1) --environment rinkeby","publish:ropsten":"aragon apm publish major $(npm run deploy:ropsten | tail -n 1) --environment ropsten","publish:mainnet":"aragon apm publish major $(npm run deploy:mainnet | tail -n 1) --environment mainnet","deploy:dao:rpc":"truffle exec scripts/deploy_dao.js --network rpc $(aragon apm versions | tail -n 1 | cut -d ' ' -f 3)","deploy:dao:rinkeby":"truffle exec scripts/deploy_dao.js --network frame $(aragon apm versions --env rinkeby | tail -n 1 | cut -d ' ' -f 3)","publish":"npm run publish:arachain"},"dependencies":{"@ablack/fundraising-aragon-fundraising":"^1.0.0","@ablack/fundraising-bancor-formula":"^1.0.0","@ablack/fundraising-batched-bancor-market-maker":"^1.0.0","@ablack/fundraising-presale":"^1.0.0","@ablack/fundraising-tap":"^1.0.0","@aragon/apps-agent":"^2.0.0-rc.1","@aragon/apps-finance":"^3.0.0","@aragon/apps-shared-minime":"^1.0.0","@aragon/apps-token-manager":"^2.1.0","@aragon/apps-vault":"^4.1.0","@aragon/apps-voting":"^2.1.0","@aragon/id":"2.0.3","@aragon/os":"4.2.1","@aragon/templates-shared":"1.0.0"},"devDependencies":{"@ablack/fundraising-shared-interfaces":"^1.0.0","@ablack/fundraising-shared-test-helpers":"^1.0.0","@aragon/apps-payroll":"^1.0.0-rc.1","@aragon/apps-survey":"^1.0.0","@aragon/cli":"^6.2.5","@aragon/ppf-contracts":"^1.2.0","@aragon/test-helpers":"^2.0.0","eth-gas-reporter":"^0.2.0","ethereumjs-testrpc-sc":"^6.5.1-sc.0","ganache-cli":"^6.4.3","solium":"^1.2.3","truffle":"4.1.14","truffle-extract":"^1.2.1","web3-eth-abi":"1.2.4"},"description":"## Description Aragon Fundraising Multisig Template differenciate two set actors: the **board** and the **shareholders**.","_id":"@ablack/fundraising-templates-multisig@1.0.0","_nodeVersion":"11.14.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-qXIXLW8aqGBaT1Gg3AaMDvp0gXo1/HobymoE34ePuWI9AJEf7FTGSJtokrQPPEdPh6jG1h0GMv33lOU58VIKOQ==","shasum":"3f22fbc2e5050fd036d9b393ce6c6930dcbab93a","tarball":"https://registry.npmjs.org/@ablack/fundraising-templates-multisig/-/fundraising-templates-multisig-1.0.0.tgz","fileCount":204,"unpackedSize":40964980,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd85iMCRA9TVsSAnZWagAAnk0P/j3qeHVSDmftxkzpzx85\nICDnbq0Mu3gb/3GB9biFcc2vq5tE/L6QlL6/QqY1bxO+Prvv6QP1n1nrVWwH\n5akC8PRT1/SoO+yIhsz4BwhT4hVs1pun8ohsELY1oIe19bbg/V45m9Vte5GB\n6NypdAbHhOqfsYY9MXtLqbIvvq77I0J0Cp/sjNfcSTda3c9iZZXBAs+zL8b9\nP31FflLiAV5tONzSIi7FRyA798bhBpGS7pNveUhKBDwxEs45kJ2XaGBz/v8z\ngkMn/clhrASJbKndmEHgecQlTXkuXKKumlsJYN+wEPf8mCnO0Gq3Lu0fX9Fl\nYlKiJBW+I4Tzg+CUj9VNcbgQcm2WcQirJtMqyvdmOt+BFsem8b2O1F3HKUUb\nEeVY373Ux+P4CrofpMfYRM3hMNmqB4TpSVphi5wBT5iiAzhUvw5tSP5rMY4R\nlKDZGrzO5L6Ec0lJOrw1Ur1/UTAFlE6oaQvfZ+z6Rj4ik8WD1epWjjiLCiqL\nz3a6jN4k8xtzmLLau73Q5TlLhUzEk8pcWhsOR3J0kyQVekAKWIMlW+nnrTJf\n2h4fhJtuwLHPFDCEuLBtpqBHjtBP345zWbleCzwVqZ9DDQ2dB83+UUHKYfyg\nakhwpN738G6l+uBv4kHrxaPAA5xbe7ZpMvSzP40X3wcdf06GMumEh9jyFOrO\nAkES\r\n=Awk3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfngsXJvUn7E8nhILfY+F1vkh4VgcdRSRzYU7QbuCDSgIhAIB39tGYINx7nttBtwsEyhI/0l61x76nHKK9umWKEBVM"}]},"maintainers":[{"name":"osarrouy","email":"olivier@ryhope.network"}],"_npmUser":{"name":"osarrouy","email":"olivier@ryhope.network"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/fundraising-templates-multisig_1.0.0_1576245387543_0.09341161762742933"},"_hasShrinkwrap":false}},"time":{"created":"2019-12-13T13:56:27.345Z","1.0.0":"2019-12-13T13:56:27.881Z","modified":"2022-04-04T10:59:43.666Z"},"maintainers":[{"name":"osarrouy","email":"olivier@ryhope.network"}],"description":"## Description Aragon Fundraising Multisig Template differenciate two set actors: the **board** and the **shareholders**.","homepage":"https://github.com/AragonBlack/fundraising","contributors":[{"name":"Olivier Sarrouy","email":"olivier@aragon.black"}],"author":{"name":"Aragon Assocation","email":"legal@aragon.org"},"license":"(GPL-3.0-or-later OR AGPL-3.0-or-later)","readme":"# Aragon 0.8 Fundraising Multisig Template\n\n## Description\nAragon Fundraising Multisig Template differenciate two set actors: the **board** and the **shareholders**.\n\n### Board\n\nThe 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.\n\n#### Handling board members\n\nThe board decides on who is to be included / excluded from the board [through its `TokenManager`].\n\n#### Opening presale\n\nThe board decides on when the presale [and thus the fundraising campaign] is to be open.\n\n#### Handling fundraising proceeds\n\nThe board decides on what use is to be made of the fundraising proceeds which are periodically transferred to their discretionnary `Vault` / `Finance` app.\n\n#### Opening votes\n\nThe board decides on when new votes should be open for shareholders to enforce decisions over the organization.\n\n\n### Shareholders\n\nThe 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.\n\n#### Handling system\n\nShareholders decide on which apps are to be installed, which apps are to to upgraded and how permissions are to be set.\n\n#### Handling fundraising parameters\n\nShareholders decide on whether / how beneficiary, fees, collateralization settings and collaterals taps should be updated.\n\n### Rationale\n\nThis 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.\n\n\n## Usage\n\n### Prepare instance\n> Deploy a DAO and install all board related apps\n\n```\ntemplate.prepareInstance(boardTokenName, boardTokenSymbol, boardMembers, boardVotingsSettings, financePeriod)\n```\n\n- **boardTokenName** Name for the token used by the board\n- **boardTokenSymbol** Symbol for the token used by the board\n- **boardMembers** Array of board members addresses\n- **boardVotingSettings:** Array of [supportRequired, minAcceptanceQuorum, voteDuration] to set up the board voting app [multisig]\n- **financePeriod** Initial duration for accounting periods of the boards discretionnary vault [it can be set to zero in order to use the default of 30 days]\n\n### Install share apps\n\n```\ntemplate.installShareApps(id, shareTokenName, shareTokenSymbol, shareVotingsSettings)\n```\n\n- **id** Id for org, will assign [id].aragonid.eth\n- **shareTokenName** Name for the token used by the shareholders [the bonded token]\n- **shareTokenSymbol** Symbol for the token used by shareholders [the bonded token]\n- **shareVotingSettings:** Array of [supportRequired, minAcceptanceQuorum, voteDuration] to set up the shareholders voting app [multisig]\n\n### Install fundraising apps\n\n```\ntemplate.installFundraisingApps(\n    goal,\n    period,\n    exchangeRate,\n    vestingCliffPeriod,\n    vestingCompletePeriod,\n    supplyOfferedPct,\n    fundingForBeneficiaryPct,\n    openDate,\n    batchBlocks,\n    maximumTapRateIncreasePct,\n    maximumTapFloorDecreasePct\n)\n```\n\n- **goal** The presale goal\n- **period** The presale period\n- **exchangeRate** The presale exchange rate [in PPM]\n- **vestingCliffPeriod** The cliff period for vested shares purchased during presale\n- **vestingCompletePeriod** The complete period for vested shares purchased during presale\n- **supplyOfferedPct** The percentage of the initial token supply offered to presale's contributors\n- **fundingForBeneficiaryPct** The percentage of the presale raised funds which are to be transferred to the board's discretionnary vault\n- **openDate** The date upon which the presale will be open [if 0, the presale can be open manually later]\n- **batchBlocks** The number of blocks trading batches will last\n- **maximumTapRateIncreasePct** The maximum percentage tap rates can be increased at once\n- **maximumTapFloorDecreasePct** The maximum percentage tap floors can be decreased at once\n\n### Finalize instance\n> Set collateralization settings\n\n```\ntemplate.finalizeInstance(virtualSupplies, virtualBalances, slippages, daiRate, daiFloor)\n```\n\n- **virtualSupplies** Array of [daiVirtualSupply, antVirtualSupply] to set up the market maker\n- **virtualBalances** Array of [daiVirtualBalance, antVirtualBalance] to set up the market maker\n- **slippages** Array of [daiMaxSlippage, antMaxSlippage] to set up the maximum per-batch price slippage in the market maker\n- **daiRate** The rate at which DAIs are to be tapped\n- **daiFloor** The floor above which the DAI reserve pool is to be kept\n\n## Permissions\n\n### System\n_Handle apps and permissions_\n\n| App               | Permission            | Grantee          | Manager          |\n| ----------------- | --------------------- | ---------------- | ---------------- |\n| Kernel            | APP_MANAGER           | Voting `[SHARE]` | Voting `[SHARE]` |\n| ACL               | CREATE_PERMISSIONS    | Voting `[SHARE]` | Voting `[SHARE]` |\n| EVMScriptRegistry | REGISTRY_MANAGER      | Voting `[SHARE]` | Voting `[SHARE]` |\n| EVMScriptRegistry | REGISTRY_ADD_EXECUTOR | Voting `[SHARE]` | Voting `[SHARE]` |\n\n\n### Board\n\n#### TokenManager\n_Represents board's membership_\n\n| App                     | Permission      | Grantee          | Manager          |\n| ----------------------- | --------------- | ---------------- | ---------------- |\n| Token Manager `[BOARD]` | MINT            | Voting `[BOARD]` | Voting `[SHARE]` |\n| Token Manager `[BOARD]` | BURN            | Voting `[BOARD]` | Voting `[SHARE]` |\n| Token Manager `[BOARD]` | ISSUE           | NULL             | NULL             |\n| Token Manager `[BOARD]` | ASSIGN          | NULL             | NULL             |\n| Token Manager `[BOARD]` | REVOKE_VESTINGS | NULL             | NULL             |\n\n#### Voting\n_Enforces board's decisions_\n\n| App              | Permission     | Grantee                 | Manager          |\n| ---------------- | -------------- | ----------------------- | ---------------- |\n| Voting `[BOARD]` | CREATE_VOTES   | Token Manager `[BOARD]` | Voting `[SHARE]` |\n| Voting `[BOARD]` | MODIFY_QUORUM  | Voting `[BOARD]`        | Voting `[SHARE]` |\n| Voting `[BOARD]` | MODIFY_SUPPORT | Voting `[BOARD]`        | Voting `[SHARE]` |\n\n#### Vault and Finance\n_Handle board's funds_\n\n| App     | Permission          | Grantee          | Manager          |\n| ------- | ------------------- | ---------------- | ---------------- |\n| Vault   | TRANSFER            | Finance          | Voting `[SHARE]` |\n| Finance | CREATE_PAYMENTS     | Voting `[BOARD]` | Voting `[SHARE]` |\n| Finance | EXECUTE_PAYMENTS    | Voting `[BOARD]` | Voting `[SHARE]` |\n| Finance | MANAGE_PAYMENTS     | Voting `[BOARD]` | Voting `[SHARE]` |\n| Finance | CHANGE_PERIOD       | NULL             | NULL             |\n| Finance | CHANGE_BUDGETS_ROLE | NULL             | NULL             |\n\n### Share Holders\n\n#### TokenManager\n_Handle shares / bonds minting and burning_\n\n| App                     | Permission      | Grantee              | Manager          |\n| ----------------------- | --------------- | -------------------- | ---------------- |\n| Token Manager `[SHARE]` | MINT            | MarketMaker          | Voting `[SHARE]` |\n| Token Manager `[SHARE]` | BURN            | MarketMaker, Presale | Voting `[SHARE]` |\n| Token Manager `[SHARE]` | ISSUE           | Presale              | Voting `[SHARE]` |\n| Token Manager `[SHARE]` | ASSIGN          | Presale              | Voting `[SHARE]` |\n| Token Manager `[SHARE]` | REVOKE_VESTINGS | Presale              | Voting `[SHARE]` |\n\n\n#### Voting\n_Enforces share holders decisions_\n\n\n| App              | Permission     | Grantee                 | Manager          |\n| ---------------- | -------------- | ----------------------- | ---------------- |\n| Voting `[SHARE]` | CREATE_VOTES   | Token Manager `[BOARD]` | Voting `[SHARE]` |\n| Voting `[SHARE]` | MODIFY_QUORUM  | Voting `[SHARE]`        | Voting `[SHARE]` |\n| Voting `[SHARE]` | MODIFY_SUPPORT | Voting `[SHARE]`        | Voting `[SHARE]` |\n\n\n### Fundraising apps\n\n#### Agent / Reserve\n_Handle market maker funds_\n\n| App  | Permission             | Grantee          | Manager          |\n| ---- | ---------------------- | ---------------- | ---------------- |\n| Pool | SAFE_EXECUTE           | Voting `[SHARE]` | Voting `[SHARE]` |\n| Pool | ADD_PROTECTED_TOKEN    | Controller       | Voting `[SHARE]` |\n| Pool | REMOVE_PROTECTED_TOKEN | NULL             | NULL             |\n| Pool | EXECUTE                | NULL             | NULL             |\n| Pool | DESIGNATE_SIGNER       | NULL             | NULL             |\n| Pool | ADD_PRESIGNED_HASH     | NULL             | NULL             |\n| Pool | RUN_SCRIPT             | NULL             | NULL             |\n| Pool | TRANSFER               | Tap, MarketMaker | Voting `[SHARE]` |\n\n\n#### Presale\n_Handle preliminary sale_\n\n| App     | Permission | Grantee    | Manager          |\n| ------- | ---------- | ---------- | ---------------- |\n| Presale | OPEN       | Controller | Voting `[SHARE]` |\n| Presale | CONTRIBUTE | Controller | Voting `[SHARE]` |\n\n\n#### MarketMaker\n_Handle buy and sell orders_\n\n| App         | Permission              | Grantee    | Manager          |\n| ----------- | ----------------------- | ---------- | ---------------- |\n| MarketMaker | OPEN                    | Controller | Voting `[SHARE]` |\n| MarketMaker | UPDATE_FORMULA          | NULL       | NULL             |\n| MarketMaker | UPDATE_BENEFICIARY      | Controller | Voting `[SHARE]` |\n| MarketMaker | UPDATE_FEES             | Controller | Voting `[SHARE]` |\n| MarketMaker | ADD_COLLATERAL_TOKEN    | Controller | Voting `[SHARE]` |\n| MarketMaker | REMOVE_COLLATERAL_TOKEN | Controller | Voting `[SHARE]` |\n| MarketMaker | UPDATE_COLLATERAL_TOKEN | Controller | Voting `[SHARE]` |\n| MarketMaker | OPEN_BUY_ORDER          | Controller | Voting `[SHARE]` |\n| MarketMaker | OPEN_SELL_ORDER         | Controller | Voting `[SHARE]` |\n\n#### Tap\n_Control the flow of funds from reserve to board_\n\n| App | Permission                            | Grantee    | Manager          |\n| --- | ------------------------------------- | ---------- | ---------------- |\n| Tap | UPDATE_CONTROLLER                     | NULL       | NULL             |\n| Tap | UPDATE_RESERVE                        | NULL       | NULL             |\n| Tap | UPDATE_BENEFICIARY                    | Controller | Voting `[SHARE]` |\n| Tap | UPDATE_MAXIMUM_TAP_RATE_INCREASE_PCT  | Controller | Voting `[SHARE]` |\n| Tap | UPDATE_MAXIMUM_TAP_FLOOR_DECREASE_PCT | Controller | Voting `[SHARE]` |\n| Tap | ADD_TAPPED_TOKEN                      | Controller | Voting `[SHARE]` |\n| Tap | REMOVE_TAPPED_TOKEN                   | NULL       | NULL             |\n| Tap | UPDATE_TAPPED_TOKEN                   | Controller | Voting `[SHARE]` |\n| Tap | RESET_TAPPED_TOKEN                    | Controller | Voting `[SHARE]` |\n| Tap | WITHDRAW                              | Controller | Voting `[SHARE]` |\n\n#### Controller\n_API contract forwarding transactions to relevant contracts_\n\n| App        | Permission                            | Grantee          | Manager          |\n| ---------- | ------------------------------------- | ---------------- | ---------------- |\n| Controller | UPDATE_BENEFICIARY                    | Voting `[SHARE]` | Voting `[SHARE]` |\n| Controller | UPDATE_FEES                           | Voting `[SHARE]` | Voting `[SHARE]` |\n| Controller | ADD_COLLATERAL_TOKEN                  | Voting `[SHARE]` | Voting `[SHARE]` |\n| Controller | REMOVE_COLLATERAL_TOKEN               | Voting `[SHARE]` | Voting `[SHARE]` |\n| Controller | UPDATE_COLLATERAL_TOKEN               | Voting `[SHARE]` | Voting `[SHARE]` |\n| Controller | UPDATE_MAXIMUM_TAP_RATE_INCREASE_PCT  | Voting `[SHARE]` | Voting `[SHARE]` |\n| Controller | UPDATE_MAXIMUM_TAP_FLOOR_DECREASE_PCT | Voting `[SHARE]` | Voting `[SHARE]` |\n| Controller | ADD_TOKEN_TAP                         | Voting `[SHARE]` | Voting `[SHARE]` |\n| Controller | UPDATE_TOKEN_TAP                      | Voting `[SHARE]` | Voting `[SHARE]` |\n| Controller | OPEN_PRESALE                          | Voting `[BOARD]` | Voting `[SHARE]` |\n| Controller | OPEN_TRADING                          | Presale          | Voting `[SHARE]` |\n| Controller | CONTRIBUTE                            | Any              | Voting `[SHARE]` |\n| Controller | OPEN_BUY_ORDER                        | Any              | Voting `[SHARE]` |\n| Controller | OPEN_SELL_ORDER                       | Any              | Voting `[SHARE]` |\n| Controller | WITHDRAW                              | Any              | Voting `[SHARE]` |\n","readmeFilename":"README.md"}