newsence
ERC-8210:自主 AI 代理的代理保證協定

ERC-8210:自主 AI 代理的代理保證協定

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():一旦索賠獲批,任何人都可以觸發結算(Keeper 機器人、受益人、解決者)。
  • 嚴格的資不抵債語義:payout() 會直接回退(revert)而非進行部分支付;核心模型優先保持會計不變量而非活性(liveness)。
  • 保留委託資金功能: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/erc-8210-agent-assurance/28097)
https://ethereum-magicians.org/t/erc-8210-agent-assurance/28097