您当前的位置: 首页 >  ar

MateZero

暂无认证

  • 3浏览

    0关注

    92博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Aragon DAO 智能合约一览

MateZero 发布时间:2019-12-29 18:48:36 ,浏览量:3

近年来,区块链技术的快速发展催生了去中心化自治组织(DAO)。目前比较典型的DAO有The DAO、Steemit、Digix DAO、Aragon 等。其中建立在 Aragon上的智能合约系统被称为 AragonOS。

Aragon 其实是一个道平台,任何人都可以在上面创建和管理DAO。它通过注册Dapp的方式来扩展DAO的功能或者应用,目前已经提供了五个公共应用的示例实现,任何DAO都可以自己开发Dapp并注册用来扩展DAO。 本文主要列举Aragon用来创建和管理DAO这部分的框架合约(AragonOS),不包括测试合约。 AragonOS 使用 truffle构建工程,所有合约放在contracts目录下。

一、acl文件夹
  1. acl/IACL.sol 一个接口,只定义了初始化和是否有权限这两个函数
  2. acl/IACLOracle.sol 一个接口,只有一个是否能执行的函数
  3. acl/ACLSyntaxSugar.sol 语法糖 就是快速将bytes32、uint、或者address转换后放入一个uint数组并返回
  4. acl/ACLHelpers.sol 用来解码一些数据
二、common文件夹
  1. common/IForwarder.sol 一个接口,用来进行Forwarder相关的判定
  2. common/IForwarderFee.sol 一个定义forward费用的接口
  3. common/Uint256Helpers.sol 将一个uint256转化为uint64的库,当溢出时会报错
  4. common/TimeHelpers.sol 获得当前块高度和当前块创建时间,返回uint256和uint64两个版本
  5. common/UnstructuredStorage.sol 一个库,使用内联汇编来获取或者设置某个地址的数据,根据数据类型分成多个方法
  6. common/Initializable.sol 继承TimeHelper,初始化继承时间,语义上怪怪的。用来判断是否初始化和进行初始化,使用blockNumber判断,而不是平常使用一个变量判断(也许是因为有延时初始化功能)
  7. common/IsContract.sol 很简单的通过地址的代码长度用来决定是不是合约账号
  8. common/Petrifiable.sol 使用uint256最大值来设置延时初始化的blockNuber,永远也不会达到,一般用来石化合约
  9. common/Autopetrified.sol 在部署时石化Petrifiable合约实例,使之不能初始化
  10. common/ConversionHelpers.sol 一个库,用来uint256[]和bytes 的相互转换
  11. common/DepositableStorage.sol 读取或设置是否可以存款(发送ETH到某个合约)
  12. common/EtherTokenConstant.sol 用地址0代表eth,非地址0代表erc20代币
  13. common/IVaultRecoverable.sol 一个接口,用来指明资产保险箱合约
  14. common/VaultRecoverable.sol 用来转移资产(ETH和ERC20代币)注意该合约包含未实现方法,因此为一个抽象的合约(0.6.0才有abstract关键字),不能部署
  15. common/SafeERC20.sol 一个用来安全转移erc20代币的库
  16. common/ReentrancyGuard.sol 防止重入攻击,类似线程锁的方式,转移前设置变量为true,转移全部完成后设置变量为false
  17. comon/DelegateProxy.sol 委托调用并且返回执行环境
  18. common/DepositableDelegateProxy.sol 向合约发送eth并进行验证和委托调用
三、 lib文件夹
  1. lib/ens/AbstractENS.sol 以太坊上的域名系统(ENS)接口
  2. lib/ens/ENS.sol ENS的实现
  3. lib/ens/PublicResolver.sol 一个简单的使用ENS的实现
  4. lib/math/Math.sol 一个进行比较的数学库
  5. lib/math/SafeMath.sol 对两个uint256进行防溢出算术操作(除法其实没有用处,为了统一还是存在库中)
  6. lib/math/SafeMath8.sol 同上,适用于uint8
  7. lib/math/SafeMath64.sol 同上,适用于uint64
  8. lib/misc/ERCProxy.sol 用来定义ERC代理的一些常量和接口
  9. lib/misc/Migrations.sol truffle自带的管理合约…😂
  10. lib/token/ERC20.sol ERC20代币接口定义
四、kernel文件夹
  1. kernel/IKernel.sol 核心合约接口,用来设置app
  2. kernel/KernelConstants.sol 用来定义一些核心AppId和命名空间的常量
  3. kernel/KernelStorage.sol 定义app的保存
  4. kernel/KernelProxy.sol 核心代理的实现
  5. kernel/Kernel.sol 核心合约的实现,包括创建和设置app,提供给外界一些查询接口
五、factory文件夹
  1. factory/DAOFactory.sol DAO工厂,用来产生DAO
  2. factory/APMRegisteryFactory.sol 用来注册APM,Aragon Package Manager(DAO)
  3. factory/AppProxyFactory.sol 用来产生一个AppProxy,分为可升级版和压制版(向前?)
  4. ENS工厂,注意它的警告,仅测试APM使用
  5. 以太坊虚拟机脚本注册工厂,注意返回的是一个合约类型。
六、apps文件夹
  1. apps/UnsafeAragonApp.sol 移除石化,注意它的警告,未使用代理功能,是unsafe的。
  2. apps/AppStorage.sol 用来读取和设置核心合约的地址和appId的值
  3. apps/AppProxyBase.sol App代理基类合约,用来派生出可升级版和压制版(向前?)
  4. apps/AppProxyPinned.sol 压制版(向前指向)App代理实现
  5. apps/AppProxyUpgradeable.sol 可升级版App代理实现
  6. apps/AragonApp.sol AragonApp实现,强制使用了代理,注意和UnsafeAragonApp比较
七、apm文件夹
  1. apm/Repo.sol 继承AragonApp,可以从外部初始化(不是构造器中)
  2. apm/APMRegistry.sol 用来注册APM,APMRegisteryFactory的底层实现
  3. 根据apm的名字返回编码后的哈希值(bytes32类型)
八、evmscript文件夹
  1. evmscript/executors/BaseEVMScriptExecutor.sol 定义脚本开始位置
  2. evmscript/executors/CallsScript.sol 执行脚本的实现
  3. evmscript/EVMScriptRegistry.sol 脚本执行管理功能
  4. evmscript/EVMScriptRunner.sol 运行脚本
  5. evmscript/IEVMScriptExecutor.sol 定义执行脚本的接口
  6. evmscript/IEVMScriptRegistry.sol 定义脚本注册的常量和接口
  7. evmscript/ScriptHelpers.sol 一个脚本帮助库
九、test文件夹

此文件夹内容为测试合约(略)

不正确之处欢迎大家积极留言指正。

合约GITHUB地址:https://github.com/aragon/aragonOS

关注
打赏
1648304347
查看更多评论
立即登录/注册

微信扫码登录

0.0711s