Solidity 101 เริ่มต้นเป็นนักพัฒนา Smart Contract on Blockchain (Remix IDE)

Sharing is caring!

เกริ่นนำ ก่อนอื่นจะเล่าถึงความต้องการที่อยากจะบันทึกเรื่องราวการเริ่มเป็น Blockchain Developer เพราะอยากที่จะเรียนรู้กับสิ่งใหม่ ๆ ที่เป็นอีกหนึ่งโลกของการเป็นนักพัฒนา ด้วยแนวคิด เรื่องราว ข้อดี ความปลอดภัย ของ Blockchain ทำให้ผมไม่ใช่แค่เป็นเพียงฝั่งผู้ใช้งานเพียงอย่างเดียว แต่อยากที่จะเป็นฝั่งผู้พัฒนา อยากรู้ส่วนลึก ๆ ของเทคโนโลยีนี้ ให้มาก ๆ เท่าที่จะทำได้ ด้วยเหตุผลเหล่านี้ ทำให้ผมเริ่มที่ยากจะเรียนรู้พื้นฐานต่าง ๆ เพราะเป็นเส้นทางไปสู่เรื่องอื่น ๆ ต่อไป

Smart Contract คืออะไร

Smart contract คือ สัญญาที่ดำเนินการด้วยตนเองแบบอัตโนมัติ โดยดำเนินการขั้นตอนตามเงื่อนไขหรือข้อกำหนดที่ได้ระบุเอาไว้ในสัญญา ทั้งนี้ เงื่อนไขหรือข้อกำหนดของ Smart Contract มีลักษณะเป็น Programming Code เก็บอยู่ในบล็อกเชน

ข้อดีและข้อเสียของ Smart Contract

ข้อดีของ Smart Contract

  • ความปลอดภัยสูง แน่นอนว่าข้อมูลที่ผ่านการทำธุรกรรมทั้งหมดจะถูกจัดเก็บอยู่ใน blockchain ไม่สามารถแก้ไขหรือปลอมแปลงได้ ซึ่งเป็น 1 ในประโยชน์ของ Technology Blockchain
  • ทำธุรกรรมรวดเร็ว Smart Contract มีไว้เพื่อกำหนดเงื่อนไขและข้อกำหนดซึ่งถูกทำให้เป็นระบบอัตโนมัติที่สุด ฉะนั้นเมื่อผู้ดำเนินธุรกรรมทั้ง 2 ฝ่ายได้ตกลงและยินยอมรับการทำธุรกรรมบน Blockchain ก็เป็นอันสำเร็จเสร็จสิ้น
  • ช่วยประหยัดค่าใช้จ่าย Smart Contract เกิดมาเพื่อลดความซ้ำซ้อนของตัวอย่าง ทำให้ประหยัดค่าใช้จ่ายในส่วนนี้

ข้อเสียของ Smart Contract

  • ข้อบกพร่องของ Programming Code แทบจะทุกภาษาการพัฒนา ย่อมจะมีช่องโหว่ให้เหล่าแฮกเกอร์ ที่จะจ้องเข้ามาเล่นงานระบบ Smart Contract ก็เช่นกัน ถ้าไม่มีการตรวจสอบให้ดี อาจจะก็ให้เกิดความเสียหายได้ง่าย ๆ
  • ไม่มีข้อกฎหมายรองรับ เทคโนโลยี Smart Contract ถือว่าเป็นสิ่งใหม่ที่ใช้งานได้ไม่นาน ส่งผลให้ผู้คนส่วนใหญ่ยังขาดความรู้ความเข้าใจ ทำให้ยังไม่มีกฎหมายหรือเกณฑ์ข้อบังคับของหน่วยงานภาครัฐรองรับการใช้งาน Smart Contract เมื่อเกิดกรณีผิดพลาดขึ้น จึงส่งผลกระทบต่อผู้ใช้งานโดยตรง
  • ข้อจำกัดของการใช้งาน ผู้ใช้งานจำเป็นต้องมีความรู้ภาษาคอมอย่าง Solidity ที่ไว้ใช้สำหรับเขียนข้อกำหนดหรือเงื่อนไขต่าง ๆ ลงในสัญญา หากเงื่อนไขการทำงานซับซ้อน อาจต้องจ้างนักพัฒนามาเขียน Code แทน

Solidity คืออะไร

Solidity เป็นภาษาการเขียนโปรแกรมเชิงวัตถุสำหรับการนำสัญญาอัจฉริยะไปใช้งาน Smart Contract บนแพลตฟอร์มบล็อกเชน (Blockchain) ต่างๆ โดยเฉพาะ Ethereum ได้รับการพัฒนาโดย Christian Reitwiessner, Alex Beregszaszi และอดีตผู้สนับสนุนหลักของ Ethereum หลายคน โปรแกรมใน Solidity ทำงานบน Ethereum Virtual Machine

Remix IDE คืออะไร

Remix IDE เป็น IDE สำหรับใช้ develop, compiler, deploy & run transaction ของภาษาโปรแกรมมิ่ง Solidity ได้ โดยมี Remix Online IDE สำหรับ Webbase DevEnvironment ทำงานได้บนเว็บ, Remix Desktop IDE สำหรับ ทำบน Desktop และ Ethereum Remix สำหรับ Extension บน VSCode (บทความนี้เราจะมาใช้งานรูปแบบ Online IDE กัน)

มาสร้าง Smart Contract อย่างง่าย ๆ กัน

เริ่มด้วยการเข้าไปที่ลิ้งนี้ https://remix.ethereum.org/

  1. FILE EXPLORER จะที workspaces สามารถสลับสับเปลี่ยน เบื้องต้น จะมี default_workspace แต่เราสามารถสร้าง local workspace เมื่อใช้งาน Ethereum IDE ของ VSCode sync source code ระหว่าง Online กับ local ได้
  2. SEARCH IN FILES ใช้ค้นหา files หรือ resources อื่น ๆ
  3. SOLIDITY COMPILER เพื่อ compile ตรวจสอบ Solidity source code
  4. DEPLOY & RUN TRANSACTIONS deploy smart contract ของเรา และสามารถ ทดสอบ run smart contract ของเราหลังจาก deploy ได้อีกด้วย
  5. SOLIDITY STATIC ANALYSIS
  6. WORKSPACE พื้นที่สำหรับ implement smart contract code ของเรา

เมื่อพอรู้เมนูต่าง ๆ ก็จะมาเริ่ม coding กัน

  • เราจะสร้างไฟล์ /contracts/MailInbox.sol เปิดไฟล์ MailInbox.sol
pragma solidity ^0.4.17;

contract MailInbox {
    
    string public message;

    constructor (string intialMessage) public {
        message = intialMessage;
    }

    function setMessage (string newMessage) public {
        message = newMessage;
    }

    function getMessage () public view returns (string) {
        return message;
    }
}
  • Compile MailInbox.sol (ให้เปิดไฟล์ MailInbox.sol ค้างไว้ จากนั้นกด Compile MailInbox.sol )
  • มาถึงขั้นตอนการ Deploy ให้เลือกมาที่เมนู Deploy & Run Transaction
    • ENVIRONMENT: Remix VM London
    • ACCOUNT: (เลือก Account แรก)
    • GAS LIMIT: (Default)
    • VALUE: (Default)
    • CONTRACT (Compile by Remix): MailInbox – contracts/MailInbox.sol
    • Deploy: string initialMessage: (ให้กำหนดเป็นค่า string อะไรก็ได้ ตัวอย่างจะใส่ “Hello World”)
  • จากนั้นกด “Deploy”
  • เมื่อ Deploy เรียบร้อยจะมีการสร้าง deploy contract address
    • ทดสอบ setMessage: “Test Set Message” จากนั้นกด “setMessage”
    • จากนั้นกด “getMessage” เพื่อดูผลลัพธ์ที่เปลี่ยน
  • message จะถูก set ค่าใหม่เป็นคำว่า “Test Set Message”
    • สามารถดู transaction log ว่าสำเร็จหรือไม่
  • สำความเข้าใจเรื่อง FEEs (Gas) ของการทำ transaction
    • ก่อนหน้าที่จะทำการ Deploy และ Run Account …eddC4 จะมี (100 (Eth)) แต่เมื่อ Deploy จะมีค่าดำเนินการ Fee ส่วนหนึ่งซึ่งการคิดคำนวนจะมีสูตรเรื่องนี้ตามการใช้งาน resource ของ Solidity source code ของเรา
    • เมื่อทำการเรียก setMessage จะถูกคิดค่าดำเนินการ Fee อีกครั้ง แตกต่างจาก getMessage จะไม่มีการคิดค่า Fee
      • เมื่อ Transaction มีการเปลี่ยนแปลง หรือทำให้เกิดการเปลี่ยนแปลงจะมองว่ามีการคิดค่า Fee นั้นคือ setMessage ที่เปลี่ยนค่าของ message จาก “Hello World” ไปเป็น “Test Set Message”
      • แต่ getMessage เป็นเพียงการ view ดู message จาก transaction block เท่านั้นจึงไม่ถูกคิดค่าดำเนินการ Fee

สรุปท้ายบทความ

Solidity เป็นภาษาเพียงภาษานึงที่สามารถสร้าง Smart Contract ได้ ยังมีการใช้งานภาษาอื่น ๆ ให้การสร้างได้เช่นกัน สำหรับตัวอย่างนี้เป็นเพียงตัวเองง่าย ๆ ให้เข้าใจความหมาย และตัวอย่างเครื่องมือ เพื่อเป็นการเริ่มต้น สำหรับมือใหม่ ผู้เขียนมีช่องทางแนะนำสำหรับมือใหม่ในการฝึกฝน https://cryptozombies.io/en/course จะเป็นการเรียนในรูปแบบ course quiz สนุก ๆ ขอบคุณที่ติดตามครับ ^..^

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *