Aragon DAO 智能合約一覽

近年來,區塊鏈技術的快速發展催生了去中心化自治組織(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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章