BTC
ETH
HTX
SOL
BNB
Xem thị trường
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

Lỗi hard fork Berlin do chênh lệch mức tiêu thụ gas của địa chỉ "0x10"

Tokenview
特邀专栏作者
2021-04-27 11:00
Bài viết này có khoảng 1192 từ, đọc toàn bộ bài viết mất khoảng 2 phút
Nguồn gốc của lỗi OpenEthereum tại khối #12244294: OpenEthereum bao gồm một danh sách triển khai EVM được biên dịch trước!
Tóm tắt AI
Mở rộng
Nguồn gốc của lỗi OpenEthereum tại khối #12244294: OpenEthereum bao gồm một danh sách triển khai EVM được biên dịch trước!

Ethereum OpenEthereum khách hàng duy nhất trong khối #12244294Lỗi đã khiến mạng Ethereum ngừng hoạt động vào thời điểm đó và nó không thể theo kịp mạng sau khi khối có vấn đề được tạo. Vậy nguyên nhân của vụ tai nạn này là gì?

Sử dụng trình duyệt Tokenview Ethereum để xem giao dịch gây ra tai nạn:https://eth.tokenview.com/cn/tx/0x7006f38fa2e6654fae1a781aefc5885fe0cb8f778b1add10636eaf7e34279247

Đây là một giao dịch gọi theo hợp đồng, phân phối ETH từ sàn giao dịch KuCoin đến các địa chỉ khác.

Hãy phân tích kỹ quy trình gọi hợp đồng:

1. Trong cột "Đầu vào dữ liệu" của trình duyệt, các thông số của lệnh gọi hợp đồng được hiển thị. Dòng đầu tiên cho biết danh sách địa chỉ bắt đầu từ byte "40" (thập lục phân), tức là 64 byte. Dòng thứ tư trong hình, Dòng thứ hai cho biết danh sách số tiền truyền bắt đầu từ byte "1a0" (thập lục phân), tức là 416 byte, dòng thứ 15 của cột nhập dữ liệu.

2. Việc chuyển tiền được thực hiện theo thứ tự của danh sách địa chỉ và số tiền được chuyển đến từng địa chỉ tương ứng với danh sách dữ liệu chuyển từng cái một.

3. Bây giờ chúng ta bắt đầu duyệt qua danh sách địa chỉ, nhìn vào số "10" (thập lục phân) ở dòng thứ ba, có nghĩa là chúng ta sẽ chuyển ETH đến 16 địa chỉ tiếp theo.

Theo thứ tự trong hình, khi đếm đến hàng thứ 10, giá trị tìm được trở thành "10". Giá trị này thực sự là độ dài của danh sách đại diện cho số tiền chuyển. Nhưng theo hướng dẫn ở dòng thứ ba, nên chuyển đến 16 địa chỉ, sau đó hợp đồng sẽ sử dụng "0x10" làm địa chỉ để tiếp tục thao tác chuyển và chuyển 0 ETH đến địa chỉ "0x10".

Trên thực tế, "0x10" là một trong những "địa chỉ đặc biệt" của EVM, hoàn toàn nằm trong danh sách các hợp đồng được biên dịch sẵn của EVM. Đó là một hợp đồng được biên dịch trước được xác nhận bởi EIP-2537 cho chương trình mật mã ghép đôi BLS, nhưngEIP này chưa được triển khai trên mạng chính.

tiêu đề phụ

Mức tiêu thụ gas của địa chỉ "0x10" phân kỳ

Hard fork Berlin đã thay đổi phương pháp đo lường mức tiêu thụ Gas trong EVM. Sau khi triển khai EIP-2929, nếu hoạt động lưu trữ trạng thái được thực hiện trên cùng một khe lưu trữ nhiều lần trong một giao dịch, thì lần thực thi đầu tiên sẽ tiêu tốn nhiều Gas hơn và lần thực hiện tiếp theo sẽ tiêu thụ ít gas hơn.

Đây là nguồn gốc của lỗi OpenEthereum tại khối #12244294: OpenEthereum bao gồm danh sách triển khai EVM được biên dịch trước.Do đó, OpenEthereum sẽ chiết khấu gas cho giao dịch truy cập "0x10" trong giao dịch này. Tuy nhiên, hầu hết các khách hàng đang hoạt động của mạng không triển khai EIP-2929 theo cách này và họ chỉ cung cấp chiết khấu gas cho các giao dịch truy cập vào các hợp đồng được biên dịch sẵn đã kích hoạt.

Do đó, tính toán của khách hàng OpenEthereum về lượng Gas được tiêu thụ bởi giao dịch khác với các khách hàng khác trong mạng.

Thời gian ngừng hoạt động của một máy khách OpenEthereum này do sự phân kỳ tiêu thụ gas không đủ nghiêm trọng để gây ra một nhánh chuỗi lớn, nhưng nó cũng nhắc nhở chúng ta sử dụng triển khai nhiều máy khách để cải thiện khả năng chống chịu.

Không thể phủ nhận rằng công nghệ blockchain vẫn đang trong quá trình không ngừng cố gắng và tiến bộ, Defi và NFT bùng nổ vào năm 2021 cũng sẽ lan tỏa đến nhiều đối tượng hơn với tốc độ chưa từng thấy. Tokenview hy vọng sẽ chung tay với nhiều nhà phát triển hơn để tạo ra những khối tốt hơn .xích thế giới.

0x
cái nĩa
Chào mừng tham gia cộng đồng chính thức của Odaily
Nhóm đăng ký
https://t.me/Odaily_News
Nhóm trò chuyện
https://t.me/Odaily_CryptoPunk
Tài khoản chính thức
https://twitter.com/OdailyChina
Nhóm trò chuyện
https://t.me/Odaily_CryptoPunk