Cơ Chế Ủy Quyền Tài Nguyên TRON: Giải Mã Cách Hoạt Động Thực Tế
Hiểu Mô Hình Tài Nguyên Trước Khi Nói Đến Ủy Quyền
TRON không tính phí gas theo kiểu Ethereum. Thay vào đó, mỗi tài khoản có hai bể tài nguyên riêng biệt: Energy và bandwidth. Energy bị tiêu thụ khi thực thi hợp đồng thông minh. Bandwidth bị tiêu thụ ở mọi giao dịch, bất kể giao dịch đó có liên quan đến hợp đồng hay không. Khi tài khoản cạn kiệt một trong hai loại tài nguyên này, mạng lưới sẽ đốt TRX từ số dư của bạn để bù đắp phần thiếu hụt. Đây chính là lý do khiến chi phí giao dịch tăng cao.
Tài nguyên được tạo ra theo hai cách. Thứ nhất, bằng cách stake TRX: khóa TRX và mạng lưới sẽ cộng cho tài khoản của bạn một phần tương ứng trong bể Energy hoặc bandwidth toàn mạng, được làm mới mỗi 24 giờ. Thứ hai, bằng cách nhận ủy quyền: một tài khoản khác stake TRX rồi chuyển tài nguyên phát sinh cho địa chỉ của bạn. Tài khoản của bạn sử dụng tài nguyên được ủy quyền y hệt như tài nguyên tự stake. Từ góc nhìn của máy ảo, không có sự phân biệt nào cả.
Đây là nền tảng của toàn bộ hệ thống. Ủy quyền không phải là kênh thanh toán hay một lớp bọc ngoài. Đó là hành động chuyển trực tiếp quyền sử dụng tài nguyên trên chuỗi từ tài khoản này sang tài khoản khác.
Stake 2.0 Đã Thay Đổi Cơ Chế Ủy Quyền Như Thế Nào
Mô hình stake ban đầu (Stake 1.0) yêu cầu bạn phải chọn ngay lúc stake xem TRX sẽ tạo ra Energy hay bandwidth, và bạn chỉ có thể giải phóng toàn bộ số lượng cùng một lúc sau thời gian khóa 3 ngày. Ủy quyền đã tồn tại từ thời đó, nhưng rất cứng nhắc. Bạn stake TRX, nó tạo ra một loại tài nguyên duy nhất, và bạn có thể tùy chọn chỉ định tài nguyên đó cho một địa chỉ khác.
Stake 2.0, được kích hoạt trên mạng chính vào giữa năm 2023, đã tái cơ cấu đáng kể toàn bộ hệ thống. Những thay đổi quan trọng liên quan đến ủy quyền gồm có:
- Phân chia tài nguyên theo tỷ lệ: Một vị thế stake TRX duy nhất có thể chia tài nguyên phát sinh và ủy quyền cho nhiều địa chỉ cùng lúc. Bạn không gửi TRX đi đâu cả, bạn chỉ đang phân phối lại luồng tài nguyên đầu ra.
- Unstake từng phần: Bạn có thể hủy stake một phần mà không ảnh hưởng đến phần còn lại. Điều này giúp các nhà cung cấp tài nguyên quản lý thanh khoản mà không làm gián đoạn các ủy quyền đang hoạt động.
- Thời gian chờ hủy stake 14 ngày: Sau khi gọi lệnh
unstake, TRX sẽ vào hàng đợi rút tiền và bị khóa khoảng 14 ngày trước khi bạn có thể gọiwithdrawExpireUnfreezeđể thu hồi lại. Trong khoảng thời gian đó, mọi ủy quyền dựa trên lượng TRX này sẽ bị hủy ngay lập tức, không phải sau 14 ngày. Ủy quyền kết thúc ngay khi bạn khởi tạo lệnh hủy stake, chứ không phải khi bạn nhận lại TRX. - Không còn bị khóa khi chuyển đổi loại tài nguyên: Ở phiên bản 1.0, việc chuyển từ Energy sang bandwidth đòi hỏi phải hủy stake hoàn toàn rồi stake lại từ đầu. Ở phiên bản 2.0, bạn có thể ủy quyền lại tài nguyên đầu ra của cùng một vị thế stake sang loại tài nguyên khác mà không cần hủy stake, dù vậy vẫn cần một giao dịch riêng trên chuỗi.
Hệ quả thực tế đối với những ai nhận Energy được ủy quyền: số dư tài nguyên của bạn có thể về không giữa chừng trong ngày nếu người ủy quyền khởi tạo lệnh hủy stake. Phía nhận không có thời gian ân hạn nào cả.
Cơ Chế Hoạt Động Của Giao Dịch Ủy Quyền Trên Chuỗi
Khi người ủy quyền gọi lệnh delegateResource, giao dịch sẽ ghi lại ba thông tin: địa chỉ người ủy quyền, địa chỉ người nhận và lượng Energy (hoặc bandwidth) được ủy quyền. Mạng lưới sau đó điều chỉnh giới hạn tài nguyên hiển thị trong trạng thái tài khoản của người nhận.
Về mặt nội bộ, các nút TRON theo dõi tài nguyên được ủy quyền tách biệt với tài nguyên tự sở hữu. Nếu bạn truy vấn tài khoản qua wallet/getaccount trên HTTP API, bạn sẽ thấy các trường như delegated_frozenV2_balance_for_energy và acquired_delegated_frozenV2_balance_for_energy. Trường đầu là lượng bạn đã gửi đi. Trường sau là lượng bạn đã nhận về. Không có TRX nào được di chuyển cả. TRX thực tế vẫn nằm trong số dư stake của người ủy quyền.
Quá trình tiêu thụ tài nguyên trong một giao dịch diễn ra như sau: máy ảo kiểm tra lượng Energy khả dụng của tài khoản đang thực thi (tự stake cộng với ủy quyền nhận được). Nếu đủ, nó sẽ khấu trừ theo thứ tự: tài nguyên nhận từ ủy quyền được tiêu thụ trước, sau đó mới đến tài nguyên tự stake. Nếu bể tài nguyên cạn kiệt, TRX sẽ bị đốt từ số dư tự do của tài khoản theo tỷ giá hiện hành của mạng lưới. Tỷ giá này không cố định mà được tính động dựa trên tổng Energy toàn mạng và giá đốt hiện tại do các tham số trên chuỗi quy định.
Energy Phục Hồi Sau Khi Sử Dụng Như Thế Nào
Energy không phải là khoản tín dụng dùng một lần. Energy đã dùng sẽ phục hồi tuyến tính trong vòng 24 giờ. Nếu tài khoản của bạn có giới hạn Energy tối đa là 100.000 và bạn dùng 65.000 để thực thi hợp đồng, sau 24 giờ bạn sẽ đầy trở lại. Tại mốc giữa chặng (12 giờ), bạn sẽ có khoảng 32.500 Energy khả dụng.
Cơ chế phục hồi này áp dụng cho cả Energy tự stake lẫn Energy được ủy quyền. Tốc độ phục hồi gắn liền với giới hạn tối đa của từng tài khoản, không theo một đồng hồ toàn cầu cố định nào. Vì vậy hai tài khoản có giới hạn Energy khác nhau sẽ phục hồi với tốc độ tuyệt đối khác nhau, dù cả hai đều đầy hoàn toàn sau 24 giờ.
Đối với các tác vụ tần suất cao, chu kỳ 24 giờ này là ràng buộc then chốt. Một lần ủy quyền vừa đủ cho một giao dịch mỗi ngày sẽ không đáp ứng được mười giao dịch mỗi ngày, dù tổng Energy trông có vẻ đủ trên lý thuyết. Bạn cần tính đến nhịp độ phục hồi, chứ không chỉ tổng dung lượng.
Thu Hồi và Ủy Quyền Lại Tài Nguyên
Ủy quyền không phải là vĩnh viễn. Người ủy quyền có thể gọi unDelegateResource bất cứ lúc nào để lấy lại tài nguyên. Hiệu lực là tức thì: Energy khả dụng của người nhận giảm ngay bằng lượng bị thu hồi kể từ khối tiếp theo. Phía người nhận không có thời gian chờ và không có cơ chế bồi thường nào ở cấp độ giao thức.
Việc ủy quyền lại, tức là chuyển cùng một lượng tài nguyên sang người nhận khác, đòi hỏi hai giao dịch riêng biệt: thu hồi từ người nhận hiện tại, rồi ủy quyền cho người nhận mới. Đây là hai thao tác riêng trên chuỗi và bản thân chúng cũng tiêu thụ bandwidth. Trong Stake 2.0 bạn có thể gộp các thao tác này hiệu quả hơn trước, nhưng chúng vẫn không phải là nguyên tử trong một giao dịch duy nhất.
Một trường hợp ngoại lệ đáng lưu ý: nếu TRX stake của người ủy quyền tạo ra 200.000 Energy và họ đã ủy quyền 150.000 cho địa chỉ A, họ vẫn có thể ủy quyền 50.000 còn lại cho địa chỉ B mà không ảnh hưởng đến ủy quyền của A. Ràng buộc ở đây là tổng Energy được ủy quyền không được vượt quá tổng Energy phát sinh. Nếu cố ủy quyền vượt mức này, giao dịch sẽ thất bại.
Điều Này Có Ý Nghĩa Gì Đối Với Việc Thuê Energy
Các dịch vụ cho thuê Energy như tronenergyrent.com hoạt động hoàn toàn trong khuôn khổ mô hình ủy quyền này. Khi bạn thuê Energy, nhà cung cấp sẽ stake TRX, tạo ra Energy và gọi lệnh delegateResource hướng đến địa chỉ của bạn. Từ góc nhìn tài khoản của bạn, bạn nhận được acquired_delegated_frozenV2_balance_for_energy đúng như mô tả ở trên. Bạn không giữ TRX. Bạn giữ một phần phân bổ tài nguyên tạm thời.
Thời hạn thuê tương ứng với khoảng thời gian nhà cung cấp duy trì ủy quyền đó. Thuê 1 ngày theo giá hiện tại có chi phí 8,19 TRX cho mỗi 65.000 Energy (đủ để thực hiện một giao dịch chuyển USDT TRC-20 tiêu chuẩn cần khoảng 65.000 Energy và 345 bandwidth). Thuê 30 ngày cho cùng lượng Energy đó có giá 175,50 TRX. Bạn có thể kiểm tra chi phí chính xác cho khối lượng giao dịch cụ thể của mình bằng công cụ tính toán.
Lý do thuê ngắn hạn có chi phí mỗi ngày cao hơn hoàn toàn mang tính cơ học: nhà cung cấp phải quản lý hàng đợi hủy stake và chi phí ủy quyền lại cho các chu kỳ thường xuyên. Thời gian chờ rút 14 ngày khiến vốn bị trói buộc bất kể thời hạn thuê ngắn đến đâu.
Ủy Quyền Bandwidth Hoạt Động Theo Cùng Một Mô Hình
Mọi điều mô tả ở trên đều áp dụng tương tự cho bandwidth, chỉ có một điểm khác biệt trong hành vi mặc định. Mỗi tài khoản được mạng lưới cấp miễn phí 600 bandwidth mỗi ngày, bất kể có stake hay không. Khoản miễn phí này đủ cho các giao dịch chuyển TRX cơ bản nhưng sẽ không đáp ứng được phần bandwidth của các giao dịch chuyển TRC-20 tần suất cao. Việc stake hoặc nhận bandwidth được ủy quyền sẽ tăng giới hạn của bạn lên trên mức cơ sở 600 đó.
Khi bạn ủy quyền bandwidth cho một tài khoản, bạn đang cộng thêm vào dung lượng của họ trên mức phân bổ miễn phí sẵn có. Thứ tự tiêu thụ là: bandwidth miễn phí trước, rồi đến bandwidth được ủy quyền, sau đó mới đến bandwidth tự stake, và cuối cùng là đốt TRX. Thứ tự này rất quan trọng nếu bạn cần tính toán chính xác thời điểm việc đốt TRX bắt đầu xảy ra đối với một tài khoản cụ thể.
Đọc Trạng Thái Ủy Quyền Qua API
Nếu bạn đang xây dựng công cụ hoặc theo dõi một ủy quyền, các lệnh gọi API liên quan gồm có:
wallet/getaccount: trả về toàn bộ trạng thái tài khoản bao gồm các trường tài nguyên đã ủy quyền và đã nhậnwallet/getdelegatedresourcev2: trả về bản ghi ủy quyền cụ thể giữa hai địa chỉ, bao gồm lượng Energy chính xác và thời gian hết hạn khóa nếu có đặt khóawallet/getcanwithdrawunfreezeamount: cho phép người ủy quyền kiểm tra bao nhiêu trong số TRX đang chờ hủy stake đã có thể rút được
Điểm cuối getdelegatedresourcev2 đặc biệt hữu ích để xác minh rằng một ủy quyền đang hoạt động và có đúng kích thước trước khi thực thi các giao dịch phụ thuộc vào nó. Đừng giả định rằng ủy quyền vẫn còn hiệu lực chỉ vì nó được thiết lập từ hôm qua. Luôn xác nhận trạng thái trên chuỗi trước khi dựa vào đó.