Sui.

Bài viết

Chia sẻ kiến thức của bạn.

Tiền thưởng+15

Xavier.eth.
Jun 27, 2025
Hỏi đáp Chuyên Gia

Giao dịch Sui thất bại: Đối tượng được dành riêng cho giao dịch khác

Tôi gặp phải một sự kiên trì JsonRpcErrorkhi cố gắng thực hiện giao dịch trên Sui. Lỗi chỉ ra rằng các đối tượng được dành riêng cho một giao dịch khác, mặc dù tôi đã thực hiện xử lý giao dịch tuần tự với độ trễ.

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

Tôi đã thử:

  • Thực hiện giao dịch tuần tự (chờ giao dịch trước hoàn thành)
  • Thêm độ trễ 3 giây giữa các giao dịch

Và vẫn gặp phải lỗi tương tự một cách nhất quán.

Sử dụng Sui RPC để gửi giao dịch. Cùng một ID đối tượng xuất hiện nhiều lần trong danh sách khóa. Lỗi xảy ra ngay cả với trình tự giao dịch cẩn thận.

  1. Điều gì khiến các đối tượng bị “dành riêng” cho các giao dịch khác?
  2. Làm thế nào tôi có thể kiểm tra chính xác xem một đối tượng có sẵn hay không trước khi sử dụng nó trong một giao dịch?
  3. Có những phương pháp hay nhất để xử lý khóa đối tượng ở Sui không?
  4. Điều này có liên quan đến thời điểm cuối cùng của giao dịch không?

Có ai gặp phải vấn đề này trước đây không? Bất kỳ thông tin chi tiết nào về quản lý đối tượng phù hợp trong giao dịch Sui sẽ được đánh giá cao!

  • Sui
  • Transaction Processing
  • Move
2
4
Chia sẻ
Bình luận
.

Câu trả lời

4
Owen.
Owen496
Jun 30 2025, 11:03

Sui sử dụng**kiểm soát đồng thời lạc quan, nghĩa là các đối tượng bị khóa khi được sử dụng trong giao dịch cho đến khi giao dịch đó được hoàn tất hoặc hết hạn.

Ngay cả khi bạn đợi 3 giây giữa các giao dịch, nếu giao dịch trước đó chưa được hoàn tất, đối tượng vẫn bị khóa. Điều này có nghĩa là giao dịch vẫn đang chờ xử lý và giữ quyền truy cập độc quyền vào đối tượng.


Cách kiểm tra xem một đối tượng có sẵn không

Sử dụng phương pháp Sui RPC:

sui_getObject

Kiểm tra phản hồi cho "status": "Locked"hoặc"owner": "locked".

Yêu cầu ví dụ:

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

Nếu bị khóa, chỉ cần đợi thêm và thử lại sau.

4
Bình luận
.
0xduckmove.
Jun 30 2025, 07:04

Này, bạn đang cố gắng thực hiện một giao dịch quá nhanh và các đối tượng bị khóa.

Cố gắng gửi một giao dịch với cùng một đối tượng tại một thời điểm, nếu bạn gửi hai giao dịch, một số trình xác thực có thể chấp nhận giao dịch đầu tiên, một số có thể chấp nhận giao dịch thứ hai và đối tượng của bạn sẽ bị khóa vì mỗi giao dịch cần 66,7% trình xác thực và bạn có thể chỉ nhận được 50%.

=> chỉ cần chờ thiết lập lại kỷ nguyên, nó sẽ sớm

Kiểm tra thêm: https://forums.sui.io/t/beginner-tutorial-error-when-deploying-simple-sui-package/44842

3
Bình luận
.
MiniBob.
Jun 30 2025, 11:50

Lỗi có nghĩa là các đối tượng giao dịch của bạn sử dụng vẫn bị khóa bởi các giao dịch trước đó chưa hoàn tất. Ngay cả với sự chậm trễ, các đối tượng vẫn được bảo lưu cho đến khi các giao dịch đó hoàn thành trên chuỗi.

Để sửa chữa:

  1. Luôn xác nhận các giao dịch trước đó liên quan đến các đối tượng đã hoàn tất đầy đủ trước khi sử dụng lại chúng.
  2. Kiểm tra trạng thái đối tượng thông qua Sui RPC để đảm bảo chúng đã được mở khóa.
  3. Tránh gửi các giao dịch song song hoặc nhanh chóng trên cùng một đối tượng.
  4. Thực hiện các lần thử lại với kiểm tra lùi và kiểm tra tính cuối cùng thay vì độ trễ cố định.

Việc khóa này ngăn chặn các cập nhật mâu thuẫn và là bình thường trong mô hình đối tượng của Sui. JsonRpcErrorTrình tự thích hợp và xác nhận tính cuối cùng là chìa khóa để tránh.

3
Bình luận
.
harry phan.
Jun 30 2025, 15:00

Lỗi này xảy ra nếu bạn thử và chạy hai giao dịch cùng một lúc (ví dụ: bắt đầu một giao dịch trước khi giao dịch trước kết thúc). Nếu bạn thử lại chạy giao dịch xuất bản mà không chạy giao dịch khác trước hoặc cùng một lúc, giao dịch sẽ thành công. Bạn cũng có thể cần phải lấy thêm khí từ vòi (hoặc đợi một ngày - để kỷ nguyên lật lại - để các vật thể được mở khóa)

Khi bạn chạy một giao dịch liên quan đến các đối tượng mà địa chỉ của bạn sở hữu (như các đối tượng gas), các trình xác thực sẽ giữ lại phiên bản mới nhất của đối tượng được sử dụng bởi giao dịch mà nó đang ký. Nếu bạn thử và chạy hai giao dịch đồng thời và chúng đề cập đến cùng một đối tượng, thì chúng sẽ cạnh tranh với nhau để lấy chữ ký từ trình xác thực. Trong trường hợp hạnh phúc, một trong các giao dịch thắng và chạy, và giao dịch kia không nhận được đủ chữ ký. Trong trường hợp không hài lòng, cả hai giao dịch có thể không nhận đủ chữ ký (nếu cả hai đều nhận được hơn một phần ba chữ ký của trình xác thực, thì cả hai giao dịch đều không thể nhận được hơn hai phần ba, đó là ngưỡng), điều này được gọi là không xác định và từ thời điểm đó các đối tượng là đầu vào cho cả hai giao dịch không thể được sử dụng cho bất kỳ giao dịch nào khác.

Vào cuối kỷ nguyên (chúng kéo dài khoảng một ngày - bạn có thể kiểm tra tiến trình sang thay đổi kỷ nguyên tiếp theo trên https://suiexplorer.com), tất cả các khóa được giải phóng, vì vậy bạn có thể sử dụng lại các đối tượng, nhưng nếu bạn không có thay đổi kỷ nguyên kể từ lần cuối bạn thử, bạn sẽ cần phải thu được nhiều khí hơn.

3
Bình luận
.

Bạn có biết câu trả lời không?

Hãy đăng nhập và chia sẻ nó.