

lời tựa
lời tựa
Khi tôi kiểm tra giao dịch trên Etherscan cách đây một thời gian, tôi đã tìm thấy một địa chỉ rất thú vị: 0x00000000a03396F6F864B496713f2623b6756Be2. Địa chỉ này bắt đầu bằng 0 x 00000000. Tôi đã tìm kiếm địa chỉ với mục đích khám phá những điều chưa biết và nhận thấy rằng địa chỉ này không hề đơn giản. Nó không chỉ có cấu trúc độc đáo mà còn tiết kiệm phí gas.
tiêu đề cấp đầu tiên
khí là gì
Gas là một đơn vị được sử dụng để đo nỗ lực tính toán cần thiết để thực hiện một hoạt động cụ thể trên chuỗi khối Ethereum, một đơn vị tính toán trên mạng Ethereum. Ta có thể hiểu một cách đơn giản Gas là xăng, thứ đảm bảo cho sự hoạt động bình thường của mạng lưới Ethereum. Trên chuỗi khối Ethereum, một khoản phí Gas nhất định được yêu cầu để thực hiện thao tác ghi.
2.1 Gas Price
Trong Ethereum, đơn vị tiền tệ là ether (ête), 1 ether = 1 x 10 18 Wei. Các hoạt động trên chuỗi khối Ethereum, chẳng hạn như gửi mã thông báo, gọi hợp đồng, v.v., phải trả Gas tương ứng và đơn vị được tính bằng Wei. Wei là đơn vị bản địa nhỏ nhất của ETH và đơn vị Gas mà ETH tiêu thụ là Gwei, 1 Gwei = 1 x 10 9 Wei.
2.2 Gas Limit
tiêu đề phụ
Giá Gas là lượng Gwei tương ứng với mức tiêu thụ 1 Gas trong Ethereum, tất nhiên người gửi giao dịch có thể tùy chỉnh mức giá trên mỗi đơn vị Gas mà mình sẵn sàng chi trả. Ví dụ: một giao dịch của người gửi giao dịch cần tiêu tốn 10 Gas và người gửi giao dịch sẵn sàng trả 3 Wei/Gas và tổng chi phí của giao dịch là 30 Wei. Trong các ví chúng ta sử dụng (chẳng hạn như MetaMask) sẽ có các tùy chọn nâng cao để điều chỉnh phí Gas, Giá Gas càng cao thì ưu tiên đóng gói càng cao.
Gas Limit là đơn vị giới hạn tiêu thụ Gas, tức là lượng Gas tối đa mà người gửi giao dịch có thể sử dụng để thực hiện giao dịch khi hoàn thành mỗi giao dịch. Nếu không có giới hạn Gas Limit, số dư tài khoản của người gửi giao dịch có thể bị cạn kiệt do thao tác không chính xác.Giới hạn Gas là một cơ chế an toàn để ngăn tất cả ETH trong tài khoản bị tiêu hao.
2.3 Chi phí khí cố hữu
Chi phí gửi một giao dịch bao gồm hai phần:
1. Chi phí vốn có
2. Chi phí thi công
Chi phí thực hiện, như tên của nó, có liên quan đến thực thi. Càng nhiều hoạt động để thực hiện một giao dịch, thì càng cần sử dụng nhiều tài nguyên EVM và chi phí thực hiện càng cao.
Và chi phí vốn có được xác định bởi tải trọng của giao dịch:
1. Tải để tạo hợp đồng thông minh là tạo mã EVM của hợp đồng thông minh
2. Tải gọi chức năng hợp đồng thông minh là dữ liệu được nhập khi thực hiện tin nhắn
Từ Phụ lục G của Sách vàng Ethereum, chúng ta có thể biết khí liên quan đến việc tạo hợp đồng và thực hiện giao dịch.
Chúng tôi giả định rằng $N{zeros}$ biểu thị tổng số byte trong tải giao dịch là byte 0 và $N{nonzeros}$ biểu thị tổng số byte trong tải giao dịch không phải là byte 0. Theo Chương 6.2 của Sách vàng về thực hiện Mô tả, chi phí cố hữu có thể đạt được.
tiêu đề cấp đầu tiên
Địa chỉ bắt đầu bằng 0 trong địa chỉ Ethereum
Do phí gas hiện nay tương đối đắt đỏ nên việc tối ưu phí gas là rất quan trọng, có nhiều cách để tối ưu phí gas.Có rất nhiều cách để tối ưu hóa phí Gas.Bạn có thể sử dụng các mức để tối ưu hóa Gas. Chúng ta có thể tiết kiệm gas trong nhiều loại giao dịch bằng cách sử dụng các địa chỉ có nhiều byte 0 hơn (tức là trọng số Hamming) hơn bình thường và trong một số trường hợp, các địa chỉ có nhiều byte 0 hơn ở đầu.
Trọng số Hamming là số ký hiệu khác 0 trong một chuỗi ký hiệu. Biểu tượng toàn 0 có trọng số Hamming là 0 và 1101 có trọng số Hamming là 3.
Như bạn có thể thấy trong Phụ lục G của Ethereum Yellow Paper, cần 4 Gas khi sử dụng 0 byte và 16 Gas khi sử dụng các byte khác 0:
Mỗi lần chúng tôi sử dụng byte 0 thay vì byte khác 0, chúng tôi tiết kiệm được 16 Gas, vì vậy mỗi khi chúng tôi thay thế byte khác 0 bằng byte 0 trong msg.data, chúng tôi sẽ tiết kiệm được 12 Gas. Trong Ethereum, địa chỉ là một chuỗi thập lục phân (20 byte) gồm 40 ký tự ngẫu nhiên bắt đầu bằng 0 x, khi xem chuỗi byte ở dạng thập lục phân, vì mỗi cặp số (mỗi ký tự có 16 chữ số có thể) tạo nên một byte (16 2 = 2 8 = 256 bit), do đó, một số 0 trong hệ thập lục phân duy nhất hoặc các số 0 liền kề trong hai byte khác nhau không làm giảm trọng số Hamming của chuỗi, vì vậy chỉ có hai số 0 trong hệ thập lục phân liên tiếp sẽ làm giảm trọng số Hamming. Thứ tự của 0 byte cũng không ảnh hưởng đến kết quả tối ưu hóa Gas (ví dụ: địa chỉ 0x00a0009e638D25EFE5a894f6a36F42734477dECa có 2 byte 0).\,Trong hàm transfer() của ERC 20, không có sự khác biệt về trọng số Hamming của msg.sender, nhưng trong tham số _to address được truyền cho msg.data như một phần của hàm transfer().\times 12 = 48 \,Sử dụng StandardToken của OpenZeppelin làm ví dụ tham khảo. Chuyển tiêu chuẩn đến một địa chỉ không có byte 0 (ví dụ: 0xAb8483F64d9C6d1EcF9b849Ae677dD3315835cb2) tốn 35039 Gas, trong khi chuyển đến địa chỉ có 4 byte 0 (ví dụ: 0x00000000b011402777E34EFf44905BE85e3CdD 01 , tức là có 4 cặp số 0 trong địa chỉ) chỉ chuyển 34991 Gas, họ có chênh lệch $35039 - 34991 = 48
Khí $. Và chúng tôi đã nói trước đó rằng mỗi khi chúng tôi sử dụng 0 byte thay vì các byte khác không, chúng tôi có thể tiết kiệm được 12 Gas (và trong phiên bản trước của Ethereum, chúng tôi thậm chí có thể tiết kiệm tới 64 Gas), ở đây 48 Gas có thể được biểu thị bằng $ 4
Gas$, như chúng tôi mong đợi từ tờ báo màu vàng.
Sự khác biệt giữa hai địa chỉ 0 byte 0x00a0009e638D25EFE5a894f6a36F42734477dECa và hai giá trị trên lần lượt là 24 Gas, điều này cho thấy nó cũng phù hợp với mong đợi.
Nhưng nếu có 0 byte ở cuối địa chỉ của chúng tôi, thì rất dễ bị tấn công bởi các địa chỉ ngắn, vì vậy một địa chỉ có nhiều byte 0 bắt đầu bằng 0 x 00 sẽ trở thành lựa chọn tốt hơn. Nếu địa chỉ có ít nhất 4 byte đầu 0 (tức là 8 đầu 0 ở định dạng mã hóa thập lục phân), thì mỗi địa chỉ sẽ chỉ cần chiếm 16 byte, để hai địa chỉ có thể vừa với một gói 32 byte trở lên. Loại tối ưu hóa này không chỉ vì tối ưu hóa Gas do $G_{txdatazero}$ mang lại, mà còn bởi vì chúng tôi không cần đọc và ghi thêm byte từ dữ liệu cuộc gọi, chúng tôi có thể tiết kiệm nhiều Gas hơn, vì vậy hãy chuyển sang loại tối ưu hóa như vậy một địa chỉ, bất kể địa chỉ đó là địa chỉ hợp đồng hay địa chỉ tài khoản thông thường, có thể tiết kiệm được khoảng 5% chi phí.
CHI GasToken được phát triển bởi công cụ tổng hợp trao đổi phi tập trung 1inch.exchange áp dụng nguyên tắc như vậy và nhiều địa chỉ tài khoản thông thường sử dụng các số 0 đứng đầu làm địa chỉ của riêng họ.
Làm cách nào để có thêm địa chỉ bắt đầu bằng số 0 đứng đầu? Điều này giống như cách tạo số ảo Ethereum mà bạn đã thấy và phương pháp tạo không được cung cấp ở đây (vì Profanity, trước đây đã cung cấp dịch vụ tạo số ảo, có một kẽ hở). Tất nhiên, bạn muốn lấy càng nhiều số 0 bắt đầu thì sẽ càng khó và càng mất nhiều thời gian.
Có 92,47% cơ hội tìm thấy 0 0 byte tại địa chỉ.
7,25% cơ hội tìm thấy byte 0.
0,00000106% cơ hội tìm thấy 4 0 byte.
tái bút
Có nhiều cách để tối ưu hóa Gas, sau đây chúng ta nghiên cứu phương pháp tiết kiệm Gas từ góc độ lớp dưới cùng của EVM, qua nghiên cứu chúng ta có thể rút ra một kết luận: càng nhiều 00 trong địa chỉ Ethereum (ở đây cần lưu ý rằng 0 xuất hiện theo cặp, vì lý do Chúng tôi đã đề cập trong Phần 4), bất kể địa chỉ đó là địa chỉ hợp đồng hay địa chỉ thông thường, cho dù đó là địa chỉ chuyển vào hay địa chỉ chuyển ra, rất nhiều Gas có thể được lưu lại.
bài viết tham khảo
