ทำ Cross-Chain ด้วย Axelar
บทความนี้เราจะมาลองเขียน Smart Contract ที่สามารถโอน Token ข้าม Chain ไปมาได้ โดยการใช้ Axelar Gateway ซึ่งการทำ Cross-Chain ก็มีอีกหนึ่งรูปแบบ คือการใช้ Axelar SDK ซึ่งหากเพื่อนๆ สนใจสามารถมาศึกษาเพิ่มเติมได้ที่นี่
เครื่องมือที่ใช้งาน
ในบทความนี้ผมจะใช้ Remix IDE ในการเริ่มต้นเขียน Smart Contract นะครับ สามารถกด ที่นี่ ได้เลย
ขั้นตอนที่ 1
ผมจะสร้างโฟลเดอร์ขึ้นมาใหม่ โดยผมจะตั้งชื่อว่า Interfaces นะครับ ซึ่งจะเป็น โฟลเดอร์ที่เราเก็บ Interface ของ Token ERC20 และ Interface ของ Axela Gateway นะครับ
ขั้นตอนที่ 2
เราจะมาสร้างไฟล์ ในโฟลเดอร์ Interfaces โดยเราจะสร้างทั้งหมด 2 ไฟล์นะครับ ถ้าหากเพื่อน ๆ อยากรู้ว่า Interface คืออะไร สามารถศึกษาเพิ่มเติมต่อได้ที่นี่
- IERC20.sol
จะเป็น Interface สำหรับ Token ERC20 นะครับ เราจะเอามาใช้งานสำหรับการโอน Token WETH หรือใช้ในการ Approve โดยเพื่อน ๆ สามารถ Copy Interface นี้ไปใช้ได้ในทุกๆ โปรเจคได้เลย
2. IAxelarGateway.sol
จะเป็น Interface ที่เราจะทำการ Interactive กับ Smart Contract ของ Axelar
โดยตัวอย่างนี้ผมจะเอาแค่ Function sendToken มาใช้งานในบทความนี้ ซึ่ง Axelar Gateway ยังมี Function ต่างๆ ไว้ให้เราเลือกใช้งานได้อีกมากมาย เพื่อนๆ สามารถกดเข้าไปศึกเพิ่มเติมดูได้จาก Github ข้างล่างเลยครับ
ขั้นตอนที่ 3
กลับมาที่โฟลเดอร์ contracts จากนั้นเราจะเริ่มสร้าง Smart Contract ของเราให้สามารถโอน Token Cross-Chain ได้ โดยผมจะสร้างไฟล์ขึ้นมาใหม่ว่า _TransferToken.sol
ผมจะตั้งชื่อ contract ของผมว่า AxelarCrossChainTransfer จากนั้นผมจะสร้างตัวแปรขึ้นมา 3 ตัวคือ axelarGateway, WETHTokenAddress, AxelarGateWayAddress เพื่อรอ Set Address ก่อนการ deploy smart contract ขึ้นไปบน Blockchain และอีกเหตุผลเพื่อให้ smart contract ตัวนี้สามารถ deploy ได้ทุก Chain ตามที่ Axelar Gateway ลองรับ
จากนั้นผมสร้าง Function sendToken เพื่อเริ่มต้นในการส่ง Token Cross-Chain โดย Function นี้จะรับ Parameters ดังนี้
- _desChain คือ จะเป็น Chain เป้าหมายที่เราจะส่ง Token ไป เช่น “ethereum”
- _desAddress คือ Address เป้าหมายที่เราจะส่ง Token ไป โดยบทความนี้ผมจะใช้เป็น Address ของผมเองหรือกระเป๋าที่เราใช้งาน
- _symbol คือ สัญลักษณ์ Token ที่เราจะทำการส่งไป โดยบทความนี้ผมใช้ WETH ในการทดสอบ
- amount คือ จำนวน Token ที่เราจะส่งไป
โดยการทำงานของ Function นี้คือ เมื่อเราเรียกใช้ Function sendToken ตัว Smart Contract จะไปเรียกใช้งาน IERC20 ตาม Address ที่เรา Set ไว้ก่อนการ Deploy Smart Contract โดย IERC20 จะใช้ Function ที่เรียกว่า transferForm เพื่อโอน Token จากกระเป๋าของเรา เข้ามาสู่ Address Smart Contract ของเรา
จากนั้น IERC20 จะเรียกใช้งาน Function approve เพื่ออนุญาตให้ Axelar Gateway สามารถเข้าถึงสินทรัพย์ใน Smart Contract ของเราได้ ซึ่งผมจะอนุญาตให้เข้าถึงเป็นจำนวนตาม amount ที่ผมจะทำการส่ง Token ไป
ขั้นตอนสุดท้ายผมจะเรียกใช้งาน axelarGateway.sendToken เพื่อให้ Gateway ของ Axelar รับผิดชอบกระบวนการส่ง Token ไปยัง Chain ปลายทาง
ขั้นตอนการใช้งาน
มาถึงส่วนสุดท้าย โดยผมจะสาธิตขั้นตอนการส่ง Token ข้ามเชน โดยในส่วนนี้ผมจะ Deploy Smart Contract ของผมไปที่ Avalanch Testnet C-Chain และโอน WETH Token ไปยัง Ethereum Chain นะครับ
- การ Deploy Smart Contract
โดยให้เราเลือกไฟล์ _TransferToken.sol จากนั้น เราจะทำการ Set Address GATEWAY_ และ Address _TOKEN
Address GATEWAY_ = 0xC249632c2D40b9001FE907806902f63038B737Ab
Address _TOKEN = 0x3613C187b3eF813619A25322595bA5E297E4C08a
จากนั้นกดปุ่ม transact
รายละเอียด Address Gateway และ Addree Token ที่ทาง Axelar Support
2. การ Approve ให้ Smart Contract ของเราสามารถเข้าถึง Asset ในกระเป๋าเรา
โดยเราจะต้องไป Web Contract Address ของ Token WETH บน Avalanch Testnet C-Chain โดยเพื่อนๆสามารถกดได้ที่นี่
โดยจากรูปภาพ เราจะต้องกรอกช่อง spender คือ Address ของ Smart Contract ของเราที่เราทำการ Deploy เมื่อ ขั้นตอนที่ 1 และช่อง amount ผมจะใส่เป็นจำนวน 1000000000000000000 หรือมีค่าเท่ากับ 1 ETH
3. การใช้งาน Function sendToken
โดยผมใจ set ค่า parameters ใน Function ตามนี้
_desChain = ethereum
_desAddress = *แนะนำให้ใช้กระเป๋าตัวเอง*
_symbol = WETH
amount = 10000000000000000 มีค่าเท่ากับ 0.01 ETH
จากนั้นกดปุ่ม transact
เพียงเท่านี้เราก็สามารถที่จะส่ง WETH จาก Avalanch Testnet C-Chain ไปยัง Ethereum Ropsten Testnet ได้ครับ
ผลลัพธ์
Github Repository : https://github.com/parametprame/Cross-Chain-Transfer