EIP-3529: Giảm khí hồi
Nguồn | eips.ethereum.org
tiêu đề cấp đầu tiên
bản tóm tắt ngắn gọn
lý do
lý do
Trả lại gas của SSTORE và SELFDESTRUCT ban đầu được giới thiệu để khuyến khích các nhà phát triển ứng dụng thực hành "vệ sinh trạng thái tốt" khi viết ứng dụng và dọn sạch các khe lưu trữ và hợp đồng không còn cần thiết. Tuy nhiên, hóa ra hiệu quả do công nghệ này mang lại thấp hơn nhiều so với dự kiến và việc hoàn trả khí gây ra một số hậu quả tai hại không lường trước được:
➤ Hoàn trả gas làm xuất hiện GASToken. GasToken tốt cho việc di chuyển không gian gas từ các giai đoạn có phí thấp sang các giai đoạn có phí cao, nhưng nó cũng không tốt cho mạng, đặc biệt là làm trầm trọng thêm tình trạng lạm phát quy mô trạng thái (vì các khe trạng thái được sử dụng hiệu quả làm "pin" để tích lũy gas) và tắc nghẽn không hiệu quả Sử dụng gas chuỗi khối.
tiêu đề cấp đầu tiên
tham số
tham số
Đối với các khối có block.number >= FORK_BLOCK, các thay đổi sau là bắt buộc.
1. Xóa trả lại SELFDESTRUCT
2. Thay thế SSTORE_CLEARS_SCHEDULE (được xác định bởi EIP-2200) bằng SSTORE_RESET_GAS + ACCESS_LIST_STORAGE_KEY_COST (4.800 gas dưới tác động tổng hợp của EIP-2929 + EIP-2930)
tiêu đề cấp đầu tiên
giải thích nguyên tắc
EIP-2200 giới thiệu ba trường hợp giảm giá:
1. Nếu giá trị ban đầu khác 0 và giá trị mới bằng 0, hãy thêm lượng xăng SSTORE_CLEARS_SCHEDULE (hiện tại là 15.000) vào máy tính hoàn tiền
2. Nếu giá trị ban đầu bằng 0, giá trị hiện tại khác 0 và giá trị mới bằng 0, hãy thêm lượng gas SSTORE_SET_GAS - SLOAD_GAS (hiện tại là 19.900) vào máy tính hoàn tiền
3. Nếu giá trị ban đầu khác 0, giá trị hiện tại là một giá trị khác 0 khác và giá trị mới bằng với giá trị ban đầu, hãy thêm gas của SSTORE_RESET_GAS - SLOAD_GAS (hiện tại là 4.900) vào máy tính trả lại
Trong ba trường hợp này, chỉ (1) sẽ kích hoạt gastoken và cho phép khối tiêu thụ nhiều gas hơn giới hạn gas của khối khi thực thi. (2) không có tính năng này, vì để được hoàn lại 19.900 gas, cùng một khe lưu trữ trước đó phải thay đổi từ 0 thành khác 0, tốn 20.000 gas. Không thể lấy gas từ một khe và sử dụng nó để chỉnh sửa một khe khác có nghĩa là nó không thể được sử dụng làm mã thông báo gas. Ngoài ra, để nhận được khoản tiền hoàn lại yêu cầu khôi phục ghi và mở rộng bộ nhớ để khí được trả lại không làm tăng khối lượng công việc của khách hàng đối với các khối xử lý. (3) tương tự: khoản hoàn trả 4.900 gas chỉ được cấp nếu cùng một vị trí trước đó đã tiêu thụ 5.000 gas.
EIP này xử lý trường hợp đầu tiên. Chúng ta có thể sử dụng đối số "ghép nối" tương tự để xác định các điều kiện trong đó không có mã thông báo gas (ví dụ: bạn không thể lấy nhiều gas hơn trong một khe so với đầu vào của mình), chuyển đổi mỗi Trả về chi tiêu trước đó của cùng một khe lưu trữ được ánh xạ tới cùng một giao dịch. Khi giá trị ban đầu của một khe lưu trữ khác không, nếu nó được thay đổi thành 0, có hai khả năng xảy ra:
1. Đây có thể là lần đầu tiên khe cắm bộ nhớ được đặt thành 0. Trong trường hợp này, chúng tôi có thể ghép nối thời gian này với chi phí tối thiểu là SSTORE_RESET_GAS + ACCESS_LIST_STORAGE_KEY_COST cho lần đầu tiên đọc và chỉnh sửa vùng lưu trữ.
2. Đây có thể là trường hợp khi khe cắm bộ nhớ được đặt thành 0 lần thứ hai hoặc sau khi nó được đặt thành 0. Trong trường hợp này, chúng tôi có thể ghép nối sự kiện này với lần cuối cùng giá trị thay đổi từ 0 thành giá trị khác và khí của SSTORE_CLEARS_SCHEDULE đã bị xóa khỏi lợi nhuận.
Đối với trường hợp thứ hai và các trường hợp sau đó, giá trị của SSTORE_CLEARS_SCHEDULE là gì không quan trọng, bởi vì lợi nhuận có kích thước khí đó khớp với lợi nhuận rõ ràng có cùng kích thước. Điều này chỉ để lại trường hợp đầu tiên. Để đảm bảo rằng tổng lượng gas tiêu thụ trên một khe lưu trữ là dương, chúng ta cần SSTORE_CLEARS_SCHEDULE <= SSTORE_RESET_GAS + ACCESS_LIST_STORAGE_KEY_COST. Do đó, EIP này chỉ đơn giản là giảm SSTORE_CLEARS_SCHEDULE thành tổng của hai chi phí chung đó.
Một lý do khác cho EIP này là việc xóa dữ liệu chưa được đọc (thường là dữ liệu "vô dụng") không có lợi nhuận ròng, nhưng việc xóa dữ liệu đã được đọc (thường là dữ liệu "hữu ích") sẽ tiếp tục Có lợi nhuận ròng.
tương thích ngược
Lợi nhuận hiện chỉ được áp dụng sau khi thực hiện giao dịch, do đó không thể ảnh hưởng đến bất kỳ khung lệnh gọi cụ thể nào có sẵn trong quá trình thực thi. Do đó, việc xóa chúng sẽ không phá vỡ quá trình thực thi bất kỳ mã nào, mặc dù nó sẽ khiến một số ứng dụng không khả thi về mặt kinh tế.
Gas token sẽ trở nên vô giá trị. Các bot chênh lệch giá DeFi ngày nay thường sử dụng sơ đồ mã thông báo gas hiện có hoặc sơ đồ tùy chỉnh để giảm chi phí trên chuỗi, nhờ viết lại mã của chúng để dọn sạch các cuộc gọi đến cơ chế lưu trữ gas không còn hữu ích.
Tuy nhiên, việc giữ hoàn toàn tiền lãi trong new = original = 0 != current và giữ một số tiền lãi trong các trường hợp khác không -> 0 đảm bảo rằng một số trường hợp sử dụng chính nhận được (và xứng đáng) được xử lý chi phí khí tốt hơn sẽ tiếp tục có lợi. Ví dụ, chế độ cấu hình lưu trữ zero -> nonzero -> zero chỉ tiêu thụ khoảng 100 gas. Các mẫu này bao gồm hai trường hợp quan trọng:
➤ Anti-reentrant lock (thường thay đổi từ 0 thành 1 trước khi cuộc gọi phụ bắt đầu, sau đó chuyển về 0 khi cuộc gọi phụ kết thúc)
➤ Ủy quyền và gửi ERC20 (khi chuyển mã thông báo được ủy quyền,"giá trị ủy quyền"tiêu đề phụ
Tác động đến ưu đãi lưu trữ rõ ràng
Một lời chỉ trích đối với các EIP trước đó về giảm giá xóa (EIP-3298 và EIP-3403) là các EIP này loại bỏ hoàn toàn khuyến khích đặt giá trị thành 0, khuyến khích người dùng không xóa hoàn toàn một vị trí (ngay cả khi họ muốn) ) , mặc dù khả năng họ muốn sử dụng lại vị trí đó là rất nhỏ.
Ví dụ: nếu bạn có một đơn vị mã thông báo ERC20 và bạn muốn cho đi hoặc bán toàn bộ số dư của mình, bạn chỉ có thể đưa ra 0,999999 đơn vị và giữ phần còn lại. Nếu bạn muốn đặt lại nhiều mã thông báo này vào cùng một tài khoản trong tương lai, bạn chỉ cần trả 5.000 gas cho SSTORE (2.100 để đọc + 2.900 cho cài đặt khác 0 đến khác 0) thay vì 22.100 ( 20.000 cho cài đặt từ giá trị không đến giá trị khác không). Hôm nay, phần gas này được bù đắp bằng khoản hoàn trả 15.000 gas để xóa kho, vì vậy nếu bạn chắc chắn hơn 15000/17100 = 87,7% rằng khe lưu trữ sẽ được sử dụng lại, thì bạn sẽ có động lực để làm như vậy; theo EIP 3298 Hoặc cài đặt của EIP 3403, phần khuyến khích bù đắp không tồn tại, vì vậy nếu khả năng bạn sử dụng lại khe lưu trữ lớn hơn 0, tốt hơn là đặt nó thành giá trị khác không.
Đối với 4.800 khoản giảm giá gas còn lại, nếu bạn cảm thấy rằng cơ hội sử dụng lại một vị trí lớn hơn 4800/17100 = 28,1%, thì bạn có động cơ để giữ vị trí đó khác không. Nó không hoàn hảo, nhưng nó có thể cao hơn tỷ lệ người bình thường lấy lại cùng một mã thông báo tại cùng một địa chỉ sau khi xóa toàn bộ số dư của họ.
tiêu đề cấp đầu tiên
tiêu đề phụ
Chi phí gas cho EIP-2929
tiêu đề phụ
Sau khi giảm trở lại
tiêu đề cấp đầu tiên
Cân nhắc về Bảo mật
Lợi nhuận không hiển thị đối với thực thi giao dịch, vì vậy điều này không có bất kỳ tác động nào đến logic thực thi giao dịch.
Công việc dịch thuật của ECN nhằm mục đích cung cấp thông tin và tài nguyên học tập chất lượng cao cho cộng đồng Ethereum Trung Quốc. Bản quyền của bài viết thuộc về tác giả gốc và phải ghi rõ nguồn của văn bản gốc cũng như trang web ETH Trung Quốc khi in lại. Để tái bản dài hạn, vui lòng liên hệ với eth@ecn.co để được ủy quyền.
Liên kết gốc:https://eips.ethereum.org/EIPS/eip-3529
Công việc dịch thuật của ECN nhằm mục đích cung cấp thông tin và tài nguyên học tập chất lượng cao cho cộng đồng Ethereum Trung Quốc. Bản quyền của bài viết thuộc về tác giả gốc và phải ghi rõ nguồn của văn bản gốc cũng như trang web ETH Trung Quốc khi in lại. Để tái bản dài hạn, vui lòng liên hệ với eth@ecn.co để được ủy quyền.
Tài khoản chính thức: Trạm Trung Quốc ETH
Trang web: ethereum.cn


