BaseStrategy合約在Allo生態系中作為基礎的構建模組,為更專門的分配策略奠定基礎。通過整合基本功能和變數,這個抽象合約建立了一種標準化的方法來實施不同的分配策略。
宣告變數:
allo: 對IAllo合約的不可變參考,使其能夠與Allo生態系互通。
poolId: 識別與此strategy相關的pool。
strategyId: 識別strategy實例的哈希。
poolAmount: pool中當前的代幣數量。
poolActive: 一個標誌,指示pool是否活躍。
定義修飾子(modifier):
onlyAllo: 驗證呼叫者是否為Allo合約。
onlyPoolManager: 確保呼叫者是pool管理器。
onlyActivePool: 只有當pool處於活動狀態時才允許操作。
onlyInactivePool: 只有當pool處於非活動狀態時才允許操作。
onlyInitialized: 要求strategy已初始化。
view/query function
getAllo: 檢索IAllo合約參考位址。
getPoolId: 檢索pool的ID。
getStrategyId: 檢索strategy的ID。
getPoolAmount: 檢索當前pool金額。
isPoolActive: 檢查pool是否活躍。
getRecipientStatus: 檢索接收者的狀態。
External Functions
increasePoolAmount: 允許Allo合約增加池的金額。
registerRecipient: 註冊接收者的應用程序並更新其狀態。
allocate: 根據提供的數據為接收者分配代幣。
distribute: 根據提供的數據向接收者分發代幣。
getPayouts: 檢索接收者和數據對的支付摘要。
isValidAllocator: 驗證地址是否為有效的分配器。
Internal Functions
_setPoolActive: 設置池的活動狀態。
_isPoolActive: 檢查池是否目前處於活動狀態。
_isValidAllocator: 驗證地址為有效的分配器。
_registerRecipient: 註冊接收者的應用程序並更新其狀態。
_allocate: 根據提供的數據為接收者分配代幣。
_distribute: 根據提供的數據向接收者分發代幣。
_getPayout: 檢索接收者和數據對的支付摘要。
_getRecipientStatus: 檢索接收者的狀態。策略可以選擇擁有其狀態,只要它返回IStrategy.Status。
在BaseStrategy.sol的上下文中,Hooks的概念被用來為策略提供無縫地將其自定義邏輯整合到另一策略的操作中的能力。Hooks由執行各種功能期間的預定義點組成,可以在這些點插入額外的代碼以修改或增強行為。
_beforeFundPool:在增加池金額之前觸發此鉤子。它允許策略在為池子做出貢獻之前執行特定的操作或檢查。
_afterIncreasePoolAmount:在增加池金額之後,執行此鉤子。它使策略能夠在增加池金額之後執行任何必要的操作。
_beforeRegisterRecipient:在註冊接收者之前,調用此鉤子。它為策略提供了在添加接收者之前實施其自己的邏輯的機會。
_afterRegisterRecipient:與之前的鉤子類似,這在註冊接收者之後執行。策略可以使用此來在接收者註冊之後執行任務。
_beforeAllocate:在向接收者分配資金之前,觸發此鉤子。策略可以在此定義其自己的預分配操作。
_afterAllocate:一旦完成對接收者的分配,就會調用此鉤子。它允許策略在分配後執行操作。
_beforeDistribute:此鉤子在向接收者分發資金(或代幣)之前發生。策略可以在分發之前自定義其行為。
_afterDistribute:在向接收者分發資金之後,執行此鉤子。策略可以在分發過程結束後執行任務。
這些Hooks的重要性在於,它們促進了基礎策略操作的擴展和自定義,而無需修改核心邏輯。策略可以在這些特定點實施其獨特的功能,確保無縫地整合到現有策略的工作流程中。
本質上,BaseStrategy.sol為策略提供了一種結構化的方式,在另一策略的執行的關鍵步驟之前和之後注入其自己的邏輯,促進模塊化,並以模塊化和有凝聚力的方式允許多樣化的功能。
通過遵循這種模式,開發人員可以高效地創建專門的分配策略,這些策略利用BaseStrategy合約提供的標準化構建塊,同時根據其用例需要定制特定功能。這種模塊化方法促進了Allo框架內的分配策略的健壯生態系,使得創新和高效的資源分配解決方案成為可能。
看原始碼約291行以後皆是宣告+確立傳入傳出值後尚未實作,各個strategies預計應該是此處不同;整體包含重要大功能即各自Hooks要檢查的項目