BTC
$96,000
5.73%
ETH
$3,521.91
3.97%
HTX
$0.{5}2273
5.23%
SOL
$198.17
3.05%
BNB
$710
3.05%
lang
简体中文
繁體中文
English
Tiếng Việt
한국어
日本語
ภาษาไทย
Türkçe
Trang chủ
AI AI
Tin nhanh
Bài viết
Sự kiện
BlockBeats Pro
Thêm
Thông tin tài chính
Chuyên đề
Hệ sinh thái chuỗi khối
Mục nhập
Podcast
Data
OPRR

Giới thiệu tối giản về Solidity|Bài 25: Create2

Đọc bài viết này mất 11 phút
Bài viết này 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ệ.
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


CREATE2


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.


Cách CREATE tính toán địa chỉ


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ỉ đó).



Đị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.


Cách CREATE2 tính địa chỉ


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 

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


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.


Uniswap2 tối giản


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.


Ghép nối  



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ệ.


PairFactory2  



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:

  


Tính trước địa chỉ Cặ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:



Tóm tắt


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

举报 Báo lỗi/Báo cáo
Chọn thư viện
Thêm mới thư viện
Hủy
Hoàn thành
Thêm mới thư viện
Chỉ mình tôi có thể nhìn thấy
Công khai
Lưu
Báo lỗi/Báo cáo
Gửi