Skip to content

Instantly share code, notes, and snippets.

@osarrouy
Created December 7, 2018 16:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save osarrouy/3b087d5aae38330e640c1c18b4b47dbe to your computer and use it in GitHub Desktop.
Save osarrouy/3b087d5aae38330e640c1c18b4b47dbe to your computer and use it in GitHub Desktop.
Weird bug in custom DAOKit
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