มาลองใช้ DappTools กันเถอะ
จริงๆจะ setup ds-test เพื่อทำ formal verification เฉยๆ ซึ่ง ds-test ดันไปอยู่ใน Dapptools เนี่ยสิ งั้นมาลองทั้ง DappTools ไปเลยละกัน
เรียบเรียงมาจากบทความของ chain link นะครับ
framework ในการเขียน test deploy interact มีหลายตัวเช่น truffle hardhat brownie แต่ framework เหล่านี้ ต้องใช้ภาษาเฉพาะในการใช้งาน เช่น js python
ซึ่งการที่ developer ต้องสลับกันระหว่างภาษาที่ใช้เขียน smart contract ( solidity etc. ) กับ ภาษาที่ใช้กับ framework ( js python ) เป็น pain point เหมือนกันนะ
เลยมี tools ที่ออกแบบมาให้สามารถใช้งานได้ด้วย solidity เลย นั่นคือ DappTools
Similar work
มี framework ที่คล้ายๆกับ DappTools อยู่นั่นคือ Foundry
Installation
ก่อนอื่นมาเริ่มจากลง nix กันก่อน
จากนั้นลง dapptool
ติด error เพราะใช้ m1 แหะ
มาแก้ด้วยการลง rosetta
แก้ไฟล์ /etc/nix/nix.conf โดยเพิ่ม
system = x86_64-darwin
โอเค มาลองลง dapptool ใหม่
ค้างอยู่ที่ขั้นนี้แหะ
uninstall nix ด้วย disk utility
ติด error kernel กำลังใช้ disk อยู่แหะ
ลองทำตามอันนี้
script error แต่ nix disk หายไปแล้ว มาลองลง nix version ที่ไม่ error กัน
ใช้คำสั่ง
เหมือนจะเป็น single user installation แหะ
มีให้ set env ด้วย
โอเค เราลง nix เสร็จละ ไปลง dapptools ต่อกัน
โอเค ลงเสร็จละ
เช็คว่า make ทำงานได้มั้ย
โอเค มาใช้ dapp tool starter kit กัน
checkout มาใช้ version เดียวกับเค้า
จากนั้นรัน make
โดยจะเป็นการอัพเดท program ต่างๆตามใน Makefile
โอเค มาลองเขียน code สุ่มเลขกัน
จาก code เรามีการ import contract จาก chainlink
ซึ่งต้องตั้งให้ dapptools หา code นั้นเจอดังนี้
เริ่มจาก download code chainlink มาเก็บไว้ในเครื่อง
สร้างไฟล์เพื่อ map ชื่อ lib กับที่อยู่ code
และตั้งค่าให้ dapptools รู้จักไฟล์นั้น
โอเค มาลอง compile code กัน
จะได้พวก abi และ bytecode มา
โอเค นอกจาก compile code ได้แล้ว dapptool ยังมี fuzzing test ติดมาด้วย
มาลองเขียน test กัน
การ startLottery ควรจะ return requestId แบบนี้
ดังนั้น เราสามารถเขียน test ได้ตามนี้
โอเค มาดูทีละส่วนกัน
deploy contract ต่างๆที่ต้องใช้ใน local chain
การ test แบบ fuzzing ต้องนำหน้าชื่อ function ด้วย test และสามารถใช้คำสั่งต่างๆเช่น assertTrue ในการ test ได้
ในการ run test ใช้คำสั่ง
โอเค ตัวอย่างการ test ก็ประมาณนี้
มา deploy smart contract กัน
ก่อนอื่น เราต้อง set private key ก่อน
มีให้ตั้ง password ด้วย ทำงานเหมือน metamask เลย
ทีนี้เราต้องหา args เพื่อ deploy DappLottery
โดยในการ deploy ใช้คำสั่งตาม pattern นี้
ETH_FROM= account ที่จะ deploy
หลัง create เป็น contract ที่จะ deploy แล้วตามด้วย constructor
อย่าลืมใส่ rpc url
deploy สำเร็จ แต่เหมือนมี error ใน blockscan แหะ
โอเค เค้ามีสอนทำ Makefile เพื่อ set พวก env ต่างๆ จะได้ไม่ต้องพิมพ์ยาวๆด้วย แต่ขอข้ามแล้วกันนะ
โอเค นอกจาก compile test deploy แล้ว dapptools ยังใช้ในการ interact กับ smart contract ได้ด้วย
เช่น เราจะ call function randomResult บน contract ที่เพิ่ง deploy ไป ได้ดังนี้
ระบุ contract address และ function ที่ จะ call หลัง seth send
ไม่ log response มาให้แหะ
แต่ก็ขึ้นใน blockscan แหละนะ
โอเค ประมาณนี้ จริงๆเหตุผลที่มาใช้ dapptool เพราะลองรัน ds-test ด้วย prefix prove บน foundry แล้วไม่ทำงาน แต่จริงๆก็มีหลาย project ที่เหมือนจะใช้ dapptools เช่น multicall ของ MakerDAO