Thiết kế phí nhiên liệu đầu tiên của ngôn ngữ MOVE: Phí nhiên liệu trên chuỗi được tính như thế nào?
Chi phí nhiên liệu là một khái niệm cơ bản trong nhiều blockchain, nó định nghĩa lượng tài nguyên tính toán và lưu trữ cần thiết để thực hiện và lưu trữ các giao dịch on-chain. Kế hoạch chi phí nhiên liệu xác định tất cả các chi phí tiêu tốn trong quá trình thực hiện on-chain, được sử dụng để tính toán chi phí nhiên liệu sử dụng trong quá trình thực hiện giao dịch.
quy trình
Để thực hiện hiệu quả, quy trình on-chain là:
định nghĩa nguyên tắc;
chuẩn bị khung đánh giá, để xác định giá cho mỗi lần thực hiện;
xây dựng hệ thống đo lường phí nhiên liệu và đại số phí nhiên liệu an toàn cho MOVE;
sẽ nhập khung phí nhiên liệu thượng nguồn;
làm cho khung phí nhiên liệu có ý thức lưu trữ;
Tiến hành tinh chỉnh kế hoạch phí nhiên liệu.
nguyên tắc
Nguyên tắc được định nghĩa là:
Chi phí hoạt động nên liên quan trực tiếp đến các tài nguyên có sẵn trên mạng như CPU, bộ nhớ, mạng, lưu trữ I/O và sử dụng không gian (. Khi công nghệ và quy trình được cải thiện, chi phí nhiên liệu cần thiết nên giảm theo.
Phí nhiên liệu nên được thiết lập bởi quản trị on-chain, và có thể được cấu hình liền mạch.
Phí nhiên liệu có thể ngăn chặn các cuộc tấn công DoS vào tập hợp tài nguyên cố định trong mạng, có thể cần nhanh chóng điều chỉnh theo tình hình mạng thông qua các đề xuất quản trị.
Giá phí nhiên liệu phản ánh mong muốn tăng trưởng nhanh chóng và giữ cho blockchain có thể tiếp cận với mọi người.
Khuyến khích đưa ra những lựa chọn tốt trong thiết kế - chẳng hạn như ưu tiên độ an toàn, tính mô-đun, các sự kiện xác nhận, v.v.
) Tính phí nhiên liệu
Khi người dùng gửi giao dịch, họ cũng phải chỉ định hai số lượng trong giao dịch:
Số lượng phí nhiên liệu tối đa: Được đo bằng đơn vị phí nhiên liệu. Đây là số đơn vị phí nhiên liệu mà người dùng sẵn sàng chi cho việc thực hiện giao dịch.
Giá đơn vị phí nhiên liệu: Tính toán theo hệ bát phân cho mỗi đơn vị phí nhiên liệu, trong đó 1 bát phân = 0.00000001 APT###=$10^{-8}$(. Đây là mức giá phí nhiên liệu mà người dùng sẵn sàng trả.
Trong quá trình thực hiện, giao dịch sẽ bị tính phí:
chi phí cố định, chi phí cơ bản cố định cộng với chi phí bổ sung cho các giao dịch lớn.
chi phí thực hiện, dùng để thực hiện lệnh MOVE.
Chi phí đọc, được sử dụng để đọc dữ liệu từ lưu trữ bền vững.
Chi phí ghi, dùng để ghi dữ liệu vào lưu trữ bền vững.
Phí giao dịch cuối cùng có thể được tính bằng tổng số lượng phí nhiên liệu đã tiêu tốn ) nhân với đơn vị phí nhiên liệu ( nhân với đơn giá phí nhiên liệu. Ví dụ, nếu một giao dịch tiêu tốn 670 đơn vị phí nhiên liệu, và người dùng chỉ định đơn giá phí nhiên liệu trong giao dịch là 100 Octa mỗi đơn vị, thì phí giao dịch cuối cùng sẽ là 670 * 100 = 67000 Octa = 0.00067 APT.
Nếu một giao dịch tiêu tốn hết phí nhiên liệu trong quá trình thực hiện, thì bên gửi sẽ bị tính phí theo số lượng phí nhiên liệu tối đa, và tất cả các thay đổi mà giao dịch đó thực hiện sẽ bị hoàn lại.
) Thiết lập bảng kế hoạch phí nhiên liệu
1. Cấu hình cơ bản
Kế hoạch phí nhiên liệu có một số thành phần không liên quan đến chi tiết của một thao tác đơn lẻ, bao gồm kích thước giao dịch và đơn vị phí nhiên liệu tối đa ### khác với lượng phí nhiên liệu tối đa mà người dùng chỉ định trong giao dịch (.
2. Quy mô giao dịch
Đối với hầu hết các giao dịch, quy mô giao dịch có thể ở mức hàng nghìn byte. Tuy nhiên, việc phát hành mô-đun Move dễ dàng có thể lên tới hàng nghìn byte, trong khi khung khoảng 100 KB. Kích thước của hầu hết các mô-đun người dùng thường nằm trong khoảng từ 4KB đến 40KB. Ban đầu, chúng tôi đã đặt giá trị quy mô giao dịch là 32KB, nhưng dựa trên phản hồi của cộng đồng, yêu cầu cung cấp thêm không gian để đơn giản hóa phát triển ứng dụng, vì vậy chúng tôi đã điều chỉnh quy mô giao dịch lên 64KB.
Giao dịch quy mô rất lớn có thể làm tăng chi phí băng thông của toàn mạng và có thể ảnh hưởng tiêu cực đến hiệu suất. Nếu bị lạm dụng, bộ nhớ tạm sẽ bị khuyến khích bỏ qua các giao dịch có quy mô lớn hơn, do đó phương pháp của chúng tôi là đạt được sự cân bằng giữa kích thước giao dịch lớn nhất và khả năng truy cập.
3. Đơn vị phí nhiên liệu tối đa
Đơn vị phí nhiên liệu tối đa trong kế hoạch phí nhiên liệu định nghĩa số lượng thao tác tối đa mà một giao dịch có thể thực hiện. Lưu ý! Điều này khác với số lượng phí nhiên liệu tối đa mà người dùng chỉ định trong giao dịch.
Đơn vị phí nhiên liệu tối đa của kế hoạch phí nhiên liệu ảnh hưởng trực tiếp đến thời gian một giao dịch có thể thực hiện, việc đặt nó quá cao có thể dẫn đến ảnh hưởng tiêu cực đến hiệu suất của blockchain. Ví dụ, người dùng có thể quên có một gia tăng trong vòng lặp while, dẫn đến vòng lặp vô hạn, đây là một lỗi phổ biến. Chúng tôi phát hiện ra rằng, ngay cả khi chúng tôi đã thực hiện nâng cấp khung tối đa, chúng tôi vẫn chưa đạt đến 90% của đơn vị phí nhiên liệu tối đa của kế hoạch phí nhiên liệu ) được đặt là 1,000,000(.
4. Thực hiện
Để đánh giá chi phí thực thi, chúng tôi đã xây dựng một khung chuẩn và sử dụng Valgrind để phân tích Move VM khi thực thi khung này. Đầu ra của nó là một tập hợp mã nguồn có chú thích, cho chúng tôi biết mỗi dòng mã tạo ra bao nhiêu lệnh máy.
Dưới sự trợ giúp của phân tích trên, chúng tôi đã ước lượng sơ bộ chi phí tương đối của tất cả các lệnh MOVE và hàm gốc. Tuy nhiên, chúng tôi nhận thấy rằng phương pháp này có một số vấn đề với các hàm nội tuyến: chúng sẽ không tự động được bao gồm trong số lượng của người gọi. Chúng tôi cũng thấy rằng, điều này chỉ xảy ra khi chúng tôi phân tích một số lệnh MOVE, và chúng tôi có thể giải quyết vấn đề này bằng cách cộng các số lại với nhau.
Sau đó, bằng cách xem xét các ví dụ mã hóa nhằm tăng cường tính ổn định và an toàn của hệ thống, đội ngũ đã đưa ra số lượng lệnh máy thực thi cuối cùng. Con số này lần lượt được cân nhắc với đơn vị lưu trữ và phí nhiên liệu tối đa để xác định giá trị hiện tại của chúng trong kế hoạch phí nhiên liệu.
5. Lưu trữ
Mỗi khi truy cập vào các mục trạng thái sổ cái hoặc dữ liệu lưu trữ trong bộ nhớ vĩnh viễn, nút sẽ phát ra yêu cầu đọc hoặc ghi đến thiết bị lưu trữ. Tổng số lần truy cập dữ liệu mỗi giây phụ thuộc vào băng thông và khả năng IOPS của thiết bị lưu trữ. Tương tự như chu kỳ CPU trong phần tính toán phí nhiên liệu, việc truy cập dữ liệu là sự khan hiếm tạm thời mà người dùng blockchain cạnh tranh trên thị trường phí khi hệ thống bị tải, ngoài ra, chi phí chiếm dụng ổ đĩa để ghi dữ liệu trên chuỗi là vĩnh viễn. Nhóm thiết kế kế hoạch phí nhiên liệu lưu trữ bằng cách xem xét những chi phí này.
Việc truy cập và lưu trữ bất kỳ mục trạng thái nào sẽ phát sinh chi phí liên quan đến cấu trúc dữ liệu cây Merkle giống như sứa để xác minh trạng thái toàn bộ blockchain. Chi phí này liên quan đến cơ số của các mục trạng thái khác nhau )$2^{256}$(. Còn có một chi phí tỷ lệ thuận với kích thước của mỗi mục. Để thao tác trên một mục trạng thái, phí là ) trừ các trường hợp ngoại lệ được mô tả trong phần tiếp theo (:
Bất kỳ quyền truy cập nào vào mục trạng thái đều thuộc một trong ba loại sau: đọc, tạo hoặc ghi. Quyền truy cập được tính phí theo loại mục và phí byte, như được chỉ ra trong phương trình trên.
Đọc là thao tác phổ biến nhất, nó chỉ bị giới hạn bởi sự khan hiếm tài nguyên tạm thời. Do đó, chi phí đọc được điều chỉnh dựa trên IOPS đĩa ### chi phí dự án ( và dung lượng băng thông của thông số kỹ thuật phần cứng tham khảo.
create là thêm một mục mới vào bộ nhớ trạng thái. Do đó, create đã tăng thêm cấu trúc dữ liệu xác thực, làm cho mọi thứ trở nên đắt đỏ hơn, vì vậy chi phí cao nhất. Chi phí tạo được điều chỉnh dựa trên không gian đĩa tham chiếu mà mạng sở hữu. Do đó, việc làm đầy đĩa với mục )item_fee( và byte )byte_fee( cần rất nhiều phí nhiên liệu.
Việc ghi thao tác cập nhật các mục hiện có trong lưu trữ trạng thái. Do đó, thao tác ghi sẽ không tạo ra chi phí bổ sung trong cấu trúc dữ liệu xác thực. Tuy nhiên, bằng cách sửa đổi các mục hiện có thành byte lớn hơn, vẫn có thể làm hỏng đĩa. Do đó, chúng tôi tính phí cho các byte trong các mục được cập nhật giống như khi tạo ra.
Cần lưu ý rằng chi phí liên quan đến việc lưu trữ được đánh giá dựa trên từng giao dịch: ngay cả khi bạn đọc/ghi cùng một tài nguyên nhiều lần, bạn chỉ cần trả một khoản phí.
Dựa trên những xem xét trên, chúng tôi đã định nghĩa 6 tham số phí nhiên liệu, chúng tạo thành thành phần của tổng chi phí phí nhiên liệu. Xem bên dưới:
per_item_read: Điều chỉnh theo IOPs
per_byte_read: Điều chỉnh theo băng thông thực tế
per_item_create:Điều chỉnh theo tổng dự án mục tiêu
per_byte_create: điều chỉnh theo kích thước tổng mục tiêu - mỗi mục chứa 1KB đầu tiên
per_item_write: giống như per_item_read
per_byte_write: giống như per_byte_create
) chi phí nhiên liệu ổn định đơn vị
Bất kể chi phí thực hiện hoạt động được tính theo giá trị thị trường của APT hoặc tiền tệ hợp pháp, mỗi hoạt động và giao dịch đều cần một chi phí đơn vị cố định so với chi phí lưu trữ và thực hiện. Chi phí đơn vị nhiên liệu cố định giúp duy trì kế hoạch chi phí nhiên liệu không thay đổi và tách rời khỏi giá trị thị trường tự do của APT. Hơn nữa, việc chọn chính xác số chữ số cho đơn vị nhiên liệu giúp duy trì kế hoạch chi phí nhiên liệu không thay đổi. Với điều này trong tâm trí, nhóm đã biểu diễn đơn vị nhiên liệu với độ chính xác khoảng 3 chữ số. Do đó, chi phí của giao dịch chuyển khoản khoảng 700 đơn vị nhiên liệu.
Tham gia cộng đồng
Dù chúng tôi đã đầu tư rất nhiều công sức vào kế hoạch phí nhiên liệu, nhưng nó vẫn chưa hoàn thiện. Là một dự án cộng đồng, các thành viên trong cộng đồng có thể lựa chọn:
1### Dựa trên kinh nghiệm của bạn, hãy chỉ ra những điểm không hợp lý trong kế hoạch phí nhiên liệu;
Hãy cho biết mối quan tâm của bạn về kế hoạch phí nhiên liệu và tham gia thảo luận cộng đồng.
sẽ tiến hành bỏ phiếu cho các đề xuất quản trị liên quan đến phí nhiên liệu.
) Làm thế nào để điều chỉnh chi phí nhiên liệu?
Kế hoạch phí nhiên liệu được lưu trữ như cấu hình on-chain, nhưng có thể được thay đổi thông qua các đề xuất quản trị và có thể thêm các chỉ thị hoặc chức năng gốc một cách liền mạch.
Kế hoạch phí nhiên liệu được thiết kế để có thể mở rộng, cho phép nâng cấp thông qua các đề xuất quản trị. Với việc cải tiến liên tục Move VM và tiếp thu phản hồi từ người dùng, các tham số phí nhiên liệu có thể được điều chỉnh theo thời gian.
Đôi khi, công thức phí nhiên liệu có thể cần những thay đổi phức tạp vượt ra ngoài cấu hình on-chain. Những công thức phí nhiên liệu này thường được mã hóa bằng Rust và được phân biệt thông qua các cờ tính năng phí nhiên liệu on-chain. Để nâng cấp những công thức này, cần phải cập nhật phần mềm nút với công thức mới và phân biệt bằng các cờ tính năng phí nhiên liệu khác nhau. Sau đó, phần mềm nút phải được phát hành và được các nhà điều hành nút áp dụng rộng rãi, cuối cùng, một đề xuất quản trị phải được phát hành và phê duyệt để có thể sử dụng phiên bản phí nhiên liệu mới.
Công việc trong tương lai
Đây là khung phí nhiên liệu khả thi đầu tiên của MOVE. Nó yêu cầu sửa đổi lớn đối với Move VM và Core. Chúng tôi hy vọng công việc này sẽ mở đường cho các công việc trong tương lai:
1### Giảm chi phí thực thi, sở hữu một mô hình phí nhiên liệu thực sự cho thấy biên dịch viên và máy ảo hoạt động hiệu quả ở đâu, nhóm có thể cải thiện phần lớn trong số đó để giảm chi phí thực thi.
2) Tính toán chi phí nhiên liệu đa chiều, cho phép người dùng chỉ định ngân sách riêng cho việc thực thi và lưu trữ. Như vậy, người dùng không phải trả giá nhiên liệu cao do thời gian thực thi quá lâu vì ứng dụng viết mã kém. Nó cũng sẽ cho phép định nghĩa giá nhiên liệu tối đa cho các giao dịch trên chuỗi một cách chi tiết hơn;
3) Giảm bớt trạng thái cồng kềnh, hiện tại không có phương pháp đơn giản nào để thu nhỏ tập hợp trạng thái, ngoại trừ hợp đồng ) hoặc người dùng ( xóa các thực thể một cách rõ ràng. Người dùng trả tiền để xóa dữ liệu có thể tạo ra cơ hội chênh lệch giá, người dùng tạo lưu trữ khi giá rẻ và xóa nó khi giá cao. Việc trì hoãn giải quyết thách thức này có thể làm giảm động lực của các nhà phát triển để xóa dữ liệu trên chuỗi. Nhóm đang khám phá khái niệm TTL cho mỗi dự án, khái niệm này sẽ xóa các mục trạng thái chưa được truy cập khi TTL hết hạn.
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
6 thích
Phần thưởng
6
6
Đăng lại
Chia sẻ
Bình luận
0/400
PumpingCroissant
· 10giờ trước
Có ai hiểu cách tính gas này không? Khó quá!
Xem bản gốcTrả lời0
PrivateKeyParanoia
· 08-12 12:31
So với ETH thì nó đắt đến mức nào?
Xem bản gốcTrả lời0
ImpermanentLossEnjoyer
· 08-11 10:13
Ai có thể chịu đựng được phí nhiên liệu đắt đỏ này chứ?
Xem bản gốcTrả lời0
rekt_but_resilient
· 08-11 10:11
Chó ai cũng biết gas của move đắt đến mức không thể tin được.
Xem bản gốcTrả lời0
0xSleepDeprived
· 08-11 10:07
move cũng sắp cuộn tiền rồi, khó chịu quá
Xem bản gốcTrả lời0
EthSandwichHero
· 08-11 09:56
Chỉ có ngần ấy phí xăng? Thế giới tiền điện tử mới vào nghề bị vỡ vụn.
Cơ chế phí nhiên liệu được ưu tiên trong ngôn ngữ MOVE: Cách tính toán chi phí thực thi trên chuỗi một cách chính xác.
Thiết kế phí nhiên liệu đầu tiên của ngôn ngữ MOVE: Phí nhiên liệu trên chuỗi được tính như thế nào?
Chi phí nhiên liệu là một khái niệm cơ bản trong nhiều blockchain, nó định nghĩa lượng tài nguyên tính toán và lưu trữ cần thiết để thực hiện và lưu trữ các giao dịch on-chain. Kế hoạch chi phí nhiên liệu xác định tất cả các chi phí tiêu tốn trong quá trình thực hiện on-chain, được sử dụng để tính toán chi phí nhiên liệu sử dụng trong quá trình thực hiện giao dịch.
quy trình
Để thực hiện hiệu quả, quy trình on-chain là:
định nghĩa nguyên tắc;
chuẩn bị khung đánh giá, để xác định giá cho mỗi lần thực hiện;
xây dựng hệ thống đo lường phí nhiên liệu và đại số phí nhiên liệu an toàn cho MOVE;
sẽ nhập khung phí nhiên liệu thượng nguồn;
làm cho khung phí nhiên liệu có ý thức lưu trữ;
Tiến hành tinh chỉnh kế hoạch phí nhiên liệu.
nguyên tắc
Nguyên tắc được định nghĩa là:
Chi phí hoạt động nên liên quan trực tiếp đến các tài nguyên có sẵn trên mạng như CPU, bộ nhớ, mạng, lưu trữ I/O và sử dụng không gian (. Khi công nghệ và quy trình được cải thiện, chi phí nhiên liệu cần thiết nên giảm theo.
Phí nhiên liệu nên được thiết lập bởi quản trị on-chain, và có thể được cấu hình liền mạch.
Phí nhiên liệu có thể ngăn chặn các cuộc tấn công DoS vào tập hợp tài nguyên cố định trong mạng, có thể cần nhanh chóng điều chỉnh theo tình hình mạng thông qua các đề xuất quản trị.
Giá phí nhiên liệu phản ánh mong muốn tăng trưởng nhanh chóng và giữ cho blockchain có thể tiếp cận với mọi người.
Khuyến khích đưa ra những lựa chọn tốt trong thiết kế - chẳng hạn như ưu tiên độ an toàn, tính mô-đun, các sự kiện xác nhận, v.v.
) Tính phí nhiên liệu
Khi người dùng gửi giao dịch, họ cũng phải chỉ định hai số lượng trong giao dịch:
Số lượng phí nhiên liệu tối đa: Được đo bằng đơn vị phí nhiên liệu. Đây là số đơn vị phí nhiên liệu mà người dùng sẵn sàng chi cho việc thực hiện giao dịch.
Giá đơn vị phí nhiên liệu: Tính toán theo hệ bát phân cho mỗi đơn vị phí nhiên liệu, trong đó 1 bát phân = 0.00000001 APT###=$10^{-8}$(. Đây là mức giá phí nhiên liệu mà người dùng sẵn sàng trả.
Trong quá trình thực hiện, giao dịch sẽ bị tính phí:
chi phí cố định, chi phí cơ bản cố định cộng với chi phí bổ sung cho các giao dịch lớn.
chi phí thực hiện, dùng để thực hiện lệnh MOVE.
Chi phí đọc, được sử dụng để đọc dữ liệu từ lưu trữ bền vững.
Chi phí ghi, dùng để ghi dữ liệu vào lưu trữ bền vững.
Phí giao dịch cuối cùng có thể được tính bằng tổng số lượng phí nhiên liệu đã tiêu tốn ) nhân với đơn vị phí nhiên liệu ( nhân với đơn giá phí nhiên liệu. Ví dụ, nếu một giao dịch tiêu tốn 670 đơn vị phí nhiên liệu, và người dùng chỉ định đơn giá phí nhiên liệu trong giao dịch là 100 Octa mỗi đơn vị, thì phí giao dịch cuối cùng sẽ là 670 * 100 = 67000 Octa = 0.00067 APT.
Nếu một giao dịch tiêu tốn hết phí nhiên liệu trong quá trình thực hiện, thì bên gửi sẽ bị tính phí theo số lượng phí nhiên liệu tối đa, và tất cả các thay đổi mà giao dịch đó thực hiện sẽ bị hoàn lại.
) Thiết lập bảng kế hoạch phí nhiên liệu
1. Cấu hình cơ bản
Kế hoạch phí nhiên liệu có một số thành phần không liên quan đến chi tiết của một thao tác đơn lẻ, bao gồm kích thước giao dịch và đơn vị phí nhiên liệu tối đa ### khác với lượng phí nhiên liệu tối đa mà người dùng chỉ định trong giao dịch (.
2. Quy mô giao dịch
Đối với hầu hết các giao dịch, quy mô giao dịch có thể ở mức hàng nghìn byte. Tuy nhiên, việc phát hành mô-đun Move dễ dàng có thể lên tới hàng nghìn byte, trong khi khung khoảng 100 KB. Kích thước của hầu hết các mô-đun người dùng thường nằm trong khoảng từ 4KB đến 40KB. Ban đầu, chúng tôi đã đặt giá trị quy mô giao dịch là 32KB, nhưng dựa trên phản hồi của cộng đồng, yêu cầu cung cấp thêm không gian để đơn giản hóa phát triển ứng dụng, vì vậy chúng tôi đã điều chỉnh quy mô giao dịch lên 64KB.
Giao dịch quy mô rất lớn có thể làm tăng chi phí băng thông của toàn mạng và có thể ảnh hưởng tiêu cực đến hiệu suất. Nếu bị lạm dụng, bộ nhớ tạm sẽ bị khuyến khích bỏ qua các giao dịch có quy mô lớn hơn, do đó phương pháp của chúng tôi là đạt được sự cân bằng giữa kích thước giao dịch lớn nhất và khả năng truy cập.
3. Đơn vị phí nhiên liệu tối đa
Đơn vị phí nhiên liệu tối đa trong kế hoạch phí nhiên liệu định nghĩa số lượng thao tác tối đa mà một giao dịch có thể thực hiện. Lưu ý! Điều này khác với số lượng phí nhiên liệu tối đa mà người dùng chỉ định trong giao dịch.
Đơn vị phí nhiên liệu tối đa của kế hoạch phí nhiên liệu ảnh hưởng trực tiếp đến thời gian một giao dịch có thể thực hiện, việc đặt nó quá cao có thể dẫn đến ảnh hưởng tiêu cực đến hiệu suất của blockchain. Ví dụ, người dùng có thể quên có một gia tăng trong vòng lặp while, dẫn đến vòng lặp vô hạn, đây là một lỗi phổ biến. Chúng tôi phát hiện ra rằng, ngay cả khi chúng tôi đã thực hiện nâng cấp khung tối đa, chúng tôi vẫn chưa đạt đến 90% của đơn vị phí nhiên liệu tối đa của kế hoạch phí nhiên liệu ) được đặt là 1,000,000(.
4. Thực hiện
Để đánh giá chi phí thực thi, chúng tôi đã xây dựng một khung chuẩn và sử dụng Valgrind để phân tích Move VM khi thực thi khung này. Đầu ra của nó là một tập hợp mã nguồn có chú thích, cho chúng tôi biết mỗi dòng mã tạo ra bao nhiêu lệnh máy.
Dưới sự trợ giúp của phân tích trên, chúng tôi đã ước lượng sơ bộ chi phí tương đối của tất cả các lệnh MOVE và hàm gốc. Tuy nhiên, chúng tôi nhận thấy rằng phương pháp này có một số vấn đề với các hàm nội tuyến: chúng sẽ không tự động được bao gồm trong số lượng của người gọi. Chúng tôi cũng thấy rằng, điều này chỉ xảy ra khi chúng tôi phân tích một số lệnh MOVE, và chúng tôi có thể giải quyết vấn đề này bằng cách cộng các số lại với nhau.
Sau đó, bằng cách xem xét các ví dụ mã hóa nhằm tăng cường tính ổn định và an toàn của hệ thống, đội ngũ đã đưa ra số lượng lệnh máy thực thi cuối cùng. Con số này lần lượt được cân nhắc với đơn vị lưu trữ và phí nhiên liệu tối đa để xác định giá trị hiện tại của chúng trong kế hoạch phí nhiên liệu.
5. Lưu trữ
Mỗi khi truy cập vào các mục trạng thái sổ cái hoặc dữ liệu lưu trữ trong bộ nhớ vĩnh viễn, nút sẽ phát ra yêu cầu đọc hoặc ghi đến thiết bị lưu trữ. Tổng số lần truy cập dữ liệu mỗi giây phụ thuộc vào băng thông và khả năng IOPS của thiết bị lưu trữ. Tương tự như chu kỳ CPU trong phần tính toán phí nhiên liệu, việc truy cập dữ liệu là sự khan hiếm tạm thời mà người dùng blockchain cạnh tranh trên thị trường phí khi hệ thống bị tải, ngoài ra, chi phí chiếm dụng ổ đĩa để ghi dữ liệu trên chuỗi là vĩnh viễn. Nhóm thiết kế kế hoạch phí nhiên liệu lưu trữ bằng cách xem xét những chi phí này.
Việc truy cập và lưu trữ bất kỳ mục trạng thái nào sẽ phát sinh chi phí liên quan đến cấu trúc dữ liệu cây Merkle giống như sứa để xác minh trạng thái toàn bộ blockchain. Chi phí này liên quan đến cơ số của các mục trạng thái khác nhau )$2^{256}$(. Còn có một chi phí tỷ lệ thuận với kích thước của mỗi mục. Để thao tác trên một mục trạng thái, phí là ) trừ các trường hợp ngoại lệ được mô tả trong phần tiếp theo (:
Lưu trữ phí nhiên liệu = item_fee + )byte_fee * bytes(
) Đọc, tạo và viết
Bất kỳ quyền truy cập nào vào mục trạng thái đều thuộc một trong ba loại sau: đọc, tạo hoặc ghi. Quyền truy cập được tính phí theo loại mục và phí byte, như được chỉ ra trong phương trình trên.
Đọc là thao tác phổ biến nhất, nó chỉ bị giới hạn bởi sự khan hiếm tài nguyên tạm thời. Do đó, chi phí đọc được điều chỉnh dựa trên IOPS đĩa ### chi phí dự án ( và dung lượng băng thông của thông số kỹ thuật phần cứng tham khảo.
create là thêm một mục mới vào bộ nhớ trạng thái. Do đó, create đã tăng thêm cấu trúc dữ liệu xác thực, làm cho mọi thứ trở nên đắt đỏ hơn, vì vậy chi phí cao nhất. Chi phí tạo được điều chỉnh dựa trên không gian đĩa tham chiếu mà mạng sở hữu. Do đó, việc làm đầy đĩa với mục )item_fee( và byte )byte_fee( cần rất nhiều phí nhiên liệu.
Việc ghi thao tác cập nhật các mục hiện có trong lưu trữ trạng thái. Do đó, thao tác ghi sẽ không tạo ra chi phí bổ sung trong cấu trúc dữ liệu xác thực. Tuy nhiên, bằng cách sửa đổi các mục hiện có thành byte lớn hơn, vẫn có thể làm hỏng đĩa. Do đó, chúng tôi tính phí cho các byte trong các mục được cập nhật giống như khi tạo ra.
Cần lưu ý rằng chi phí liên quan đến việc lưu trữ được đánh giá dựa trên từng giao dịch: ngay cả khi bạn đọc/ghi cùng một tài nguyên nhiều lần, bạn chỉ cần trả một khoản phí.
Dựa trên những xem xét trên, chúng tôi đã định nghĩa 6 tham số phí nhiên liệu, chúng tạo thành thành phần của tổng chi phí phí nhiên liệu. Xem bên dưới:
per_item_read: Điều chỉnh theo IOPs
per_byte_read: Điều chỉnh theo băng thông thực tế
per_item_create:Điều chỉnh theo tổng dự án mục tiêu
per_byte_create: điều chỉnh theo kích thước tổng mục tiêu - mỗi mục chứa 1KB đầu tiên
per_item_write: giống như per_item_read
per_byte_write: giống như per_byte_create
) chi phí nhiên liệu ổn định đơn vị
Bất kể chi phí thực hiện hoạt động được tính theo giá trị thị trường của APT hoặc tiền tệ hợp pháp, mỗi hoạt động và giao dịch đều cần một chi phí đơn vị cố định so với chi phí lưu trữ và thực hiện. Chi phí đơn vị nhiên liệu cố định giúp duy trì kế hoạch chi phí nhiên liệu không thay đổi và tách rời khỏi giá trị thị trường tự do của APT. Hơn nữa, việc chọn chính xác số chữ số cho đơn vị nhiên liệu giúp duy trì kế hoạch chi phí nhiên liệu không thay đổi. Với điều này trong tâm trí, nhóm đã biểu diễn đơn vị nhiên liệu với độ chính xác khoảng 3 chữ số. Do đó, chi phí của giao dịch chuyển khoản khoảng 700 đơn vị nhiên liệu.
Tham gia cộng đồng
Dù chúng tôi đã đầu tư rất nhiều công sức vào kế hoạch phí nhiên liệu, nhưng nó vẫn chưa hoàn thiện. Là một dự án cộng đồng, các thành viên trong cộng đồng có thể lựa chọn:
1### Dựa trên kinh nghiệm của bạn, hãy chỉ ra những điểm không hợp lý trong kế hoạch phí nhiên liệu;
Hãy cho biết mối quan tâm của bạn về kế hoạch phí nhiên liệu và tham gia thảo luận cộng đồng.
sẽ tiến hành bỏ phiếu cho các đề xuất quản trị liên quan đến phí nhiên liệu.
) Làm thế nào để điều chỉnh chi phí nhiên liệu?
Kế hoạch phí nhiên liệu được lưu trữ như cấu hình on-chain, nhưng có thể được thay đổi thông qua các đề xuất quản trị và có thể thêm các chỉ thị hoặc chức năng gốc một cách liền mạch.
Kế hoạch phí nhiên liệu được thiết kế để có thể mở rộng, cho phép nâng cấp thông qua các đề xuất quản trị. Với việc cải tiến liên tục Move VM và tiếp thu phản hồi từ người dùng, các tham số phí nhiên liệu có thể được điều chỉnh theo thời gian.
Đôi khi, công thức phí nhiên liệu có thể cần những thay đổi phức tạp vượt ra ngoài cấu hình on-chain. Những công thức phí nhiên liệu này thường được mã hóa bằng Rust và được phân biệt thông qua các cờ tính năng phí nhiên liệu on-chain. Để nâng cấp những công thức này, cần phải cập nhật phần mềm nút với công thức mới và phân biệt bằng các cờ tính năng phí nhiên liệu khác nhau. Sau đó, phần mềm nút phải được phát hành và được các nhà điều hành nút áp dụng rộng rãi, cuối cùng, một đề xuất quản trị phải được phát hành và phê duyệt để có thể sử dụng phiên bản phí nhiên liệu mới.
Công việc trong tương lai
Đây là khung phí nhiên liệu khả thi đầu tiên của MOVE. Nó yêu cầu sửa đổi lớn đối với Move VM và Core. Chúng tôi hy vọng công việc này sẽ mở đường cho các công việc trong tương lai:
1### Giảm chi phí thực thi, sở hữu một mô hình phí nhiên liệu thực sự cho thấy biên dịch viên và máy ảo hoạt động hiệu quả ở đâu, nhóm có thể cải thiện phần lớn trong số đó để giảm chi phí thực thi.
2) Tính toán chi phí nhiên liệu đa chiều, cho phép người dùng chỉ định ngân sách riêng cho việc thực thi và lưu trữ. Như vậy, người dùng không phải trả giá nhiên liệu cao do thời gian thực thi quá lâu vì ứng dụng viết mã kém. Nó cũng sẽ cho phép định nghĩa giá nhiên liệu tối đa cho các giao dịch trên chuỗi một cách chi tiết hơn;
3) Giảm bớt trạng thái cồng kềnh, hiện tại không có phương pháp đơn giản nào để thu nhỏ tập hợp trạng thái, ngoại trừ hợp đồng ) hoặc người dùng ( xóa các thực thể một cách rõ ràng. Người dùng trả tiền để xóa dữ liệu có thể tạo ra cơ hội chênh lệch giá, người dùng tạo lưu trữ khi giá rẻ và xóa nó khi giá cao. Việc trì hoãn giải quyết thách thức này có thể làm giảm động lực của các nhà phát triển để xóa dữ liệu trên chuỗi. Nhóm đang khám phá khái niệm TTL cho mỗi dự án, khái niệm này sẽ xóa các mục trạng thái chưa được truy cập khi TTL hết hạn.