Phân tích Bytecode và Khối mã Ethereum
Phân chia khối mã là một chiến lược để chia bytecode thành các khối nhỏ hơn, giúp giảm kích thước chứng nhận. Tuy nhiên, phương pháp này chỉ hiệu quả nếu chỉ có một phần nhỏ của bytecode được truy cập trong quá trình thực thi. Phân tích này khám phá các mẫu truy cập byte và khối để đánh giá tính hữu ích của việc phân chia khối mã.
Phương pháp
Kho lưu trữ đầy đủ bao gồm mã thu thập và phân tích dữ liệu có thể được tìm thấy tại đây.
Phân tích
Thống kê tập dữ liệu chính
- Phạm vi Block: 15537394 (The Merge)–22000000
- Số lượng Block: 100898 (được phân bổ đều trên phạm vi block)
- Tổng số tương tác hợp đồng: 19,934,701
- Số lượng hợp đồng duy nhất tối thiểu được tương tác mỗi block: 1
- Số lượng hợp đồng duy nhất trung bình được tương tác mỗi block: 187
- Số lượng hợp đồng duy nhất tối đa được tương tác mỗi block: 659
- Tổng số hợp đồng duy nhất được tương tác: 1,220,017
Tỷ lệ truy cập Byte trung bình
- Ban đầu: 22.8%
- Với Kích thước Mã: 54.0% (+31.2%)
- Với Sao chép Mã: 31.5% (+8.7%)
Tỷ lệ truy cập Khối trung bình
- Ban đầu: 29.6%
- Với Kích thước Mã: 57.8% (+28.2%)
- Với Sao chép Mã: 37.6% (+8.0%)
Sau khi bao gồm các hướng dẫn truy cập mã, chúng tôi thấy có sự gia tăng vừa phải trong các tỷ lệ truy cập. Tuy nhiên, điều này chủ yếu là do các opcode kích thước mã. Như đã đề cập trước đây, việc thêm kích thước mã vào trường tài khoản sẽ khiến các opcode sao chép mã trở thành các hướng dẫn duy nhất để truy cập toàn bộ mã byte. Do số lượng hướng dẫn sao chép mã ít hơn đáng kể, nên các tỷ lệ truy cập tổng thể thấp hơn.
Việc Chia Nhỏ Mã Có Phải Là Một Giải Pháp Khả Thi?
Tham khảo Đề xuất cải tiến Ethereum (EIP)-2926, điểm chính của việc chia nhỏ mã là để giảm kích thước chứng nhận, vì trạng thái hiện tại yêu cầu toàn bộ mã byte được sử dụng trong bằng chứng mã.
Phân tích của chúng tôi cho thấy không phải tất cả các byte trong mã byte của hợp đồng đều được sử dụng. Trên thực tế, chỉ có một tỷ lệ tương đối nhỏ các byte và khối được sử dụng. Dựa trên các mẫu truy cập hiện tại, nếu chúng tôi thực hiện việc chia nhỏ mã, chúng tôi sẽ giảm đáng kể lượng byte thực tế được bao gồm trong chứng nhận mã.
Việc thêm kích thước mã vào trường tài khoản trong EIP2926 sẽ hiệu quả làm cho các opcode sao chép mã trở thành các hướng dẫn duy nhất yêu cầu truy cập toàn bộ mã byte. Ngoài ra, như đã chỉ ra trong các phát hiện của chúng tôi, số lượng opcode sao chép mã ít hơn đáng kể so với kích thước mã. Do đó, chúng tôi sẽ tiếp tục giảm kích thước chứng nhận mã trung bình dựa trên mẫu truy cập hiện tại.
Một khám phá bổ sung mà chúng tôi có thể thực hiện là xác định kích thước khối tối ưu. Trong EIP-2926, nó sử dụng các khối 31 byte. Chúng tôi có thể muốn khám phá các kích thước khối nhỏ hơn, chẳng hạn như 16 byte, để tối đa hóa số lượng byte được sử dụng trên mỗi khối. Tuy nhiên, điều này đi kèm với chi phí tổng quát hash bổ sung. Do đó, chúng tôi cần thử nghiệm với các kích thước khối khác nhau để tìm ra sự cân bằng tối ưu.





