ทำ Cross-Chain ด้วย Axelar

paramet kongjaroen
Under Ledger
Published in
3 min readApr 27, 2022

บทความนี้เราจะมาลองเขียน Smart Contract ที่สามารถโอน Token ข้าม Chain ไปมาได้ โดยการใช้ Axelar Gateway ซึ่งการทำ Cross-Chain ก็มีอีกหนึ่งรูปแบบ คือการใช้ Axelar SDK ซึ่งหากเพื่อนๆ สนใจสามารถมาศึกษาเพิ่มเติมได้ที่นี่

เครื่องมือที่ใช้งาน

ในบทความนี้ผมจะใช้ Remix IDE ในการเริ่มต้นเขียน Smart Contract นะครับ สามารถกด ที่นี่ ได้เลย

ขั้นตอนที่ 1

ผมจะสร้างโฟลเดอร์ขึ้นมาใหม่ โดยผมจะตั้งชื่อว่า Interfaces นะครับ ซึ่งจะเป็น โฟลเดอร์ที่เราเก็บ Interface ของ Token ERC20 และ Interface ของ Axela Gateway นะครับ

สร้างโฟลเดอร์ Interfaces

ขั้นตอนที่ 2

เราจะมาสร้างไฟล์ ในโฟลเดอร์ Interfaces โดยเราจะสร้างทั้งหมด 2 ไฟล์นะครับ ถ้าหากเพื่อน ๆ อยากรู้ว่า Interface คืออะไร สามารถศึกษาเพิ่มเติมต่อได้ที่นี่

  1. 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 ดังนี้

  1. _desChain คือ จะเป็น Chain เป้าหมายที่เราจะส่ง Token ไป เช่น “ethereum”
  2. _desAddress คือ Address เป้าหมายที่เราจะส่ง Token ไป โดยบทความนี้ผมจะใช้เป็น Address ของผมเองหรือกระเป๋าที่เราใช้งาน
  3. _symbol คือ สัญลักษณ์ Token ที่เราจะทำการส่งไป โดยบทความนี้ผมใช้ WETH ในการทดสอบ
  4. 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 นะครับ

  1. การ Deploy Smart Contract
การ Deploy Smart Contract

โดยให้เราเลือกไฟล์ _TransferToken.sol จากนั้น เราจะทำการ Set Address GATEWAY_ และ Address _TOKEN

Address GATEWAY_ = 0xC249632c2D40b9001FE907806902f63038B737Ab

Address _TOKEN = 0x3613C187b3eF813619A25322595bA5E297E4C08a

จากนั้นกดปุ่ม transact

ผลลัพธ์หลังจากกดปุ่ม transact

รายละเอียด Address Gateway และ Addree Token ที่ทาง Axelar Support

2. การ Approve ให้ Smart Contract ของเราสามารถเข้าถึง Asset ในกระเป๋าเรา

โดยเราจะต้องไป Web Contract Address ของ Token WETH บน Avalanch Testnet C-Chain โดยเพื่อนๆสามารถกดได้ที่นี่

Web Contract Address 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

การใช้งาน function sendToken

เพียงเท่านี้เราก็สามารถที่จะส่ง WETH จาก Avalanch Testnet C-Chain ไปยัง Ethereum Ropsten Testnet ได้ครับ

ผลลัพธ์

send WETH from Avalanc Testnet C-Chain
receive WETH on Ethereum Ropsten Testnet

--

--