Sui.

帖子

分享您的知识。

赏金+15

Xavier.eth.
Jun 27, 2025
专家问答

Sui 事务失败:为另一笔交易保留的对象

我在JsonRpcError尝试在 Sui 上执行交易时遇到了持久问题. 该错误表明对象是为另一个事务保留的,尽管我已经实现了延迟的顺序事务处理.

JsonRpcError: Failed to sign transaction by a quorum of validators because one or more of its objects is reserved for another transaction. Other transactions locking these objects:
- AV7coSQHWg5vN3S47xada6UiZGW54xxUNhRv1QUPqWK (stake 33.83)
    - 0x1c20f15cbe780ee7586a2df90c1ab70861ca77a15970bea8702a8cf97bd3eed9
    - 0x1c20f15cbe780ee7586a2df90c1ab70861ca77a15970bea8702a8cf97bd3eed9
    - 0x1c20f15cbe780ee7586a2df90c1ab70861ca77a15970bea8702a8cf97bd3eed9

我试过了: -顺序事务执行(等待前一笔交易完成) -增加了交易之间的 3 秒延迟

而且仍然会持续出现同样的错误.

使用 Sui RPC 提交交易. 同一个对象 ID 在锁定列表中多次出现. 即使仔细安排交易顺序,也会出现错误.

  1. 是什么导致对象被 “保留” 用于其他交易?
  2. 在交易中使用对象之前,如何正确检查对象是否可用? 3.是否有在 Sui 中处理对象锁的最佳实践?
  3. 这可能与交易终结时间有关吗?

以前有人遇到过这个问题吗?如果您对Sui交易中的适当对象管理有任何见解,将不胜感激!

  • Sui
  • Transaction Processing
  • Move
2
4
分享
评论
.

答案

4
Owen.
Owen496
Jun 30 2025, 11:03

Sui 使用乐观并发控制,这意味着在事务中使用对象时会被锁定,直到该事务完成或到期.

即使你在两次事务之间等待 3 秒钟,如果前一个事务尚未完成,对象仍处于锁定状态. 这意味着交易仍处于待处理状态,并且持有对该对象的独占访问权限.


如何检查对象是否可用

使用 Sui RPC 方法:

sui_getObject

查看"status": "Locked"或的回复"owner": "locked".

请求示例:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "sui_getObject",
  "params": ["0x...object_id..."]
}

如果已锁定,请稍等片刻,稍后重试.

4
评论
.
0xduckmove.
Jun 30 2025, 07:04

嘿,你尝试的交易速度太快了,对象被锁定了.

尝试一次发送一个包含相同对象的交易,如果你发送两个交易,一些验证者可能会接受第一笔交易,有些验证者可能会接受第二笔交易,而你的对象将被锁定,因为每笔交易需要66.7%的验证器,而你可能只得到50%.

=> 等着纪元重置,很快就到了

查看更多:https://forums.sui.io/t/beginner-tutorial-error-when-deploying-simple-sui-package/44842

3
评论
.
MiniBob.
Jun 30 2025, 11:50

该错误表示您的事务使用的对象仍被先前尚未完成的事务锁定. 即使有延迟,在这些交易在链上完成之前,对象仍会被保留.

要修复:

  1. 在再次使用对象之前,请务必确认先前涉及对象的交易已完全完成.
  2. 通过 Sui RPC 检查物体状态,确保它们已解锁. 3.避免在相同的对象上发送并行或快速交易.
  3. 使用退避和最终性检查来实现重试,而不是固定延迟.

这种锁定可以防止更新冲突,这在 Sui 的对象模型中是正常的. JsonRpcError正确的排序和最终性确认是避免的关键.

3
评论
.
harry phan.
Jun 30 2025, 15:00

如果您尝试同时运行两个事务(例如,在前一个事务完成之前启动一个),就会发生此错误. 如果您重试运行发布事务,但之前或同时未运行其他事务,则该事务应该会成功. 你可能还需要从水龙头中获取更多的气体(或者等一天——等待时代结束——物体才能解锁)

当您运行涉及您的地址拥有的对象(例如气体对象)的交易时,验证器会保留该对象的最新版本供其签署的交易使用. 如果你尝试同时运行两个交易,并且它们引用同一个对象,那么它们将相互竞争以获取验证者的签名. 幸运的是,其中一笔交易获胜并运行,而另一笔交易未能获得足够的签名. 在不愉快的情况下,两笔交易都可能无法获得足够的签名(如果两笔交易都获得了验证者三分之一以上的签名,则任何一笔交易都无法超过三分之二,这是阈值),这被称为模棱两可,从那时起,作为两笔交易输入的对象不能用于任何其他交易.

在时代结束时(它们大约持续一天——你可以在 https://suiexplorer.com 上查看下一个纪元变更的进度),所有锁都被释放,所以你可以再次使用这些物体,但是如果你自上次尝试以来没有发生过纪元变化,你将需要获得更多的汽油.

3
评论
.

你知道答案吗?

请登录并分享。

Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.

351帖子497答案
Sui.X.Peera.

赚取你的 1000 Sui 份额

获取声誉积分,并因帮助 Sui 社区成长而获得奖励。

奖励活动七月