Tiêu chuẩn ICRC-2: Approve và Transfer From

ICRC-2 là một phần mở rộng của tiêu chuẩn cơ bản ICRC-1. ICRC-2 xác định một cách cho người sở hữu tài khoản để ủy quyền chuyển token cho một bên thứ ba thay mình.

Luồng phê duyệt và chuyển từ gồm hai bước:

  1. Chủ sở hữu tài khoản Alice cho phép Bob chuyển tối đa X token từ tài khoản A của cô ấy bằng cách gọi phương thức icrc2_approve trên sổ cái.
  2. Bob có thể chuyển tối đa X token từ tài khoản A đến bất kỳ tài khoản nào bằng cách gọi phương thức icrc2_transfer_from trên sổ cái, như thể A là tài khoản B của Bob. Số lượng chuyển từ tài khoản A mà Bob có thể khởi tạo không bị giới hạn, miễn là tổng số tiền chi tiêu không vượt quá X.

Các quyền phê duyệt không được truyền thông: nếu Alice phê duyệt việc chuyển token từ tài khoản A của cô ấy đến tài khoản B của Bob, và Bob phê duyệt việc chuyển từ tài khoản B của mình đến tài khoản E của Eva, Eva không thể rút token từ tài khoản của Alice thông qua sự phê duyệt của Bob.

Động cơ

Mô hình approve và transfer-from đã trở nên phổ biến trong hệ thống sinh thái Ethereum nhờ vào tiêu chuẩn token ERC-20. Giao diện này mang đến khả năng mới cho các ứng dụng:

Thanh toán định kỳ: Alice có thể phê duyệt một số lượng lớn token cho Bob trước, cho phép Bob thực hiện các chuyển giao định kỳ theo các đợt nhỏ hơn. Ví dụ thực tế bao gồm dịch vụ đăng ký và tiền thuê nhà.

Số lượng chuyển giao không chắc chắn: Trong một số ứng dụng, chẳng hạn như dịch vụ giao dịch tự động, giá chính xác của hàng hóa không được biết trước. Với luồng approve và transfer from, Alice có thể cho phép Bob giao dịch chứng khoán thay mặt cô ấy, mua/bán với giá chưa biết trước lên đến giới hạn cụ thể.

Thông số Kỹ thuật

Các từ khóa “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY” và “OPTIONAL” trong tài liệu này được hiểu theo mô tả trong RFC 2119.

  • Các sổ cái triển khai tiêu chuẩn ICRC-2 PHẢI triển khai tất cả các chức năng trong giao diện ICRC-1.
  • Các sổ cái triển khai tiêu chuẩn ICRC-2 PHẢI bao gồm ICRC-2 trong danh sách trả về bởi phương thức icrc1_supported_standards.

Phương pháp thực hiện

Link: https://github.com/dfinity/ICRC-1/blob/main/standards/ICRC-2/README.md

Ví dụ

Alice nạp token vào canister C

  1. Alice muốn nạp 100 token vào một sổ sách ICRC-2 trên canister C.
  2. Alice gọi hàm icrc2_approve với tham số spender được đặt là tài khoản mặc định của canister ({ owner = C; subaccount = null}) và tham số amount được đặt là số lượng token mà cô muốn nạp (100) cộng thêm phí chuyển token.
  3. Sau đó, Alice có thể gọi một phương thức nạp tiền nào đó trên canister, mà phương thức đó gọi hàm icrc2_transfer_from với tham số from được đặt là tài khoản của Alice (người gọi), tham số to được đặt là tài khoản của canister, và tham số amount được đặt là số lượng token mà cô muốn nạp (100).
  4. Canister hiện có thể xác định từ kết quả của cuộc gọi xem việc chuyển token đã thành công hay chưa. Nếu việc chuyển token thành công, canister có thể an toàn thực hiện việc nạp vào trạng thái và biết rằng token đang có trong tài khoản của nó.

Canister C chuyển token từ tài khoản của Alice đến tài khoản của Bob, thay mặt cho Alice

  1. Canister C muốn chuyển 100 token trên một sổ sách ICRC-2 từ tài khoản của Alice đến tài khoản của Bob.
  2. Alice đã trước đó cho phép canister C chuyển token thay mặt cô bằng cách gọi hàm icrc2_approve với tham số spender được đặt là tài khoản mặc định của canister ({ owner = C; subaccount = null }) và tham số amount được đặt là số lượng token mà cô muốn cho phép (100) cộng thêm phí chuyển token.
  3. Trong quá trình gọi cập nhật nào đó, canister có thể gọi hàm icrc2_transfer_from với tham số from được đặt là tài khoản của Alice, tham số to được đặt là tài khoản của Bob, và tham số amount được đặt là số lượng token mà cô muốn chuyển (100).
  4. Sau khi cuộc gọi hoàn thành thành công, Bob sẽ có thêm 100 token trong tài khoản của mình, và Alice sẽ thiếu 100 token (cộng thêm phí) trong tài khoản của mình.

Alice hủy quyền cho phép của cô đối với canister C

  1. Alice muốn hủy quyền cho phép của cô với 100 token trên một sổ sách ICRC-2 cho canister C.
  2. Alice gọi hàm icrc2_approve trên sổ sách với tham số spender được đặt là tài khoản mặc định của canister ({ owner = C; subaccount = null }) và tham số amount được đặt là 0.
  3. Canister không còn khả năng chuyển token thay mặt cho Alice.

Alice hủy quyền cho phép của cô đối với canister C một cách tổng hợp

  1. Alice muốn hủy quyền cho phép của cô với 100 token trên một sổ sách ICRC-2 cho canister C một cách tổng hợp.
  2. Alice gọi hàm icrc2_approve trên sổ sách với tham số spender được đặt là tài khoản mặc định của canister ({ owner = C; subaccount = null }), tham số amount được đặt là 0, và tham số expected_allowance được đặt là 100 token.
  3. Nếu cuộc gọi thành công, quyền cho phép đã bị gỡ bỏ thành công. Một lỗi AllowanceChanged sẽ chỉ ra rằng canister C đã sử dụng một phần của quyền cho phép trước khi cuộc gọi của Alice hoàn thành.

Vietnam Pham – Click Digital

  • If you’d like to invest in blockchain advertising companies, just BUY token Saigon (SGN) at Pancakeswap: https://t.co/KJbk71cFe8 (do not worry about low liquidity)
  • Backed by Click Digital Company
  • Enhancing blockchain knowledge
  • BSC address: 0xa29c5da6673fd66e96065f44da94e351a3e2af65
  • Twitter: https://twitter.com/SaigonSGN135
  • Staking SGN: http://135web.net
Rate this post

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *