XRP Ledger主网已经启用三项修正,它们共同改变了一件事:一次签名到底能授权多少操作。对签署XRPL交易的AI代理、以及把交易展示给用户的钱包来说,过去那套检查方式已经不够用了。
如果只检查最外层的TransactionType,看到Batch就以为看完了,那内层交易里藏了什么,根本不会被发现。
Batch:2到8笔交易,一次签名打包
Batch(XLS-56)把2到8笔内层交易包在一次签名之下。一个模式标志决定其中一笔失败时怎么办:全有或全无(tfAllOrNothing)、只执行第一笔成功的(tfOnlyOne)、执行到第一次失败为止(tfUntilFailure),或者各自独立执行(tfIndependent)。内层交易也可以来自其他账户,由这些账户在BatchSigners中签名。
它能藏住什么:一笔普通交易能做的任何事,都可以挨着一件看似无害的操作出现。一笔小额支付,加上一个指向别人密钥的SetRegularKey,就等于把账户交了出去——效果和单独一笔SetRegularKey一样。带其他签名者的SignerListSet、AccountDelete,同理。
检查要点:
- 把每一笔内层交易都当作单独签名来审。
- 内层交易来自多个账户时,看模式。只要不是全有或全无,你这一部分可能成功,而对方那部分失败。
- 一个Batch必须包含2到8笔交易,只设置一个模式标志,且不能再嵌套Batch。
对一个“向商店付款并设置常规密钥”的Batch,预签名检查工具presign-guard在主网上返回了红色判定。原因里列出两项:一是XRPL_BATCH,标注模式为tfAllOrNothing,交易为Payment和SetRegularKey;二是XRPL_REGULAR_KEY_CHANGE,严重级别为红色,说明该常规密钥可以为账户签署每一笔交易,包括转走全部资金。details.inner标明的是该内层交易在RawTransactions中的位置。
权限委托:谁能替你签名
DelegateSet允许另一个账户(受托方)为你的账户签署特定类型的交易,花你的资金,直到你撤销这项权限。它最多接受10项权限:可以是Payment这样的交易类型,也可以是TrustlineAuthorize这样的细粒度权限。账本会拒绝账户级别的类型(SetRegularKey、SignerListSet、AccountSet、AccountDelete),空列表则清除全部权限。
它能藏住什么:受托方不需要你的任何密钥。拿到Payment权限,它可以付钱给自己;拿到CheckCreate、EscrowCreate或支付通道权限,它可以给你开一张自己能兑现的支票、托管或通道;拿到OfferCreate或NFT报价权限,它可以拿你的资金按任意价格和自己的报价成交。
检查要点:受托方是谁,以及是否有任何权限能动用资金。把这类权限委托出去,只应交给你能控制的账户,比如你自己那个只放小额预算的代理账户。presign-guard把动用资金的权限标为红色(XRPL_DELEGATE_FUNDS),其他权限标为橙色(XRPL_DELEGATE_SET)。
MPT:把发行方规则写进代币
MPT发行时一次性写入规则标志:发行方能否收回代币、能否锁定、是否要求授权、持有者之间能否互相转账,以及最高50%的转账费。持有者通过MPTokenAuthorize选择加入。发行ID由发行方的序列号加上其账户ID构成,因此从ID本身就能读出发行方是谁。
- 选择加入之前:发行方能否收回?是否已锁定代币?收取多少费用?这次发行是否存在?任何非Ripple主体发行的RLUSD代码,都是假的。
- 支付MPT之前:发行方已锁定代币或目标余额、持有者之间不允许转账、目标未选择加入或未获授权,这些情况下支付都会失败。
代理怎么查
presign-guard的MCP服务器提供一个免费工具presign_quick_check,只返回判定结果,输入格式为{"type": "xrpl", "tx": {…}}。需要附带原因说明时,用presign_check,费用0.01美元,或向接口POST请求,通过x402以XRP Ledger上的RLUSD、或Base、Solana、Algorand、Stellar上的USDC支付。
在代理自己的钱包里,presign-guard-wallet 0.23会在每次XRPL签名前执行检查。xrplSigner(signer, { any: true })只在检查通过后才签署信任线、去中心化交易所订单和Batch,并把可能被转走的金额计入代理的支出限额。
规则很直接:绿色就签;橙色先读原因;红色不签。
热门跟贴