Bridge จาก Chiliz Chain ไป Base
ปรับใช้ OFT Adapter บน Chiliz Chain และ Native OFT บน Base โดยใช้ LayerZero v2 เพื่อทำให้ token บน Chiliz Chain กลายเป็น omnichain บน Base
ในการ bridge token ที่มีอยู่แล้วจาก Chiliz Chain ไปยัง Base คุณต้องเขียนและปรับใช้ smart contract แยกกันสองสัญญา ได้แก่ OFT Adapter บน chain ที่ token นั้นมีอยู่แล้ว (Chiliz Chain) และ Native OFT บน chain ปลายทาง (Base)
โปรดทราบว่า LayerZero มี QuickStart สำหรับ OFT contracts รวมถึงบทเรียนสอนวิธี mint จาก Chiliz Chain ไปยัง EVM chain อื่น เช่น Base โดยบทเรียนนั้นใช้ Optimism เป็น chain เป้าหมาย แต่คุณสามารถแทนที่ด้วย รายละเอียดของ Base ได้
สิ่งที่จำเป็นต้องมีก่อนเริ่มต้น
คู่มือนี้ต้องการสิ่งต่อไปนี้:
ที่อยู่ ERC20 token contract บน Chiliz Chain
กระเป๋าเงิน Web3 (เช่น MetaMask) ที่ตั้งค่าให้ใช้งานได้กับทั้ง Chiliz Chain และ Base
gas token ที่เพียงพอบนแต่ละ chain เพื่อจ่าย gas ค่าธรรมเนียมในการปรับใช้ smart contract รวมถึง gas สำหรับการส่งข้อความ
บน Chiliz Chain: token CHZ
บน Base: token ETH
เราจะใช้ Hardhat เป็นสภาพแวดล้อมพัฒนา และ Node/npx
ขั้นตอนที่ 1: การพัฒนา Contract
เตรียม OFTAdapter บน Chiliz Chain
OFTAdapter บน Chiliz Chainนี่เป็นขั้นตอนเตรียมการ ยังไม่ต้องปรับใช้ทันที! คุณจะปรับใช้ในขั้นตอนที่ 3
smart contract OFTAdapter ทำหน้าที่เป็นกล่องล็อกสำหรับ token ที่มีอยู่ของคุณ เมื่อผู้ใช้ bridge token ออกจาก Chiliz Chain สัญญานี้จะล็อก ERC20 token ต้นฉบับเอาไว้
สร้างไฟล์ใหม่ชื่อ ChilizTokenAdapter.sol ในโฟลเดอร์ contracts ของคุณ:
อย่างที่เห็น smart contract นี้ขยายจาก LayerZero OFT Adapter contract รวมถึง smart contract Ownable.sol มาตรฐาน เพื่อมอบกุญแจบริหารจัดการ คุณต้องมีทั้งสองเพื่อให้คุณ และเฉพาะคุณเท่านั้น สามารถเชื่อมต่อ chain ต่าง ๆ ได้อย่างปลอดภัย
เมื่อปรับใช้สิ่งนี้บน Chiliz Chain Mainnet คุณต้องส่งที่อยู่ contract ของ token ที่มีอยู่เป็น _token และ Chiliz Endpoint V2 address (0x6F475642a6e85809B1c36Fa62763669b1b48DD5B) เป็น _lzEndpoint
ดู endpoint ที่พร้อมใช้งานทั้งหมดสำหรับ Chiliz Chain ได้ที่นี่:
เตรียม OFT บน Base
OFT บน Baseเนื่องจาก token นั้นยังไม่มีอยู่บน Base โดยตรง คุณจึงต้องปรับใช้ smart contract OFT มาตรฐาน smart contract นี้มีสิทธิ์ mint token ใหม่เมื่อได้รับข้อความที่ถูกต้องจาก OFT Adapter ที่ปรับใช้บน Chiliz และเผา (burn) token เมื่อผู้ใช้ bridge กลับ
สร้างไฟล์ใหม่ชื่อ BaseTokenOFT.sol ในโฟลเดอร์ contracts ของคุณ:
อย่างที่เห็น smart contract นี้ขยายจาก LayerZero OFT contract รวมถึง smart contract Ownable.sol มาตรฐาน ด้วยเหตุผลเดียวกับที่กล่าวไว้ข้างต้น
เมื่อปรับใช้บน Base ตรวจสอบให้แน่ใจว่า _name และ _symbol ตรงกับ token ต้นฉบับของคุณบน Chiliz Chain เพื่อไม่ให้ผู้ใช้สับสน ส่ง Base Endpoint V2 address (0x1a44076050125825900e736c501f859c50fE728c) เป็น _lzEndpoint
ดู endpoint ที่พร้อมใช้งานทั้งหมดสำหรับ Base ได้ที่นี่:
ขั้นตอนที่ 2: การตั้งค่า LayerZero
เมื่อ smart contract ของคุณพร้อมแล้ว คุณต้องบอกให้ LayerZero tooling ทราบว่าสัญญาเหล่านั้นเชื่อมต่อกันอย่างไร ซึ่งทำได้โดยใช้ไฟล์ layerzero.config.ts ที่อยู่ใน root ของโปรเจกต์ Hardhat ของคุณ
ไฟล์ configuration นี้ทำหน้าที่เป็นแผนผังสำหรับสถาปัตยกรรม cross-chain ของคุณ โดยจับคู่ smart contract ที่ปรับใช้แล้วกับ LayerZero Endpoint ID (EID) ที่เกี่ยวข้อง และกำหนดเส้นทาง (connections) ระหว่างสัญญาเหล่านั้น
Simple Config Generator เป็นวิธีที่แนะนำสำหรับการสร้างการตั้งค่า wiring เนื่องจากทำการ wiring แบบสองทิศทางและใช้การตั้งค่าความปลอดภัยที่แนะนำโดยอัตโนมัติ
สร้างหรืออัปเดตไฟล์ layerzero.config.ts ของคุณใน root ของโปรเจกต์ Hardhat:
ขั้นตอนที่ 3: กระบวนการปรับใช้
เมื่อเขียน smart contract เสร็จแล้วและเตรียม layerzero.config.ts ไว้แล้ว ถึงเวลาปรับใช้ smart contract ไปยังเครือข่ายที่เกี่ยวข้อง LayerZero V2 toolbox ใช้ plugin hardhat-deploy เพื่อจัดการการปรับใช้อย่างมีประสิทธิภาพ
คุณต้องสร้าง deployment script สองไฟล์ในไดเรกทอรี deploy/ ของโปรเจกต์: หนึ่งไฟล์สำหรับ Chiliz Chain Mainnet และอีกหนึ่งไฟล์สำหรับ Base Mainnet
Deployment Script สำหรับ Chiliz Adapter
สร้างไฟล์ชื่อ 01_deploy_chiliz_adapter.ts ในโฟลเดอร์ deploy/ ของคุณ script นี้ส่งที่อยู่ token ที่มีอยู่และ Chiliz Endpoint V2 address ไปยัง constructor
Deployment Script สำหรับ Base OFT
สร้างไฟล์ที่สองชื่อ 02_deploy_base_oft.ts ในโฟลเดอร์ deploy/ ของคุณ script นี้เริ่มต้น Native OFT ใหม่บน Base
ดำเนินการปรับใช้
ตรวจสอบให้แน่ใจว่า hardhat.config.ts ของคุณมี RPC URL และ private key ที่ตั้งค่าไว้อย่างถูกต้องสำหรับทั้ง Chiliz Chain และ Base
รันคำสั่งต่อไปนี้ใน terminal เพื่อปรับใช้ smart contract:
เมื่อการปรับใช้เสร็จสมบูรณ์ Hardhat จะบันทึกที่อยู่ contract ในโฟลเดอร์ deployments/ LayerZero tooling จะอ่านที่อยู่เหล่านี้โดยอัตโนมัติเมื่อเรารันคำสั่ง wiring ในขั้นตอนถัดไป
ขั้นตอนที่ 4: Wiring และ Peering
ณ ขั้นตอนนี้ smart contract ChilizTokenAdapter และ BaseTokenOFT ของคุณได้รับการปรับใช้บนแต่ละ chain แล้ว แต่ยังคงแยกออกจากกันโดยสมบูรณ์
หาก Base contract ได้รับข้อความที่สั่งให้ mint token มันจำเป็นต้องทราบว่าข้อความนั้นมาจาก Adapter ของ คุณ บน Chiliz จริง ๆ ไม่ใช่จากผู้ไม่ประสงค์ดี
คุณต้องสร้างความไว้วางใจนี้โดยการ "wiring" smart contract เข้าด้วยกันในฐานะ peer ผ่านการเข้ารหัส
ทำได้โดยการรันคำสั่ง wire ซึ่งจะสร้างและดำเนินการธุรกรรมบนทั้ง Chiliz และ Base
สิ่งที่เกิดขึ้นเบื้องหลัง?
การตั้งค่า pathway ของ LayerZero V2 แบบสมบูรณ์ต้องการธุรกรรม 6 รายการบนแต่ละ chain:
setSendLibrary: กำหนด LayerZero MessageLib ที่รับผิดชอบในการส่งข้อความ (เช่น การตั้งค่าให้ใช้ V2 Send Library)setReceiveLibrary: กำหนด MessageLib ที่รับผิดชอบในการรับข้อความ (รวมgracePeriodซึ่งมักตั้งไว้ที่0)setConfig(Send Library): กำหนด Decentralized Verifier Networks (DVN) และ Executor เฉพาะสำหรับข้อความขาออกsetConfig(Receive Library): กำหนด DVN เฉพาะที่จำเป็นในการยืนยันข้อความขาเข้าsetEnforcedOptions: กำหนดขีดจำกัด gas สำหรับการดำเนินการ เมื่อผู้ใช้ส่งข้อความจาก Chiliz Chain พวกเขาจ่าย gas ปลายทางล่วงหน้า การตั้งค่า enforced options ช่วยให้มั่นใจว่าพวกเขาจ่าย gas เพียงพอสำหรับ LayerZero Executor เพื่อประมวลผลธุรกรรมบน Chiliz Chain ได้สำเร็จsetPeer: เชื่อมโยง destination Endpoint ID (EID) กับที่อยู่ smart contract ที่เชื่อถือได้ คุณต้องบอก smart contract บน Chiliz Chain ให้เชื่อถือ smart contract บน Base และ smart contract บน Base ให้เชื่อถือ smart contract บน Chiliz Chain
ดำเนินการ Wire Task
รันคำสั่งต่อไปนี้ใน terminal:
toolchain จะคำนวณพารามิเตอร์ที่จำเป็นโดยอัตโนมัติ แสดงตารางธุรกรรมที่กำลังจะดำเนินการให้คุณดู และส่งธุรกรรมไปยัง Chiliz และ Base โดยใช้กระเป๋าเงิน deployer ของคุณ
เมื่อธุรกรรมได้รับการยืนยันบนทั้งสองเครือข่าย token bridge ของคุณก็พร้อมใช้งานและได้รับการตั้งค่าครบถ้วนอย่างเป็นทางการแล้ว! Chiliz Adapter ได้รับอนุญาตให้ส่งคำสั่ง mint ไปยัง Base และ Base ได้รับอนุญาตให้ส่งคำสั่ง unlock กลับมายัง Chiliz
ขั้นตอนที่ 5: การใช้งานและการทดสอบ
เมื่อ smart contract ของคุณได้รับการปรับใช้และเชื่อมต่อกันอย่างปลอดภัยแล้ว token ของคุณก็กลายเป็น omnichain แล้ว ขั้นตอนสุดท้ายคือการดำเนินการ cross-chain transfer จาก Chiliz Chain Mainnet ไปยัง Base Mainnet
1) ดำเนินการ Cross-Chain Transfer
LayerZero V2 toolbox มี Hardhat task ในตัวเพื่อทดสอบการโอน OFT โดยตรงจาก terminal ของคุณ คำสั่งนี้จะประมาณ gas ค่าธรรมเนียม cross-chain เรียกเก็บเงินจากกระเป๋าเงินของคุณใน $CHZ (native gas token บน source chain) และเริ่มต้นการโอน
เนื่องจาก ChilizTokenAdapter ต้องการสิทธิ์ในการล็อก Fan Tokens ที่มีอยู่ของคุณ จึงจำเป็นต้องมีธุรกรรม ERC-20 approve()
LayerZero CLI ตรวจพบสิ่งนี้และจัดการการอนุมัติโดยอัตโนมัติก่อนส่งข้อความ
รันคำสั่งต่อไปนี้:
สิ่งที่คำสั่งนี้ทำ:
ค้นหา Chiliz Mainnet (
30409) และ Base Mainnet (30184) ใน config ของคุณดึงข้อมูลค่าธรรมเนียม cross-chain ที่ LayerZero Executor ต้องการ
เรียกฟังก์ชัน
send()บน Chiliz Adapter ของคุณAdapter ล็อก token 10 รายการและส่ง packet ไปยัง LayerZero Endpoint
2) ติดตาม Packet บน LayerZero Scan
ธุรกรรม cross-chain เป็นแบบ asynchronous ในขณะที่ธุรกรรม Chiliz ของคุณจะได้รับการยืนยันภายในไม่กี่วินาที แต่ข้อความยังต้องได้รับการยืนยันและดำเนินการบน Base
ในการติดตามเส้นทางนี้แบบ real-time ให้คลิกลิงก์ LayerZero Scan ที่ปรากฏใน CLI output
เรียนรู้เพิ่มเติมเกี่ยวกับเครื่องมือนี้ได้ที่นี่:
การตั้งค่าขีดจำกัด Gas
การตั้งค่าขีดจำกัด gas เป็นเรื่องสำคัญอย่างยิ่ง เนื่องจากการไม่ตั้งค่าอาจทำให้ข้อความ cross-chain ของคุณล้มเหลวบนเครือข่ายปลายทาง
เมื่อผู้ใช้ bridge token จาก Chiliz Chain ไปยัง Base พวกเขาจ่าย gas ค่าธรรมเนียมสำหรับ ทั้งสอง chain ล่วงหน้าในธุรกรรมเดียวบน Chiliz (โดยใช้ $CHZ) จากนั้น LayerZero ใช้ส่วนหนึ่งของค่าธรรมเนียมนั้นเพื่อจ่าย gas ETH จริงที่จำเป็นในการดำเนินการธุรกรรม minting บน Base
เพื่อให้แน่ใจว่า LayerZero มี gas เพียงพอในการประมวลผลฟังก์ชัน lzReceive บน chain ปลายทางได้สำเร็จ คุณต้องตั้งค่า Enforced Options หากไม่ตั้งค่าเหล่านี้ ธุรกรรมอาจ revert บน chain ปลายทางเนื่องจากข้อผิดพลาด "Out of Gas"
การตั้งค่า Options
option นี้ตั้งค่าในไฟล์ layerzero.config.ts ของคุณ อัปเดต array connections เพื่อรวม block enforcedOptions สำหรับแต่ละ pathway:
คำอธิบายพารามิเตอร์:
msgType: 1: แทนการโอน token มาตรฐานmsgType: 2ใช้สำหรับการเรียกแบบ "composed" (เช่น การ bridge token และ stake ทันทีในคลิกเดียว)optionType: 1: สั่งให้ Executor ดำเนินการเพียงแค่เรียกฟังก์ชันlzReceivegas: 200000: ขีดจำกัด gas พื้นฐานที่ปลอดภัยสำหรับ OFT mint และ unlock มาตรฐาน คุณสามารถปรับค่านี้ตามการใช้ gas จริงของ smart contract ที่ปรับใช้ของคุณ
หากคุณตั้งค่า option นี้หลังจาก wiring chain ไปแล้ว คุณสามารถ rewire พร้อมกับ option ที่ตั้งค่าใหม่โดยใช้คำสั่งเดิม:
tooling จะตรวจพบการเปลี่ยนแปลงโดยอัตโนมัติและส่งธุรกรรม setEnforcedOptions() ไปยัง smart contract ของคุณบนทั้ง Chiliz และ Base ขณะนี้ เมื่อผู้ใช้เริ่มต้น bridge smart contract จะกำหนดให้ผู้ใช้จ่าย gas อย่างน้อย 200,000 หน่วยบน chain ปลายทาง เพื่อให้มั่นใจว่าการส่งมอบเป็นไปได้อย่างน่าเชื่อถือ
อัปเดตล่าสุด
สิ่งนี้มีประโยชน์หรือไม่?