บทความนี้จะพาเพื่อนๆมาดูวิธีการพัฒนา Ethereum Smart Contract และ Backend ด้วยภาษา Go โดยจะมีเนื้อหาดังต่อไปนี้ครับ
- เตรียมความพร้อม และติดตั้งโปรแกรมต่างๆ
- สร้างและ Compile Smart Contract ด้วย Solidity
- Deploy Smart Contract ไปที่ Blockchain โดยใช้ go-ethereum
- สร้าง backend เชื่อมต่อกับ Blockchain ด้วย go-ethereum และ Echo
- ทดลอง backend
เพื่อไม่ให้เสียเวลามาเริ่มกันเลยครับ
เริ่มจากสร้าง Folder และเตรียมไฟล์เปล่าๆไว้ก่อนดังรูปต่อไปนี้
เป็นภาษาหลักที่เราจะใช้กันในบทความนี้ครับ โดยให้ไป download ตัวติดตั้งที่ link นี้
เมื่อติดตั้งเรียบร้อยแล้ว ให้ลองรันคำสั่งต่อไปใน terminal
$ go version
ภาษาสำหรับพัฒนา Smart Contract โดยใช้คำสั่งต่อไปนี้
> pip3 install solc-select
> solc-select install 0.8.0
> solc --version
Ganache เป็น Ethereum Blockchain บนเครื่องเราเอง ไว้สำหรับ deploy contract แบบ local ได้นั่นเอง โดยให้ไป download ตัวติดตั้งที่ link นี้
เมื่อติดตั้งเรียบร้อยแล้ว ให้ทดลองรันจะปรากฎหน้าจอดังนี้
เริ่มจากสร้าง file go.mod โดยใช้คำสั่งต่อไปนี้
> go mod init greetergo
จากนั้นเราจะติดตั้ง go-ethereum โดยใช้คำสั่งต่อไปนี้
> go get github.com/ethereum/go-ethereum
จากนั้น จะสังเกตว่ามีไฟล์ go.sum เพิ่มขึ้นมา ซึ่งเป็นไฟล์ที่มีไว้สำหรับการ checksum เพื่อตรวจว่าไฟล์ที่เราโหลดมาถูกต้องตามต้นฉบับหรือเปล่า ตอนนี้ Project เราจะมีหน้าตาประมาณนี้ครับ
ให้เพิ่ม code ใน Greeter.sol ใน folder contracts ดังต่อไปนี้
ขออธิบาย code ซักเล็กน้อย Smart Contract ดังนี้
บรรทัดที่ 2: กำหนด version ของ Solidity คือ 0.8.0
บรรทัดที่ 4: contract นี้มีชื่อว่า Greeter
บรรทัดที่ 5: ตัวแปร greeting กำหนดค่าเริ่มต้นเป็นคำว่า HelloWorld
บรรทัดที่ 7-9: function greet() ใช้สำหรับคืนค่า greeting ที่จัดเก็บไว้
บรรทัดที่ 11-13: function setGreeting() สำหรับรับค่า _greeting มาจัดเก็บไว้ที่ greeting
จากนั้น complie Greeter.sol โดยใช้คำสั่งต่อไปนี้
> solc --optimize --abi ./contracts/Greeter.sol -o build
> solc --optimize --bin ./contracts/Greeter.sol -o build
> abigen --abi=./build/Greeter.abi --bin=./build/Greeter.bin --pkg=api --out=./api/Greeter.go
จากนั้นคำสั่งข้างต้น จะได้ .abi และ .bin อยู่ใน folder build และสุดท้ายเราใช้ทั้ง 2 ไฟล์ข้างต้นสำหรับสร้าง Go interface โดยใช้คำสั่ง abigen ซึ่งเราจะได้ Greeter.go อยู่ใน folder api ดังนี้
เนื่องจากในบทความนี้เราจะใช้ Ganache สำหรับเป็น Blockchain บนเครื่องเราเอง โดยสิ่งที่เราต้องใช้ตอนนี้ คือ Private Key ซึ่งให้เข้าไปที่โปรแกรม Ganache จากนั้นกดที่ กุญแจ ด้านขวามือของ address อันไหนก็ได้ (แต่กดที่อันแรกก็ง่ายดีครับ) โดย copy Private Key ในรูปกรอบสีแดงดังนี้
จากนั้นเพิ่ม code ใน deploy.go ใน folder deploy โดยแก้ไขบรรทัดที่ 22 เป็น Private Key ที่ copy ไว้ข้างต้น และจะมีบรรทัดที่ 7 ที่จะไม่เหมือนในรูปจะเป็นไปตามชื่อ folder ที่ตั้งครับ
รันคำสั่งเพื่อทำการตรวจหาตัว Dependency ที่ไม่จำเป็นและนำออกไปจาก go.mod ดังนี้
> go mod tidy
จากนั้น deploy ด้วยคำสั่งต่อไปนี้
> go run ./deploy/deploy.go
เมื่อรันสำเร็จเราจะได้เลข Contract Address ดังนี้
ในบทความนี้จะใช้ Echo ซึ่งเป็น web framework ของภาษา GO พัฒนาโดย LabStack เห็นเค้าบอกว่า มีประสิทธิภาพสูง (High performance), ขยายเพิ่มเติมได้ (Extensible), มีความเรียบง่าย (Minimalist) อันนี้ไม่รู้จริงไหมนะครับ
จากนั้นติดตั้ง echo ด้วยคำสั่งต่อไปนี้
> go get github.com/labstack/echo/v4
> go get github.com/labstack/echo/v4/middleware@v4.7.2
จากนั้นเพิ่ม code ใน main.go ใน folder script โดยแก้ไขบรรทัดที่ 22 เป็น Private Key และบรรทัดที่ 37 เป็น Contract Address ดังนี้
ขออธิบาย code สั้นๆครับ
บรรทัดที่ 47-53: เป็นการสร้าง Endpoint /greet สำหรับ call ที่ไป function Greet เพื่อคืนค่า greeting จาก Blockchain
บรรทัดที่ 55-62: เป็นการสร้าง Endpoint /greet/:_greeting สำหรับ call ที่ไป function SetGreeting เพื่อกำหนดค่า greeting ใหม่
บรรทัดที่ 65: ตั้ง port ที่ 1324
จากนั้นรัน backend ด้วยคำสั่งต่อไปนี้
> go run ./script/main.go
ซึ่งจะได้ผลลัพธ์ดังต่อไปนี้
เริ่มผมลองเปิด Browser แล้ว เรียกไปที่ http://localhost:1324/greet จะได้ผลลัพธ์ดังนี้
ซึ่งจะแสดงผลลัพธ์เป็นคำว่า HelloWorld
จากนั้นผมลอง set ค่า greeting เป็นคำว่า smartcontactgo ใหม่โดยเรียกไปที่ http://localhost:1324/greet/smartcontactgo จะได้ผลลัพธ์ดังนี้
จากนั้นผมลองรับไปเรียกที่ http://localhost:1324/greet จะได้ผลลัพธ์ดังนี้
ซึ่งจะแสดงผลลัพธ์เป็นคำว่า smartcontactgo แสดงว่าเราสามารถ set ค่าไปที่ blockchain ได้สำเร็จผ่านทาง backend ที่สร้างขึ้นครับ
ในบทความนี้เราได้เรียนรู้หลายเรื่องเลยครับ ตั้งแต่การสร้าง compile และ deploy Smart Contract ด้วย GO จากนั้นเราก็สร้าง backend สำหรับเชื่อมไปที่ blockchain
สุดท้ายนี้ เนื้อหาในบทความนี้ผิดพลาดประการใดต้องขออภัยมา ณ ที่นี้ด้วยนะครับ
บทความต่อไป เราจะลองใช้ Blockchain จริงๆบ้าง อ่านต่อที่ link นี้ครับ
บทความโดย อ.ผศ.ดร.ธรรณพ อารีพรรค
วิทยาลัยนวัตกรรมดิจิทัลเทคโนโลยี มหาวิทยาลัยรังสิต