Tiêu đề gốc: " Giới thiệu đơn giản về Solidity: 25. Create2 》
Tác giả gốc: 0xAA
Gần đây tôi đang học lại sự vững chắc, củng cố các chi tiết và viết một "Sự tối giản vững chắc ""Bắt đầu" dành cho người mới học (chuyên gia lập trình có thể tìm bài hướng dẫn khác), với 1-3 bài giảng được cập nhật mỗi tuần.
Tất cả các mã và hướng dẫn đều là nguồn mở trên github: github.com/AmazingAng/WTFSolidity
Mã opcode CREATE2 cho phép chúng tôi dự đoán địa chỉ của hợp đồng thông minh trước khi nó được triển khai trên mạng Ethereum. Uniswap sử dụng CREATE2 để tạo hợp đồng Cặp. Trong bài giảng này tôi sẽ giới thiệu cách sử dụng CREATE2.
Hợp đồng thông minh có thể được vận hành bởi các hợp đồng khác và tài khoản thông thường bằng cách sử dụng tạo mã CREATE. Trong cả hai trường hợp, địa chỉ của hợp đồng mới được tính theo cùng một cách: hàm băm của địa chỉ người tạo và số nonce (tổng số giao dịch được gửi đến địa chỉ đó).

p>
Địa chỉ của người tạo sẽ không thay đổi, nhưng nonce có thể thay đổi theo thời gian nên địa chỉ của hợp đồng được tạo bằng CREATE rất khó dự đoán.
Mục đích của CREATE2 là làm cho địa chỉ hợp đồng trở nên độc lập của sự kiện tương lai. Bất kể điều gì xảy ra trên blockchain trong tương lai, bạn có thể triển khai hợp đồng tại một địa chỉ được tính toán trước. Địa chỉ hợp đồng được tạo bằng CREATE2 được xác định bởi 4 phần:
0xFF: một hằng số để tránh xung đột với CREATE
Địa chỉ của người tạo p>
Muối (muối): giá trị do người tạo đưa ra
Mã byte của hợp đồng sẽ được triển khai

CREATE2 Đảm bảo rằng nếu người tạo triển khai mã byte hợp đồng nhất định bằng cách sử dụng CREATE2 và salt được cung cấp thì nó sẽ được lưu trữ trong địa chỉ mới .
Cách sử dụng CREATE2 tương tự như Tạo đã đề cập trước đó, đây cũng là một hợp đồng mới và chuyển các tham số mà người xây dựng hợp đồng mới yêu cầu, ngoại trừ việc bạn cần chuyển thêm một tham số muối:

Trong đó Contract là tên của hợp đồng được tạo, x là đối tượng hợp đồng (địa chỉ) và _salt được chỉ định Muối; nếu nhà xây dựng phải trả tiền, số tiền _value của ETH có thể được chuyển khi tạo và thông số là tham số của nhà xây dựng hợp đồng mới.
Tương tự như bài giảng trước, chúng tôi sử dụng Create2 để đạt được sự tối giản Uniswap.

Hợp đồng Cặp rất đơn giản và chứa 3 biến trạng thái: Factory, token0 và token1.
Người xây dựng gán địa chỉ hợp đồng nhà máy cho nhà máy trong quá trình triển khai. Hàm khởi tạo sẽ được gọi một lần bởi hợp đồng nhà máy khi hợp đồng Cặp được tạo và token0 và token1 sẽ được cập nhật thành địa chỉ của hai Token trong cặp tiền tệ.

Hợp đồng nhà máy (PairFactory2) có hai biến trạng thái, getPair là hai Mã thông báo Bản đồ từ địa chỉ đến địa chỉ cặp tiền tệ, thuận tiện theo dõi Mã thông báo Tìm địa chỉ cặp tiền tệ; allPairs là một mảng các địa chỉ cặp tiền tệ, lưu trữ tất cả Mã thông báo Địa chỉ.
Hợp đồng PairFactory2 chỉ có một hàm createPair2, sử dụng CREATE2 dựa trên hai đầu vào Mã thông báo Xác định địa chỉ tokenA và tokenB để tạo hợp đồng Cặp mới. Trong số đó

Đây là mã để tạo hợp đồng bằng CREATE2, rất đơn giản và muối là hàm băm của token1 và token2:

p>

Chúng ta đã viết hàm CalculateAddr để tính toán trước địa chỉ Pair mà tokenA và tokenB sẽ tạo ra. Thông qua đó, chúng tôi có thể xác minh xem địa chỉ chúng tôi đã tính toán trước và địa chỉ thực tế có giống nhau hay không.
Bạn có thể triển khai hợp đồng PairFactory2, sau đó gọi createPair2 với hai địa chỉ sau làm tham số để xem địa chỉ cặp tiền tệ đã tạo là gì và liệu nó có khớp với địa chỉ trước không -được tính toán Địa chỉ giống nhau:

Bài giảng này, Chúng tôi đã giới thiệu nguyên tắc và cách sử dụng opcode CREATE2, đồng thời sử dụng nó để hoàn thiện phiên bản Uniswap tối giản và tính toán trước địa chỉ hợp đồng của cặp tiền tệ. CREATE2 cho phép chúng tôi xác định địa chỉ hợp đồng trước khi triển khai nó, đây cũng là cơ sở của các hệ thống phản thực và nhiều lớp2.
Liên kết gốc
Chào mừng bạn tham gia cộng đồng chính thức của BlockBeats:
Nhóm Telegram đăng ký: https://t.me/theblockbeats
Nhóm Telegram thảo luận: https://t.me/BlockBeats_App
Tài khoản Twitter chính thức: https://twitter.com/BlockBeatsAsia