Created
December 7, 2018 16:10
-
-
Save osarrouy/3b087d5aae38330e640c1c18b4b47dbe to your computer and use it in GitHub Desktop.
Weird bug in custom DAOKit
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity 0.4.24; | |
import "@aragon/os/contracts/factory/DAOFactory.sol"; | |
import "@aragon/os/contracts/apm/Repo.sol"; | |
import "@aragon/os/contracts/lib/ens/ENS.sol"; | |
import "@aragon/os/contracts/lib/ens/PublicResolver.sol"; | |
import "@aragon/os/contracts/evmscript/IEVMScriptRegistry.sol"; // needed for EVMSCRIPT_REGISTRY_APP_ID | |
import "@aragon/os/contracts/apm/APMNamehash.sol"; | |
import "@aragon/apps-shared-minime/contracts/MiniMeToken.sol"; | |
import "@aragon/apps-voting/contracts/Voting.sol"; | |
import "@aragon/apps-vault/contracts/Vault.sol"; | |
import "@aragon/apps-token-manager/contracts/TokenManager.sol"; | |
import "@aragon/apps-finance/contracts/Finance.sol"; | |
contract KitBase is APMNamehash, EVMScriptRegistryConstants { | |
ENS public ens; | |
DAOFactory public fac; | |
event DeployInstance(address dao); | |
event InstalledApp(address appProxy, bytes32 appId); | |
constructor (DAOFactory _fac, ENS _ens) { | |
ens = _ens; | |
if (address(_fac) == address(0)) { | |
bytes32 bareKit = apmNamehash("bare-kit"); | |
fac = KitBase(latestVersionAppBase(bareKit)).fac(); | |
} else { | |
fac = _fac; | |
} | |
} | |
function latestVersionAppBase(bytes32 appId) public view returns (address base) { | |
Repo repo = Repo(PublicResolver(ens.resolver(appId)).addr(appId)); | |
(,base,) = repo.getLatest(); | |
return base; | |
} | |
} | |
contract Kit is KitBase { | |
MiniMeTokenFactory tokenFactory; | |
/* uint64 constant PCT = 10 ** 16; */ | |
constructor(ENS ens) KitBase(DAOFactory(0), ens) { | |
tokenFactory = new MiniMeTokenFactory(); | |
} | |
function newInstance() public { | |
bytes32[4] memory appIds = [ | |
apmNamehash("voting"), // 0 | |
apmNamehash("vault"), // 1 | |
apmNamehash("finance"), // 2 | |
apmNamehash("token-manager") // 3 | |
]; | |
Kernel dao = fac.newDAO(this); | |
ACL acl = ACL(dao.acl()); | |
acl.createPermission(this, dao, dao.APP_MANAGER_ROLE(), this); | |
MiniMeToken token = tokenFactory.createCloneToken(MiniMeToken(0), 0, "Native Governance Token", 0, "NGT", true); | |
Voting voting = Voting( | |
dao.newAppInstance( | |
appIds[0], | |
latestVersionAppBase(appIds[0]) | |
) | |
); | |
emit InstalledApp(voting, appIds[0]); | |
Vault vault = Vault( | |
dao.newAppInstance( | |
appIds[1], | |
latestVersionAppBase(appIds[1]), | |
new bytes(0), | |
true | |
) | |
); | |
emit InstalledApp(vault, appIds[1]); | |
Finance finance = Finance( | |
dao.newAppInstance( | |
appIds[2], | |
latestVersionAppBase(appIds[2]) | |
) | |
); | |
emit InstalledApp(finance, appIds[2]); | |
TokenManager tokenManager = TokenManager( | |
dao.newAppInstance( | |
appIds[3], | |
latestVersionAppBase(appIds[3]) | |
) | |
); | |
vault.initialize(); | |
finance.initialize(vault, 10 days); | |
emit DeployInstance(dao); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment