Ethereum Smart Contracts with Next.js [Part 0] (รู้จักสิ่งต่างๆ ในการพัฒนา)

Supakorn Thongtra
Dcen.io
Published in
5 min readMay 31, 2018
https://www.logisticsbureau.com/how-blockchain-can-transform-the-supply-chain/

ช่วงนี้กระแสของเทคโนโลยี Blockchain และ Digital currency ต่างๆ เช่น Bitcoin, Ethereum หรือ เหรียญดิจิตอลอื่นๆ กำลังมาแรง และประกอบด้วย คสช ของเราชาวไทยทำงานกันได้เป็นอย่างดี ประเทศไทยก็เลยมีการออก กฎหมายเกี่ยวกับเงินคริปโต รวมไปถึง กฎหมายเกี่ยวกับการทำ ICO มารองรับการทำธุรกิจหรือธุรกรรมเหล่านี้ เมื่อมีกฎหมายออกมาแล้ว ก็มีข้อดีตามมาด้วย (หรือป่าวนะ ?) เช่น

  • Start Up ต่างๆ ที่ต้องการทำ ICO ก็จะมีนักลงทุนต่างๆเข้ามากันมากขึ้น ทั้งจากในประเทศและต่างประเทศ
  • Web App, Mobile App แนว Exchange, DApp ก็จะมีเพิ่มมากขึ้น
  • Developer สายนี้ก็จะเป็นที่ต้องการมากขึ้น (ฮูเร่ !)
ตัวอย่างเหรียญที่มีอยู่ในตลาด (ตัวแดง ติดดอยกันเลยทีเดียว)

ก่อนจะไปสร้าง Smart Contracts ขึ้นมาบน Ethereum เราควรรู้จักเทคโนโลยีที่เกี่ยวข้อง, ความหมายของศัพท์ต่างๆ, ภาษาที่ใช้ในการพัฒนา รวมถึง Tools ที่จำเป็นต้องใช้ในการพัฒนาก่อน

Blockchain คืออะไร

Blockchain คือรูปแบบการเก็บข้อมูล (Database) แบบหนึ่งของระบบที่ไม่มีศูนย์กลางแต่เชื่อถือได้และโกงยาก

Ethereum คืออะไร

Ethereum (ETH) เป็นหนึ่งในสกุลเงินดิจิทัล (Cyptocurrency) ที่ใช้เทคโนโลยี Blockchain ทำงานอยู่เบื้องหลังและเป็นสกุลเงินที่สามารถนำไปประยุกต์ใช้ได้กับธุรกิจประเภทต่าง ๆ ได้มากมาย ไม่จำกัดแค่การใช้ในธุรกรรมทางการเงินเท่านั้น นอกจาก Ethereum จะเป็นสกุลเงินดิจิทัลแล้ว ยังทำตัวเองให้เป็น Platform อีกด้วย

ตัวอย่างเหรียญที่สร้างอยู่บน Ethereum Platform

Smart Contracts คืออะไร

Smart Contracts เป็นฟีเจอร์ใน Ethereum ที่อนุญาตให้เราสามารถเขียนโปรแกรมลงไปในข้อมูลของสกุลเงิน Ether ให้ทำงานอัตโนมัติเมื่อเจอเงื่อนไขที่กำหนด ความสามารถนี้ทำให้เราสามารถสร้างแอพพลิเคชันต่างๆ ขึ้นมาบนเครือข่าย Ethereum อีกชั้นหนึ่ง โดยภาษาที่ใช้เขียนจะมี syntax คล้ายกับภาษา Javascript

Solidity คืออะไร

Solidity คือ ภาษาที่ใช้สำหรับเขียน Smart Contracts เพื่อไปรันบน Ethereum Virtual Machine (EVM) ถ้าหากคุ้นเคยกับภาษา Javascript และหลักการของ OOP มาก่อนแล้ว ก็สามรถปรับตัวให้เข้ากับภาษานี้ได้ง่าย

ข้างบนเป็นตัวอย่าง Solidity code แบบง่ายๆ จริงๆแล้วจะมี syntax ที่จำเป็นต้องใช้ในการใช้งานจริงมากกว่านี้ สามารถเรียนรู้เกี่ยวกับ syntax ได้ที่ https://cryptozombies.io/en/course/

ซึ่งอธิบายไว้ค่อนข้างละเอียดมาก สำหรับการใช้จริง (มีภาษาไทยด้วยนะ แต่แนะนำให้เรียนภาษาอังกฤษดีกว่า)

ตัวอย่าง Solidity Code App Voting http://solidity.readthedocs.io/en/v0.4.24/solidity-by-example.html#voting

App Voting ของ Smart Contracts เปรียบเสมือน Hello World ของภาษาอื่นๆเลยก็ว่าได้

Remix คืออะไร

Remix คือ Solidity IDE ที่รันอยู่บน Browser ซึ่งเราสามารถนำ Solidity code ที่เราเขียนไปรันบนนี้ได้

และสามารถทดสอบ deploy รวมถึงการเรียกใช้ Method setMesaage หรือ get ค่าตัวแปร message ที่เก็บอยู่ล่าสุดผ่าน Remix IDE ได้ด้วย (อ้างอิงจาก Code ด้านบน)

Remix — IDE

Truffle คืออะไร

Truffle เป็น Framework ที่ใช้สำหรับพัฒนา Ethereum โดยมีฟีเจอร์ดังนี้

  • รวบรวม Smart Contracts ที่เราสร้างขึ้นและ deploy ขึ้นไปบน Ethereum Platform หรือ deploy ขึ้น Localhost ของเครื่องเรา
  • เขียน Ttest มารันทดสอบ Smart Contracts
  • สามารถ log ดูการ interact ใน Smart Contracts ได้

Truffle project จะมี Project Structure หน้าตาประมาณนี้

Truffle Project Structure

Web3.js (version 1.0.0-beta.34) คืออะไร

Web3.js คือ Javascript API ที่ใช้สำหรับ interact กับ Ethereum เช่น เราใช้ Front-end เป็น React เราก็ต้อง Import lib ของ web3.js เข้ามาเพื่อเรียกใช้ API ของ web3.js เพื่อให้ไปเรียกใช้ Methods ต่างๆ ใน Smart Contracts ของเราอีกทีหนึ่ง

โดยตัว Web3.js สามารถยิง API ไปบอกให้ สร้าง Transaction, get ค่าตัวแปรต่างๆ, เรียกใช้ Methods บน Smart Contracts ที่อยู่บน Ethereum Blockchain ได้

เพิ่มเติม — Version ที่ Stable ตอนนี้คือ 0.20.xx แต่แนะนำให้ไปศึกษา Version 1.0.0-beta.xx เลยดีกว่า เพราะว่า ตัวใหม่สามรถใช้ async/await ได้ และ ใช้ Websocket ในการจัดการกับ Event ต่างๆ ที่ถูกส่งมาจาก Smart Contracts

Metamask คืออะไร

Metamask เป็น Extension ตัวหนึ่งบน Browser ใช้สำหรับเป็น Wallet ของเรา ซึ่งจะสามารถสร้าง Account ได้หลายๆ Account

เราสามารถใช้ Account ที่สร้างขึ้น เลือกให้ต่อกับ Main Ethereum Network หรือ Network ตัวอื่นๆ ได้ ( Network ช่องทางอื่นๆ จะเป็นสำหรับเอาไว้ทดลอง interact กับ Smart Contracts ของเราก่อนเอาขึ้นไปใช้จริงใน Main Ethereum Network หรือ จะทดสอบใน localhost ของเราก็ได้เช่นกัน )

ตัว Test Network แนะนำให้ใช้ Rinkeby เพราะเราสามารถขอเหรียญ ETH มาใช้ทดสอบได้ฟรีบน Test Network โดยเข้าไปที่ https://faucet.rinkeby.io/ แล้วเอา Account Address ใน Metamask โพสลง Social แล้วเอาลิ้ง Social มากรอกลงระบบ ก็จะได้เหรียญ ETH มาใช้ในการทดสอบ

https://metamask.io/

Infura คืออะไร

Infura คือ Blockchain Infrastructure ที่รัน Node ของ Ethereum อยู่ และเปิดให้เราสามารถเข้าไปเรียกใช้ APIs ต่างๆ เช่น JSON-RPC, REST and Websockets ผ่าน Library หรือ Framework อะไรก็ได้ที่เราต้องการใช้ โดยจะมี Network อยู่ 4 ตัวด้วยกันคือ mainnet, ropsten, kovan, rinkeby(ต้องสมัครสมาชิกเพื่อขอ API key ก่อนใช้งานนะ และที่สำคัญคือสามารถใช้งานได้ฟรี !!!)

สามารถอ่านข้อมูลเพิ่มเติมเกี่ยวกับ Infura Architecture ได้ที่

Infura

Next.js คืออะไร

Next.js คือ Framework ตัวหนึ่งที่ใช้ในการพัฒนา React App ซึ่งมีข้อดีคือ มันเกิดมาเพื่อรองรับการทำ Server Side Rendering (เพื่อ SEO ที่ดีขึ้น) และ เริ่มต้นโปรเจ็คค่อนข้างง่ายมาก รวมถึงมีของที่จำเป็นต้องใช้แทบจะครบ เช่น Routing, styled-jsx, Code splitting, Hot reload , ฟีเจอร์อื่นๆอีกมากมาย

https://nextjs.org/

สรุป

ในบทความนี้เราก็ได้รู้จักเทคโนโลยี Blockchain, Ethereum, ภาษา Solidity และเครื่องมือต่างๆ ที่จำเป็นต้องใช้ในการเขียน Smart Contracts ขึ้นมาแล้ว ในบทความหน้า (Part 1) เราจะมาลองเขียน Smart Contracts ในรูปแบบของ Todo List กัน เพื่อให้เข้าใจเกี่ยวกับภาษา Solidity ได้ง่ายขึ้น

ปล. ใครมีคำแนะนำเกี่ยวกับ เทคโนโลยี ภาษา หรือ เครื่องมือตัวอื่นๆ ที่ดีกว่านี้ หรือ เหมาะสมกว่านี้ สามารถแนะนำมาได้เลยนะครับ

Ethereum Smart Contracts with Next.js Series

--

--