juice

Hạch toán Juice — chi phí tính toán và băng thông trên CVM. Sử dụng khi phân tích chi phí thực thi giao dịch, chẩn đoán lỗi :JUICE, hoặc…

npx skills add https://github.com/convex-dev/convex --skill juice

Juice Accounting

Juice prices computation and bandwidth. It is a flow: consumed and paid per transaction, never held. Storage is priced separately — see the memory skill.

Normative spec: https://docs.convex.world/docs/cad/juice.

The Calculation

Juice Fees     = Juice Consumed × Juice Price
Juice Consumed = Transaction Size Cost + Σ(cost of each operation executed)

Transaction Size Cost = TRANSACTION_PER_BYTE × storage size of the transaction

TRANSACTION_PER_BYTE is 20, so the size of the submitted transaction is itself a cost, independent of what it does. Compact transaction source is cheaper source.

Allowance

Every transaction carries a juice allowance:

  • Specified by the user, or the maximum available if unspecified
  • Capped at 10,000,000, bounding the cost of any single transaction
  • May not exceed what the origin account can actually pay

On a :JUICE failure the origin is charged the full allowance and every state change is rolled back. Running out is not free — it is the most expensive way for a transaction to fail. When execution cost is uncertain, estimate against a local network before submitting.

Price

Juice price lives in the CVM state and is readable from CVM code as *juice-price*. The genesis price is 10 (Constants.INITIAL_JUICE_PRICE, set 2024 and what Protonet runs; CAD007 was aligned to match in #697). A live network's price is whatever its genesis state carries.

CAD007 also specifies dynamic pricing — the price rising under sustained load and decaying towards a hard floor of 1 — but this is not yet implemented: nothing updates *juice-price* after genesis, so treat the price as constant today. Implementation is tracked in #408 / #423.

Dynamic pricing is the intended cryptoeconomic defence: sustaining an attack would mean paying exponentially rising prices, so a burst while prices are low could only delay confirmation, not exclude legitimate transactions.

Pricing New Operations

If you add a CVM op or runtime function, it needs a juice cost.

  • Every op MUST have a fixed positive cost — nothing executes free.
  • An op whose work scales with input size MUST have a cost that scales too.
  • The CVM MUST check sufficient juice before performing O(n) work, and raise :JUICE if it is not there.

That ordering is a security property, not an optimisation. If an attacker can trigger O(n) work having committed less than O(n) of juice, the asymmetry is a denial-of-service vector. Cost should track an upper bound on compute time, storage size or bandwidth — whichever dominates.

Relationship to Memory

A transaction short of memory allowance can buy memory from the pool using its remaining juice — so juice exhaustion can surface as a :MEMORY failure and vice versa. See the memory skill for that interaction.

Thêm skills từ convex-dev

convex-lisp
convex-dev
Tài liệu tham khảo ngôn ngữ Convex Lisp — quy ước CVM, gọi mã thư viện, định nghĩa actor, mã juice và lỗi. Sử dụng khi viết hoặc gỡ lỗi mã nguồn CVM cho…
ecosystem
convex-dev
Định hướng trong hệ sinh thái Convex — thứ gì nằm trong repository nào, specs và docs ở đâu, và những thư viện client nào tồn tại. Sử dụng khi bạn cần ngữ cảnh…
local-network
convex-dev
Chạy mạng thử nghiệm Convex cục bộ để phát triển. Sử dụng khi kiểm tra các thay đổi với mạng trực tiếp, tái hiện sự cố của đồng nghiệp, hoặc khi không có mạng từ xa…
protocol-versions
convex-dev
Các phiên bản giao thức, di chuyển và nâng cấp v1 — nên viết theo ngữ nghĩa nào, và cách thay đổi hành vi CVM mà không fork mạng. Sử dụng khi…
etch
convex-dev
Kiểm tra và bảo trì một cửa hàng Etch — cơ sở dữ liệu định địa chỉ theo nội dung của Convex. Sử dụng khi kiểm tra bộ nhớ ngang hàng, chẩn đoán hỏng hóc, thu gom rác, hoặc…
trust
convex-dev
Trust monitors — mô hình ủy quyền trên chuỗi có thể kết hợp của Convex. Sử dụng khi viết kiểm soát truy cập, hạn chế chức năng của tác nhân, xác định ai có thể mint hoặc…
memory
convex-dev
Kế toán và hạn mức bộ nhớ — chi phí lưu trữ trên chuỗi, và cách giảm thiểu cũng như thu hồi nó. Sử dụng khi suy luận về sự tăng trưởng trạng thái, chẩn đoán một…
peer
convex-dev
Vận hành một peer Convex — tạo, khởi động, liệt kê, sao lưu hoặc khởi tạo genesis mạng. Sử dụng khi chạy một peer với mạng hoặc thiết lập một mạng mới.