มาลองใช้ DappTools กันเถอะ

Nattawat Songsom
5 min readDec 5, 2022

--

จริงๆจะ 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

Referrences

--

--

No responses yet