ลองตั้ง Private Ethereum POA ด้วย Parity, MetaMask และ Alethio Ethereum Lite Explorer

บทความนี้ผมนำเสนอวิธีการตั้ง Private Ethereum Blockchain โดยใช้ Consensus Protocol แบบ POA (Proof of Authority) ด้วย Parity ซึ่งในตัวอย่างนี้เริ่มตั้งแต่ขั้นตอนการติดตั้ง Parity การตั้งค่าต่าง ๆ ที่จำเป็น การ deploy smart contract ไปที่ Blockchain ที่เราตั้งขึ้น และการดูธุรกรรมต่าง ๆ บน blockchain

Private Ethereum POA คือ ?

Private Ethereum เป็น Ethereum Blockchain ที่อนุญาตให้ผู้ที่มีสิทธิ์หรือได้รับอนุญาตเท่านั้นถึงจะสามารถเข้าใช้งานได้ ต่างจาก Public Ethereum ที่อนุญาตให้ใครก็ได้สามารถเข้าใช้งานได้อย่างอิสระ ไม่ว่าจะเป็นการอ่าน หรือทำ Transaction ต่าง ๆ ได้ ดังนั้น Private Blockchain ส่วนใหญ่จะเหมาะสำหรับใช้ภายในองค์กร หรือ กลุ่มปิด และรูปแบบ Consensus Protocol ที่นิยม คือ POA (Proof of Authority) เนื่องจากเป็นการระบุไปเลยว่าใครจะสามารถยืนยัน Transaction ได้บ้าง

ข้อดี คือ เร็วมากๆ ครับ เนื่องจากไม่ต้องมีการคำนวณอะไรที่ซับซ้อน และทำให้ไม่เสียค่าธรรมเนียม หรือ ไม่ต้องจ่าย Ether (เป็นสกุลเงินดิจิทัลที่ใช้บน Ethereum) ครับ

ข้อเสีย คือ เนื่องจากเป็นระบบที่ใช้ภายในองค์กร เลือกเฉพาะคนที่ไว้ใจได้มาเป็นคนยืนยัน Transcation แบบนี้ทำให้มัน Centralized ครับ

ติดตั้ง Parity Ethereum

ผมติดตั้ง Homebrew เนื่องจากผมใช้ Mac สำหรับเพื่อนๆที่ยังไม่ได้ติดตั้งสามารถติดตั้งด้วยคำสั่งต่อไปนี้

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

ถ้ามีอยู่แล้วก็ใช้คำสั่งต่อไปนี้ได้เลยครับ

brew tap paritytech/paritytech
brew install parity

ส่วนเพื่อนๆที่ใช้ Windows หรือ Linux สามารถติดตั้งได้ตาม link นี้ครับ

สร้างโปรเจคสำหรับ Private Blockchain

เปิด ternimal จากนั้นเริ่มสร้างโปรเจคด้วยคำสั่งต่อไปนี้

mkdir parityPOA
cd parityPOA
mkdir node pwd

สมัคร Ethereum Account ไว้สำหรับยืนยัน Transaction โดยให้ไปที่ https://www.myetherwallet.com/

เลือก By Keystore File > ใส่ Password ดังนี้

จากนั้น Download Keystore File มาเก็บไว้ด้วย โดยดังชื่อว่า Node

นำมาไว้ในโปรเจคที่สร้างขึ้นดังนี้

จากนั้นลองเข้าไป copy Wallet Address จากใน MyEtherWallet โดยไปที่ https://www.myetherwallet.com/ > Access My Wallet > Software > Keystore File > ใส่ password

จากนั้น copy Address ที่อยู่ด้านซ้ายบนไว้ครับ

สร้างไฟล์ชื่อ parityGenesis.json สำหรับกำหนดคุณสมบัติเบื้องต้นของ Chain ดังนี้

มาดูรายละเอียดเบื้องต้นกันครับ

● "stepDuration": ระยะเวลาอย่างน้อยต่อ block ในที่นี้ คือ 5 วินาที

● "validators" : account ที่มีสิทธ์ในการยืนยัน Block ให้ใส่ Wallet Address ของเราไว้ใน "list"

● "accounts" : ระบุ builtin contract และลองเพิ่ม account ใหม่เข้าโดยกำหนดให้มี balance เป็น 100 ETH

***เพื่อนๆสามารถศึกษาเพิ่มเติมการตั้งค่าต่างๆของ Node ได้ที่ link นี้ครับ

สร้างไฟล์ชื่อ password.pwd สำหรับใช้เก็บ password ของ account ดังนี้

โดยใส่ password ใน ไฟล์ password.pwd ไว้ดังนี้

<< Your Password >>

ต่อมาสร้างไฟล์ node.toml ดังนี้

***เพื่อนๆสามารถศึกษาเพิ่มเติมการตั้งค่าต่างๆของ Node ได้ที่ link นี้ครับ

จากนั้น Import Ethereum account ไปที่ Node โดยการระบุ Keystore ด้วยคำสั่งดังนี้

parity --config ./node.toml account import ./Node.625Z--749e2c941028ffece7e47e50535e75bfc7f10993

จะปรากฎผลลัพธ์ดังต่อไปนี้

รัน Blockchain

หลังจากที่เราตั้งค่าต่างๆเรียบร้อยแล้ว เราจะมาลองรัน Blockchain ที่เราสร้างขึ้นด้วยคำสั่งต่อไปนี้

parity --config ./node.toml

ถ้าทุกอย่างถูกต้องจะปรากฎผลลัพธ์ดังต่อไปนี้

จากรูปข้างต้นสังเกตว่า Block จะถูกสร้างขึ้นทุกๆ 5 วินาที ตามที่เราตั้งค่าไว้เรียบร้อยแล้วครับ เท่ากับว่าเราสามารถรัน Private Blockchain ของเราเอง ได้สำเร็จล่ะครับ

MetaMask

ในบทความนี้ผมจะใช้ MetaMask ซึ่งเป็น Ethereum wallet ใช้สำหรับบริหารจัดการ Ethereum และสำหรับใช้ในการ Deploy Smart Contract ไปบนที่ Blockchain

เริ่มจากการติดตั้ง MetaMask โดยเข้าไปที่ metamask.io > Install MetaMask …

เมื่อติดตั้งเรียบร้อยขั้นตอนต่อมาเราจะมาเพิ่ม Network ใหม่ คือ Blockchain ที่เราพึ่งสร้างขึ้น โดยไปที่รูป icon ขวาบน จากนั้นให้เลือก Custom RPC

โดยให้ตั้งชื่อ Network และ ระบุ URL จากนั้น กด Save ดังนี้

จากนั้นเพิ่ม Ethereum Account ที่เราสมัครจาก myetherwallet ซึ่งเป็น account เดียวกันกับที่เราระบุไว้ใน Blockchain ดังนี้

กดที่รูป icon สีๆด้านขวาบน > Import Account

เลือก Select Type เป็น JSON File > เลือก Keystore ที่เราโหลดเก็บไว้ (Node…) > ใส่ password ของ account > กด Import

เมื่อเพิ่ม Network และ Account สำเร็จ จะพบว่า Network คือ ParityPOA และ address นี้จะมี balance อยู่ 100 ETH ตามที่เราระบุไว้ในไฟล์ node.toml ดังนี้

ลอง Deploy Smart Contract ด้วย Remix

Remix เป็น online IDE ไว้สำหรับเขียนและ deploy smart contract โดยภาษาที่ผมใช้ คือ Solidity

เริ่มจากเข้าไปที่ remix.ethereum.org จากนั้นให้กดที่เครื่องหมาย + สีดำด้านซ้ายบน จากนั้นตั้งชื่อ smart contract ว่า SimpleContract.sol ดังนี้

ต่อมาผมจะสร้างเป็น smart contract ที่สามารถ set และ get ตัวเลขได้ โดยมี function setNumber สำหรับเก็บตัวเลข และ function getNumber สำหรับเรียกดูตัวเลขที่จัดเก็บไว้ smart contract จะมี code ดังต่อไปนี้

ต่อมาลอง compile code โดยให้ไปทางแถบด้านซ้ายชื่อว่า SOLIDITY COMPILER ให้เลือก compile เป็น version 0.5.0+commint… < จากนั้นกด Compile SimpleContract.sol ถ้าไม่มีอะไรผิดพลาดจะพบเครื่องหมายถูกสีเขียวขึ้นมาแสดงว่า compile ผ่าน ดังนี้

ต่อมาผมจะลอง deploy smart contract ไปที่ Private Chain ที่เราสร้างขึ้น โดยให้ไปที่แถบซ้ายชื่อ DEPLOY & RUN TRANSACTIONS จากนั้น Environment เลือก Injected Web3 > จากนั้นลองกด Deploy > กด Confirm ค่า gas ดังนี้

โดยจากรูปข้างต้น สังเกตว่าค่าธรรมเนียมในการ deploy เป็น 0 !!! สบายล่ะงานนี้

จากนั้นลองกลับไปดูที่ terminal ที่รัน Blockchain จะพบว่า smart contract ที่ถูก deploy ไปถูกยืนยันใน block ที่ 79 ดังรูป

ต่อมาผมลอง set ตัวเลข 100 ผ่านทาง IDE ของ Remix โดย ลองกรอก 100 จากนั้นกดที่ setNumber ดังนี้

โดยการ set เมื่อกี้จะไม่เสียค่า gas เหมือนตอน deploy ครับ

เมื่อกลับไปดูที่ terminal ที่รัน Blockchain พบว่า Transaction ถูกยืนยันที่ Block 90 ดังรูป

จากนั้นลอง get ค่ามาดูบ้าง โดย กดที่ getNumber จะพบว่าได้เลข 100 กลับมา ดังนี้

เท่ากับว่าตอนนี้เราสามารถที่จะ deploy smart contract และ ใช้งาน contract บน blockchain ที่ตั้งขึ้นได้แล้ว ต่อมาผมอยากดู Transction ต่างๆแบบง่ายๆหน่อย เดี๋ยวมาดูกันครับว่าทำอย่างไรดี

Alethio Ethereum Lite Explorer

Alethio Ethereum Lite Explorer เป็น frontend web application สำหรับใช้ดูข้อมูลบน blockchain เช่น ข้อมูล block, ธุรกรรม, account บน blockchain เป็นต้น

รัน Alethio Ethereum Lite Explorer โดยใช้ Docker

สำหรับเพื่อนๆ ที่ยังไม่ได้ลง docker ให้ลงก่อนตาม link นี้ครับ

จากนั้นใช้คำสั่งต่อไปนี้

docker run — rm -p 8080:80 -e APP_NODE_URL=http://localhost:8545 alethio/ethereum-lite-explorer

ต่อมาลองเข้า http://localhost:8080/ จากนั้นจะพบปรากฏผลลัพธ์ดังต่อไปนี้

จากรูปจะพบว่าเราสามารถกดดูธุรกรรมที่เราเคยทำไปก่อนหน้านี้ และเมื่อกดเข้าไปจะพบรายละเอียดดังนี้

สรุป

ในบทความนี้เราได้เรียนรู้การตั้ง Private Ethereum แบบ POA ด้วย Parity โดยเริ่มตั้งแต่ขั้นตอนการติดตั้ง Parity การตั้งค่าต่างๆที่จำเป็น การ deploy smart contract ไปที่ Blockchain ที่เราตั้งขึ้น และสุดท้ายลองการดูธุรกรรมต่างๆบน blockchain ด้วย Alethio Ethereum Lite Explorer

บทความโดย อ.ผศ.ดร.ธรรณพ อารีพรรค

วิทยาลัยนวัตกรรมดิจิทัลเทคโนโลยี มหาวิทยาลัยรังสิต