Bridge จาก Base ไป Chiliz Chain
ปรับใช้ OFT Adapter บน Base และ Native OFT บน Chiliz Chain โดยใช้ LayerZero v2 เพื่อ bridge token ERC-20 ที่มีอยู่แล้วจาก Base ไปยัง Chiliz Chain
ในการ bridge token ที่มีอยู่แล้วจาก Base ไปยัง Chiliz Chain คุณต้องเขียนและปรับใช้ smart contract แยกกันสองตัว ได้แก่ OFT Adapter บน chain ที่ token มีอยู่แล้ว (Base) และ Native OFT บน chain ปลายทาง (Chiliz Chain)
โปรดทราบว่า LayerZero มี QuickStart สำหรับ OFT contracts ของตัวเอง รวมถึงบทแนะนำเพื่อเรียนรู้วิธี mint จาก Base ไปยัง EVM chain อื่น เช่น Chiliz Chain บทแนะนำนั้นใช้ Optimism เป็น chain เป้าหมาย แต่คุณสามารถแทนที่ด้วย รายละเอียดของ Chiliz Chain ได้
ข้อกำหนดเบื้องต้น
คู่มือนี้ต้องการสิ่งต่อไปนี้:
ที่อยู่ของ contract token ERC-20 บน Base
กระเป๋าเงิน Web3 (เช่น MetaMask) ที่ตั้งค่าให้ทำงานได้ทั้งบน Base และ Chiliz Chain
gas token เพียงพอบนแต่ละ chain เพื่อชำระค่าธรรมเนียมการปรับใช้ contract รวมถึงค่าธรรมเนียม gas สำหรับการส่งข้อความ
บน Base: token ETH
บน Chiliz Chain: token CHZ
เราจะใช้ Hardhat เป็น dev environment พร้อม Node/npx
ขั้นตอนที่ 1: การพัฒนา Contract
การเตรียม OFTAdapter บน Base
OFTAdapter บน Baseนี่เป็นขั้นตอนการเตรียมการ อย่าปรับใช้ทันที! คุณจะปรับใช้ในขั้นตอนที่ 3
contract OFTAdapter ทำหน้าที่เป็น lockbox สำหรับ token ที่มีอยู่ของคุณ เมื่อผู้ใช้ bridge token ออกจาก Base contract นี้จะล็อก token ERC-20 ต้นฉบับไว้
สร้างไฟล์ใหม่ชื่อ BaseTokenAdapter.sol ในโฟลเดอร์ contracts ของคุณ:
อย่างที่คุณเห็น contract นี้ขยายจาก LayerZero OFT Adapter contract รวมถึง contract Ownable.sol มาตรฐานเพื่อมอบคีย์สำหรับการบริหารจัดการ คุณต้องการทั้งสองเพื่อให้คุณ และเฉพาะคุณเท่านั้น สามารถเชื่อมต่อ chain ต่างๆ ได้อย่างปลอดภัย
เมื่อปรับใช้บน Base Mainnet คุณต้องส่งที่อยู่ contract ของ token ที่มีอยู่เป็น _token และที่อยู่ Base Endpoint V2 (0x1a44076050125825900e736c501f859c50fE728c) เป็น _lzEndpoint
ดู endpoint ทั้งหมดที่มีสำหรับ Chiliz Chain ได้ที่นี่:
การเตรียม OFT บน Chiliz Chain
OFT บน Chiliz Chainเนื่องจาก token ยังไม่มีอยู่บน Chiliz Chain โดยกำเนิด คุณต้องปรับใช้ contract OFT มาตรฐาน contract นี้มีสิทธิ์ mint token ใหม่เมื่อได้รับข้อความที่ถูกต้องจาก OFT Adapter ที่ปรับใช้บน Base และเผา token เมื่อผู้ใช้ bridge กลับ
สร้างไฟล์ใหม่ชื่อ ChilizTokenOFT.sol ในโฟลเดอร์ contracts ของคุณ:
อย่างที่คุณเห็น contract นี้ขยายจาก LayerZero OFT contract รวมถึง contract Ownable.sol มาตรฐาน ด้วยเหตุผลเดียวกับที่กล่าวไว้ข้างต้น
เมื่อปรับใช้บน Chiliz Chain ตรวจสอบให้แน่ใจว่า _name และ _symbol ตรงกับ token ต้นฉบับของคุณบน Base เพื่อหลีกเลี่ยงความสับสนของผู้ใช้ ส่งที่อยู่ Chiliz Chain Endpoint V2 (0x6F475642a6e85809B1c36Fa62763669b1b48DD5B) เป็น _lzEndpoint
ดู endpoint ทั้งหมดที่มีสำหรับ Chiliz Chain ได้ที่นี่:
ขั้นตอนที่ 2: การกำหนดค่า LayerZero
เมื่อ contract ของคุณพร้อมแล้ว คุณต้องบอกเครื่องมือ LayerZero ว่า contract เหล่านั้นเชื่อมต่อกันอย่างไร ซึ่งทำได้โดยใช้ไฟล์ layerzero.config.ts ที่อยู่ใน root ของโปรเจกต์ Hardhat ของคุณ
ไฟล์การกำหนดค่านี้ทำหน้าที่เป็น blueprint สำหรับสถาปัตยกรรม cross-chain ของคุณ โดยจับคู่ smart contract ที่ปรับใช้แล้วกับ LayerZero Endpoint ID (EID) ที่เกี่ยวข้อง และกำหนด pathway (การเชื่อมต่อ) ระหว่าง contract เหล่านั้น
Simple Config Generator เป็นวิธีที่แนะนำในการสร้างการกำหนดค่าการเชื่อมต่อ เนื่องจากจะจัดการการเชื่อมต่อแบบสองทิศทางโดยอัตโนมัติและใช้การกำหนดค่าความปลอดภัยที่แนะนำโดยอัตโนมัติ
สร้างหรืออัปเดตไฟล์ layerzero.config.ts ของคุณใน root ของโปรเจกต์ Hardhat:
อาร์เรย์ [EVM_ENFORCED_OPTIONS, EVM_ENFORCED_OPTIONS] บอก LayerZero Executor ให้บังคับใช้ gas 200,000 หน่วยเมื่อส่งข้อความไปยัง Chiliz และในทำนองเดียวกัน 200,000 หน่วยเมื่อส่งข้อความกลับมายัง Base
ขั้นตอนที่ 3: ขั้นตอนการปรับใช้
เมื่อเขียน contract และเตรียม layerzero.config.ts แล้ว ถึงเวลาปรับใช้ contract บน network ที่เกี่ยวข้อง LayerZero V2 toolbox อาศัย plugin hardhat-deploy เพื่อจัดการการปรับใช้อย่างมีประสิทธิภาพ
คุณต้องสร้างสคริปต์การปรับใช้สองตัวในไดเรกทอรี deploy/ ของโปรเจกต์: หนึ่งตัวสำหรับ Base Mainnet และอีกตัวสำหรับ Chiliz Chain Mainnet
สคริปต์การปรับใช้ Base Adapter
สร้างไฟล์ชื่อ 01_deploy_base_adapter.ts ในโฟลเดอร์ deploy/ ของคุณ สคริปต์นี้ส่งที่อยู่ token ที่มีอยู่และที่อยู่ Base Endpoint V2 เข้าไปใน constructor
สคริปต์การปรับใช้ Chiliz Chain OFT
สร้างไฟล์ที่สองชื่อ 02_deploy_chiliz_oft.ts ในโฟลเดอร์ deploy/ ของคุณ สคริปต์นี้เริ่มต้น Native OFT ใหม่บน Chiliz Chain
การดำเนินการปรับใช้
ตรวจสอบให้แน่ใจว่า hardhat.config.ts ของคุณมี RPC URL และ private key ที่กำหนดค่าอย่างถูกต้องสำหรับทั้ง Base และ Chiliz Chain
รันคำสั่งต่อไปนี้ใน terminal ของคุณเพื่อปรับใช้ contract:
เมื่อการปรับใช้เสร็จสมบูรณ์ Hardhat จะบันทึกที่อยู่ contract ในโฟลเดอร์ deployments/ เครื่องมือ LayerZero จะอ่านที่อยู่เหล่านี้โดยอัตโนมัติเมื่อเรารันคำสั่ง wiring ในขั้นตอนถัดไป
ขั้นตอนที่ 4: การ Wiring และ Peering
ในขั้นตอนนี้ contract BaseTokenAdapter และ ChilizTokenOFT ของคุณถูกปรับใช้บนแต่ละ chain แล้ว แต่ยังโดดเดี่ยวอยู่โดยสิ้นเชิง
หาก contract บน Chiliz Chain ได้รับข้อความสั่งให้ mint token มันจำเป็นต้องรู้ว่าข้อความนั้นมาจาก Adapter ของ คุณ บน Base จริงๆ ไม่ใช่จากผู้กระทำที่ไม่หวังดี
คุณต้องสร้างความไว้วางใจนี้โดยการ "wiring" 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 สำหรับการดำเนินการที่จำเป็น เมื่อผู้ใช้ส่งข้อความจาก Base พวกเขาจ่ายค่า gas ปลายทางล่วงหน้า การตั้งค่า enforced options ช่วยให้แน่ใจว่าพวกเขาจ่าย gas เพียงพอสำหรับ LayerZero Executor เพื่อประมวลผลธุรกรรมบน Chiliz Chain ได้สำเร็จsetPeer: เชื่อมโยง Endpoint ID (EID) ปลายทางกับที่อยู่ contract ที่น่าเชื่อถือ คุณต้องบอก contract บน Base ให้ไว้วางใจ contract บน Chiliz Chain และ contract บน Chiliz Chain ให้ไว้วางใจ contract บน Base
การดำเนินการ Wire Task
รันคำสั่งต่อไปนี้ใน terminal ของคุณ:
toolchain จะคำนวณพารามิเตอร์ที่จำเป็นโดยอัตโนมัติ แสดงตารางธุรกรรมที่กำลังจะดำเนินการ และส่งไปยัง Chiliz และ Base โดยใช้กระเป๋าเงิน deployer ของคุณ
เมื่อธุรกรรมได้รับการยืนยันบนทั้งสอง network token bridge ของคุณจะเปิดใช้งานและกำหนดค่าครบถ้วนอย่างเป็นทางการ! Base Adapter ได้รับอนุญาตให้ส่งคำสั่ง mint ไปยัง Chiliz Chain และ Chiliz Chain ได้รับอนุญาตให้ส่งคำสั่ง unlock กลับมายัง Base
ขั้นตอนที่ 5: การดำเนินงานและการทดสอบ
เมื่อ contract ของคุณถูกปรับใช้และเชื่อมต่อกันอย่างปลอดภัยแล้ว token ของคุณตอนนี้เป็น omnichain ขั้นตอนสุดท้ายคือการดำเนินการโอน cross-chain จาก Base Mainnet ไปยัง Chiliz Chain Mainnet
1) การดำเนินการโอน Cross-Chain
LayerZero V2 toolbox มี Hardhat task ในตัวเพื่อทดสอบการโอน OFT โดยตรงจาก terminal ของคุณ คำสั่งนี้จะประมาณค่าธรรมเนียม gas สำหรับ cross-chain เรียกเก็บจากกระเป๋าเงินของคุณใน $ETH (gas token ดั้งเดิมบน chain ต้นทาง Base) และเริ่มต้นการโอน
รันคำสั่งต่อไปนี้:
สิ่งที่คำสั่งนี้ทำ:
ค้นหา Base Mainnet (
30184) และ Chiliz Mainnet (30409) ในการกำหนดค่าของคุณประมาณค่าธรรมเนียม cross-chain ที่ LayerZero Executor ต้องการ
เรียกฟังก์ชัน
send()บน Base Adapter ของคุณAdapter จะล็อก token 10 ตัวและส่ง packet ไปยัง LayerZero Endpoint
2) การติดตาม Packet บน LayerZero Scan
ธุรกรรม cross-chain เป็นแบบ asynchronous แม้ว่าธุรกรรม Chiliz ของคุณจะได้รับการยืนยันในไม่กี่วินาที แต่ข้อความยังคงต้องได้รับการยืนยันและดำเนินการบน Base
เพื่อติดตามเส้นทางนี้แบบ real-time ให้คลิกลิงก์ LayerZero Scan ที่ปรากฏในผลลัพธ์ของ CLI
เรียนรู้เพิ่มเติมเกี่ยวกับเครื่องมือนี้ที่นี่:
การตั้งค่าขีดจำกัด Gas
การตั้งค่าขีดจำกัด gas เป็นสิ่งสำคัญมาก เนื่องจากการไม่ตั้งค่าอาจทำให้ข้อความ cross-chain ของคุณล้มเหลวบน network ปลายทาง
เมื่อผู้ใช้ bridge token จาก Base ไปยัง Chiliz Chain พวกเขาจ่ายค่าธรรมเนียม gas สำหรับ ทั้งสอง chain ล่วงหน้าในธุรกรรมเดียวบน Base (โดยใช้ $ETH) จากนั้น LayerZero จะใช้ส่วนหนึ่งของค่าธรรมเนียมนั้นเพื่อจ่ายค่า gas ETH จริงที่จำเป็นสำหรับดำเนินการธุรกรรม minting บน Chiliz Chain
เพื่อให้แน่ใจว่า LayerZero มี gas เพียงพอในการประมวลผลฟังก์ชัน lzReceive บน chain ปลายทางได้สำเร็จ คุณต้องตั้งค่า Enforced Options หากไม่ได้ตั้งค่าเหล่านี้ ธุรกรรมอาจ revert บน chain ปลายทางเนื่องจากข้อผิดพลาด "Out of Gas"
การกำหนดค่า Options
option นี้ตั้งค่าในไฟล์ layerzero.config.ts ของคุณ อัปเดตอาร์เรย์ connections เพื่อรวมบล็อก enforcedOptions สำหรับแต่ละ pathway:
คำอธิบายของพารามิเตอร์:
msgType: 1: แสดงถึงการโอน token มาตรฐานmsgType: 2ใช้สำหรับการเรียก "composed" (เช่น การ bridge token และ stake ทันทีในคลิกเดียว)optionType: 1: สั่งให้ Executor ดำเนินการเพียงแค่ฟังก์ชันlzReceivegas: 200000: ขีดจำกัด gas พื้นฐานที่ปลอดภัยสำหรับ OFT mint และ unlock มาตรฐาน คุณสามารถปรับตามการใช้ gas เฉพาะของ contract ที่ปรับใช้ของคุณ
หากคุณตั้งค่า option นี้หลังจาก wire chain แล้ว คุณสามารถ rewire พร้อม option ที่มีอยู่โดยใช้คำสั่งเดิม:
เครื่องมือจะตรวจจับการเปลี่ยนแปลงโดยอัตโนมัติและส่งธุรกรรม setEnforcedOptions() ไปยัง contract ของคุณบนทั้ง Base และ Chiliz ตอนนี้ เมื่อใดก็ตามที่ผู้ใช้เปิดใช้งาน bridge contract จะกำหนดให้ผู้ใช้จ่ายค่า gas อย่างน้อย 200,000 หน่วยบน chain ปลายทาง เพื่อให้มั่นใจว่าการส่งมอบมีความน่าเชื่อถือ
อัปเดตล่าสุด
สิ่งนี้มีประโยชน์หรือไม่?