newsence
草案 ERC:代理人保證協定 (Agent Assurance Protocol)

草案 ERC:代理人保證協定 (Agent Assurance Protocol)

Ethereum Magicians·8 天前

代理人保證協定 (AAP) 引入了一種標準化的鏈上原語,允許 AI 代理人鎖定自籌資金作為特定任務的履行保證,解決了當任務失敗時,現有機制無法補償間接損失的問題。

一個代理人(Agent)支付了 10,000 美元進行數據分析工作,但該工作從未交付。雖然託管資金已退還,但依賴該結果的下游價值可能已經損失。

目前尚無標準的鏈上原語(primitive)能讓服務提供者針對特定工作預先提交抵押品,並在工作失敗時提供標準化的索賠路徑。

本草案提出了 代理人保證協定(Agent Assurance Protocol, AAP):這是一個讓代理人能鎖定自身資本,作為特定工作履行保證的標準,並在觸發該保證時提供可程式化的索賠生命週期。

AAP 建立在 ERC-8183(代理人商業)之上。ERC-8183 處理工作執行和託管結算,但止步於退款。AAP 則增加了上一層:自籌資金的抵押承諾、保障類型以及索賠解決流程。整合方式為唯讀:AAP 觀察 ERC-8183 的工作狀態,而不修改 ERC-8183 合約。它也可以選擇性地與 ERC-8004 整合,用於身份門檻控管和解決者(resolver)準確性追蹤。

缺口

ERC-8183 涵蓋了正常路徑和基礎失敗路徑(退款)。它不涵蓋:

提供者未交付導致的間接損失:客戶獲得退款,但未能就該工作預期產生的價值獲得補償。

評估者錯誤:錯誤的拒絕或欺詐性的批准,使受影響方缺乏標準化的追索路徑。

完成後結算失敗:工作已完成並經過證明,但由於受保代理人的行為,資金仍無法釋放。

代理人也無法實際進入傳統的保證金或擔保市場。目前缺失的是一個標準原語,用於:「我針對工作 Y 鎖定 X 金額,如果我在定義的條件下失敗,你可以對該鎖定的抵押品提出索賠。」

AAP 標準化的內容

AAP 引入了三個原語:

AssuranceAccount:每個代理人獨立的自籌資金抵押儲備金。

JobAssurance:與特定 ERC-8183 工作掛鉤的承諾分配。

Claim:當滿足保障條件時的付款請求。

三種強制性保障類型:

保障類型涵蓋內容
JobFailure提供者未交付;工作達到拒絕或過期的終端狀態
EvaluatorDispute評估者的決定透過正式爭議狀態或公認的鏈上爭議證明受到質疑
SettlementDefault可歸因於受保代理人的完成後結算失敗

另外兩種類型(AMLFreeze、SlashingLoss)為擴展預留,以確保跨實現的編碼穩定性。

不是池化保險。每個代理人使用自己的資本支持其承諾。在核心模型中,沒有共享的承保池,也沒有第三方保險人。

核心接口

interface IAAP {
    // 帳戶生命週期
    function depositAssurance(uint256 amount) external;
    function withdrawAvailableAssurance(uint256 amount) external;
    function getAssuranceAccount(address agent) external view returns (AssuranceAccount memory);

    // 保證生命週期
    function commitToJob(
        bytes32 jobId,
        CoverageType coverageType,
        address beneficiary,
        uint256 amount,
        uint64 expiry
    ) external returns (bytes32 assuranceId);

    function releaseCommitment(bytes32 assuranceId) external;
    function expireCommitment(bytes32 assuranceId) external;
    function getJobAssurance(bytes32 assuranceId) external view returns (JobAssurance memory);

    // 索賠生命週期
    function fileClaim(
        bytes32 assuranceId,
        uint256 requestedAmount,
        bytes calldata evidence
    ) external returns (bytes32 claimId);

    function resolveClaim(
        bytes32 claimId,
        bool approved,
        uint256 approvedAmount,
        bytes calldata reason
    ) external;

    function payout(bytes32 claimId) external;
    function getClaim(bytes32 claimId) external view returns (Claim memory);
}

關鍵會計不變量:

totalFunded == availableAmount + lockedAmount + paidOutAmount

此不變量必須在每次狀態變更操作後保持成立。

設計決策

自籌資金而非池化:每個代理人從其自身的 AssuranceAccount 支持其承諾。

每個 JobAssurance 僅限單次索賠:這是刻意的反垃圾郵件設計選擇;重新申請需要先釋放或過期先前的保證。

無許可的 payout():一旦索賠獲批,任何人都可以觸發結算(守護機器人、受益人、解決者)。

嚴格的資不抵債語義:payout() 會回滾(revert)而非進行部分支付;核心模型優先保持會計不變量而非可用性。

預留委託資金:v1 僅限自籌資金;第三方支持預留給未來的擴展。

可選擴展可能包括抵押建議鉤子 (IRiskHook)、AML 篩查 (IAMLHook)、多解決者裁決、樂觀解決方案以及解決者質押/罰沒(slashing)。

草案規範:(即將加入 PR 連結)

開放性問題

我特別希望能獲得關於以下內容的反饋:

SettlementDefault 的可驗證性:此保障類型取決於歸因。在實踐中,僅從原始鏈上狀態很難區分「代理人過失」與「基礎設施故障」。要求公認的鏈上證明是否為正確的最低門檻?或者 SettlementDefault 應該是可選的而非核心標準中的強制項?

拒絕後更新的順序:在索賠被拒絕後,先前的 JobAssurance 會恢復為 Active 狀態並保留 claimId,這會阻止重新提交和重複的 commitToJob()。因此,更新需要先釋放或過期。這是否為正確的順序?或者是否應該有一個明確的快捷方式,例如 forfeitCommitment()?

擴展預留的列舉(enum)模式:AMLFreeze 和 SlashingLoss 被包含在核心 CoverageType 列舉中以確保編碼穩定性,但對它們的支持是可選的。這是否為正確的模式?或者可選的保障類型應該存在於獨立的擴展列舉中?

這些問題的主要設計拉鋸在於:索賠資格應有多少程度在核心 ERC 中標準化,又有多少應留給具體實現的政策。非常歡迎提供反饋。

        1 則貼文 - 1 位參與者

        [閱讀完整主題](https://ethereum-magicians.org/t/draft-erc-agent-assurance-protocol/28097)
https://ethereum-magicians.org/t/draft-erc-agent-assurance-protocol/28097