Dưới đây là cách hoạt động cơ bản của một phép toán Solidity dưới lớp nền. Lấy ví dụ đơn giản như uint c = a + b — nó có vẻ đơn giản khi bạn viết, nhưng trình biên dịch sẽ dịch nó thành một thứ hoàn toàn khác ở cấp độ mã bytecode.
Sau khi biên dịch, bạn sẽ nhận được các mã lệnh (opcode) trông roughly như sau: PUSH1 a PUSH1 b ADD
Đó là EVM đang nói. Mỗi lệnh được thực thi lần lượt từng cái một. Client xử lý từng opcode một theo thứ tự, đẩy giá trị vào stack, thực hiện các phép toán, rồi chuyển sang lệnh tiếp theo. Không có mẹo vặt, không có phép thuật — chỉ là một chuỗi các bước xác định để biến mã cao cấp của bạn thành các thao tác có thể thực thi trên máy.
Đây là lý do tại sao tối ưu gas lại quan trọng trong phát triển blockchain. Mỗi opcode có một chi phí, và hiểu rõ mã bytecode được sinh ra từ Solidity của bạn là sự khác biệt giữa hợp đồng thông minh hiệu quả và lãng phí.
Xem bản gốc
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.
10 thích
Phần thưởng
10
5
Đăng lại
Retweed
Bình luận
0/400
SelfSovereignSteve
· 6giờ trước
Lần đầu tiên mới hiểu ra rằng mã của chúng ta viết đơn giản và thô sơ đến vậy, trực tiếp là stack đẩy và kéo điên cuồng
phần gas thực sự là bí quyết, hiểu bytecode và không hiểu bytecode của hợp đồng khác nhau quá lớn
Này, tại sao còn có người viết những thứ tiêu tốn gas như vậy...
viết solidity thì thích thật đấy, nhưng sau khi biên dịch thì bộ đó nhìn là đã chóng mặt rồi
Đây chính là lý do tại sao thao tác cấp thấp assembly đôi khi lại có thể tiết kiệm được rất nhiều tiền
Xem bản gốcTrả lời0
SchrödingersNode
· 7giờ trước
Có vẻ như phép cộng đơn giản, sau khi biên dịch thì biến thành đống mã opcode này... Mỗi lần đều phải nhắc nhở bản thân đừng nghĩ chủ quan quá
Xem bản gốcTrả lời0
BearMarketBarber
· 7giờ trước
Thật sự, lập trình Solidity không hiểu bytecode chính là đang trả thuế trí tuệ đó
Xem bản gốcTrả lời0
RetiredMiner
· 7giờ trước
Trời ơi, viết a+b mà hóa ra phức tạp đến vậy, không trách phí gas đau lòng thế này
Xem bản gốcTrả lời0
AirdropSkeptic
· 7giờ trước
Chỉ vậy thôi à, nhìn vào dòng mã đơn giản này nhưng đằng sau là tất cả các opcode đang chạy, không trách được phí gas lại cao như vậy...
Dưới đây là cách hoạt động cơ bản của một phép toán Solidity dưới lớp nền. Lấy ví dụ đơn giản như uint c = a + b — nó có vẻ đơn giản khi bạn viết, nhưng trình biên dịch sẽ dịch nó thành một thứ hoàn toàn khác ở cấp độ mã bytecode.
Sau khi biên dịch, bạn sẽ nhận được các mã lệnh (opcode) trông roughly như sau:
PUSH1 a
PUSH1 b
ADD
Đó là EVM đang nói. Mỗi lệnh được thực thi lần lượt từng cái một. Client xử lý từng opcode một theo thứ tự, đẩy giá trị vào stack, thực hiện các phép toán, rồi chuyển sang lệnh tiếp theo. Không có mẹo vặt, không có phép thuật — chỉ là một chuỗi các bước xác định để biến mã cao cấp của bạn thành các thao tác có thể thực thi trên máy.
Đây là lý do tại sao tối ưu gas lại quan trọng trong phát triển blockchain. Mỗi opcode có một chi phí, và hiểu rõ mã bytecode được sinh ra từ Solidity của bạn là sự khác biệt giữa hợp đồng thông minh hiệu quả và lãng phí.