Cách mà chúng tôi tại @Alchemy phát triển và ra mắt tài khoản thông minh tiết kiệm gas nhất trong lịch sử các tài khoản thông minh. 🕶️ Tất cả bắt nguồn từ một ý tưởng khoảng 3 năm trước. Chẳng ai biết rằng điều này sẽ giúp người dùng tiết kiệm được một khoản tiền lớn.
Vào tháng 5 năm 2023, đã có một cơn sốt trên Twitter về các proxy (ví dụ: ERC1967, bản sao, v.v.) Mọi người có các biến không thay đổi, nhưng họ muốn có proxy. Điều này là không thể thực hiện - nhưng một số người trong chúng tôi đã nhận thử thách. Vấn đề không phải là EVM. Mà là cách chúng tôi nghĩ về các proxy.
Vì vậy, chúng tôi đã xây dựng nó - nhiều phiên bản được cắt lên. Cả hai của tôi và @wighawag đều tuân theo cùng một khái niệm - chúng ta có thể chỉ cần thêm các bất biến bằng cách sao chép phần bộ nhớ được chỉ định vào cuối bytecode được trả về khi xây dựng. Mã thực tế khá ngắn và ngọt ngào.
(Bạn có thể xem bản triển khai cũ mà tôi đã xây dựng cho vui 3 năm trước ở đây lmao: )
Cũng có hai cách để truy cập các tham số không thay đổi tại thời điểm chạy. Cách đầu tiên - cách của tôi, chỉ cần đọc mã byte của proxy bắt đầu từ một độ lệch cố định. Đơn giản! Chỉ cần tải các tham số không thay đổi vào bộ nhớ và giải mã chúng theo bất kỳ sơ đồ nào bạn đã thiết lập.
Cái thứ hai phức tạp hơn nhiều, nhưng lại tiết kiệm gas hơn một chút, và cực kỳ thú vị. Ý tưởng là bạn sẽ thêm các giá trị không thay đổi vào mỗi cuộc gọi mà proxy ủy quyền. Điều này dẫn đến việc truy cập giá trị không thay đổi rẻ hơn nhưng với chi phí phức tạp hơn và chi phí gas cơ bản cao hơn.
Thú vị là, Solady (thư viện mà chúng tôi đang sử dụng, đừng sử dụng bản demo nhỏ của tôi trong sản phẩm heh), ban đầu đã chọn cách tiếp cận thứ hai! Nhưng bây giờ, tất cả chúng tôi đã đồng thuận về sự đơn giản, tôi không biết có bất kỳ immutables nào trong sản phẩm có thêm calldata, và Solady cũng chọn cách tiếp cận giống như tôi đã sử dụng.
Vậy điều này liên quan gì đến các tài khoản nhỉ? Trường hợp sử dụng cơ bản và phổ biến nhất của các tài khoản thông minh là chúng được "sở hữu" bởi một người ký khác. Thông thường, bạn sẽ làm điều này bằng cách khởi tạo tài khoản thông minh với địa chỉ của chủ sở hữu. Nhưng anh trai của tôi trên chuỗi, có một cách tốt hơn.
Bạn có lẽ đã nhận ra điều này -- chúng ta chỉ cần thêm địa chỉ người ký vào bytecode của proxy. Đơn giản. Sau đó, chúng ta hoàn toàn bỏ qua việc khởi tạo. Dễ dàng. Và impl biết chính xác vị trí của chủ sở hữu trong bytecode (thậm chí tốt hơn, Solady sẽ lo liệu điều này cho chúng ta).
Và voilà, tài khoản thông minh mạnh mẽ nhất từng được xây dựng giờ đây cũng rẻ hơn một giao dịch Uniswap. Vậy chúng ta có thể học được gì từ điều này?
1. Luôn theo đuổi sự tò mò của bạn Có thể sẽ không bao giờ có một tài khoản thông minh nào sử dụng công nghệ này nếu chúng tôi không theo đuổi ý tưởng về các bản sao với các tham số không thay đổi nhiều năm trước-- chỉ vì chúng tôi thấy nó thú vị.
2. Hầu như luôn có một giải pháp đơn giản Khi bạn không thể tránh khỏi sự phức tạp, hãy chia nhỏ sự phức tạp thành những phần nhỏ hơn, đơn giản hơn. Bạn nên có khả năng giải thích toàn bộ mã của mình cho một người mới làm quen với mã nguồn. Nếu bạn không thể, giải pháp của bạn gần như chắc chắn là quá phức tạp.
3. Thực sự không có gì ngăn cản bạn. Nếu bạn có một ý tưởng về cách làm điều gì đó tốt hơn, hãy làm đi. Không có gì ngăn cản bạn cả. Tôi đã nghĩ rằng điều này có thể hoạt động, đã thử và nó đã thành công. Bạn có khả năng làm những điều tuyệt vời nếu bạn chỉ ngừng tự cản trở bản thân, anon.
Stack của bạn đã quá sâu chưa? Hy vọng chủ đề này có phần thú vị. Nếu bạn thấy nó gọn gàng, hãy là một người bạn và đánh con trai của bạn bằng một lượt thích để tôi có thể tiếp cận hơn 5 người với các bài đăng của tôi ở đây. Ngoài ra, các điểm chuẩn 😸 Chúng tôi không chỉ rẻ khi triển khai.
5,46K