พัฒนา Libra Wallet ใช้เอง กันง่าย ๆ ด้วย libra-core.js ที่ทำงานได้ทั้งบน Browser และ Nodejs — Part1

Nattapon Nimakul
KULAPofficial
Published in
4 min readJul 29, 2019

สวัสดีครับทุกท่าน จบไปแล้วกันง่าย Libra Developer Bangkok ที่จัดโดย เหล่านักพัฒนาจากคนไทย รวมไปถึงเหล่า contributes ให้กับโปรเจค Open Source Libra หลายตัว ที่ค่อนข้าง active กันมาก เดือนเดียวมีโปรเจคที่ทีมผมทำกันทั้ง contributes / watch เพียบเลย ซึ่งผมเองก็มีโอกาสได้พูดในหัวข้อ “The First Libra Wallet: how to build your own wallet”

Libra Contributors
Open Source Libra Projects

โอเคมาเข้าประเด็นกันเลย ทางทีมงาน kulap.io เราได้มีโอกาสทำ Libra Wallet POC https://dev.kulap.io/libra/ ไปตั้งแต่วันแรก ๆ ที่ Libra เปิดตัวออกมา แต่ ณ ตอนนั้นทุกอย่างยัง early มาก เราเลยใช้วิธี hack ๆ กัน โดยการรัน express.js ตัวหนึ่งมารับ api create / query balance / transfer แล้วเบื้องหลังไปเรียก docker มาทำงานอีกที ใครสนใจลองอ่านบทความ The First Libra Wallet POC นี้ได้ครับ

https://dev.kulap.io/libra/

ซึ่งได้รับความสนใจเยอะมาก จนตอนนี้มีผู้ใช้งานมากกว่า 17,000 คน และมีธุรกรรมมากว่า 140,000 ธุรกรรมที่เกิดขึ้นในระบบ Libra Blockchain

https://dev.kulap.io/libra/#/stats

แต่ระบบนี้ก็มีความปลอดภัยที่ต่ำ เนื่องจากมีการสร้าง secret key (mnemonic phrase / private key) ที่เป็นกุญแจลับในการเข้าถึงบัญชี Libra จาก server แล้วส่งให้ผู้ใช้ แล้วพอผู้ใช้จะโอนเงิน ก็ต้องส่ง secret key ไปที่ server อีก ตรงนี้หาก server โดนโจมตี หรือโดนดักฟัง เงินในบัญชีก็จะมีความเสี่ยงทันที

Introduce npm i kulap-libra 🔱

พอมีผู้ใช้สูงขึ้น เราก็เลยคิดว่าถึงเวลาอัพเกรดให้เข้าใกล้ Production grade ด้วยการทำให้มันเป็น Crypto Wallet จริง ๆ เลยด้วยการใช้ kulap-libra npm package ในการ create / transfer จาก Browser และ nodejs ได้โดยไม่ต้องพึง Server อีกต่อไป (ตัว Kulap Libra Wallet อัพเกรดมาใช้ตัวนี้เรียบร้อย)

ก็เลยอยากจะพาเพื่อน ๆ มาลองเขียน Wallet ใช้เองกันดู โดยจะเริมตั้งแต่ต้นเลย ใครอยากดูแบบ VDO เพื่อทำตามก็ได้นะครับ อันนี้เลย

Step 1) npm i kulap-libra

mkdir myfirstwallet
cd myfirstwallet
npm init -y
npm install kulap-libra

Step 2) สร้างบัญชี Libra

สร้างไฟล์ index.js จากนั้นเขียนคำสั่งสร้าง Wallet โดยใช้ new LibraWallet()

บรรทัดที่ 2 ทำการโหลด kulap-libra javascript library

บรรทัดที่ 5 เป็นจังหวะการสร้างรหัสลับด้วย Crypto Random เพื่อหาเลขสุ่ม และสร้างออกมาเป็น mnemonic phrase (ชุดคำ 24 คำ ที่เป็นความลับ) ขั้นตอนนี้ยังไม่มีการติดต่อกับ Blockchain แต่อย่างใด ทำให้ไม่มี Internet ก็สร้างได้

บรรทัดที่ 6 เป็นการสร้างบัญชีจาก mnemonic phrase ที่อยู่ใน wallet object โดย account ที่ได้จะประกอบไปด้วย Address, Public key และ Secret key (private key)

ลองรันด้วยคำสั่ง

node index.js

จะได้คำตอบประมาณนี้

{ 
address: '2ebdbe44a375c668d3d83d51adbb4fc118ec3754e6cdb5cae3612d933c7d7b5f',
mnemonic: 'small bring zero feed found angle impose symptom scatter file category fee gentle orient fork gorilla robot van regret luxury almost garage wine illness'
}

หรือถ้าใครรันไม่ได้ ให้แก้ package.json ตรง scripts ตามนี้

"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node index.js"
},

แล้วลอง

npm run start

เย้!! เราสร้าง Libra Wallet เป็นของตัวเองได้ง่าย ๆ แล้ว หากเรารันอีกครั้งก็จะได้ Wallet ใหม่ทุกครั้ง ถ้าอยากใช้ Wallet เดิมต้อง load menmonic phrase เข้าไป ใครสนใจศึกษาเพิ่มเติมได้ที่นี้ครับ https://github.com/kulapio/libra-core

Step 3) รับเหรียญฟรี 1,000 เหรียญจาก Libra Testnet Faucet

ก่อนอื่นต้องลง bignumber.js เพราะต้องใช้ในการแปลง Micro LIB <-> LIB

npm install bignumber.js

- แก้ไฟล์ index.js ตามนี้ เพิ่มส่วน mint เข้าไป

บรรทัดที่ 16 เป็นการสร้าง client เชื่อมไปยัง Libra Testnet

บรรทัดที่ 17 จะเห็นว่ามีการ * 10⁶ เพราะว่าเหรียญ Libra Coins หรือ LIB จะมีทศนิยมทั้งหมด 6 หลัก ถ้าเราสั่งเสกเหรียญ 12 เหรียญ ต้องระบุเป็น 12000000

จะได้คำตอบประมาณนี้

...
mintingResult 188168

** ตัวเลข 188168 เป็นตัวเลข Transaction ID ของคนเสกเหรียญ ไม่ใช่ยอดเงินนะ

ทีนี้เราก็เอา address ของเราไปเช็คยอดเงินที่ https://libexplorer.com/ ด้วยการใส่ address ไปในช่อง search

Libra Explorer with minting

อูฮูยย เราได้เงินแล้ว!! 👼 ง่ายจัง เป็น Dev นี้ดีจริง ๆ ทีนี้เราก็เอาเงินตรงนี้ไปซื้อบ้าน ซื้อรถ กันเถอะ…. เดี่ยว ๆ ตื่น ๆ อันนี้เงิน Testnet ครับ ไม่มีมูลค่าอะไร เพราะเสกให้กันฟรี ๆ ต้องรอ Mainnet อันนั้นแหละเงินจริง (แล้วก็ต้องใช้เงินเราไปซื้อเช่นกัน)

Step 4) เพิ่มโค้ดเช็คยอดเงิน Balance

ดูผ่าน Libra Explorer มันก็ง่ายดี แต่ไม่ geek เราสาย Dev ต้องอ่านด้วยโค้ดสิ งั้นมาเพิ่มโค้ดกัน

บรรทัดที่ 25 ทำการเช็คสถานะล่าสุดของบัญชี address ที่เรากำหนด (เบื้องหลังจะทำการ Update to latest ledger) เราจะได้หลายค่ากลับมา เช่น balance, sequence number, sent/receive events count

บรรทัดที่ 28, 31 ทำการแปลงไปมาระหว่างหน่วย LIB <-> Micro LIB

run แล้วจะได้คำตอบแบบนี้

...
balanceResult 1000

Step 5) สั่งโอนเงิน

การโอนเงินบนโลก Blockchain เราจะใช้ Private key เซ็นคำสั่งโอนเงิน (transaction script) บน client แล้วค่อยส่งผ่านไปยัง Admission Control ผ่าน LibraClient ดังนี้

ผมปรับ บรรทัดที่ 7 ให้โหลดค่าจาก mnemonic phrase ที่เราได้จากจากขั้นตอนก่อนหน้า เราจะได้เข้าถึงบัญชีเดิมทุกครั้งไม่ต้องสร้างใหม่

บรรทัดที่ 11 เพิ่มให้ return account object ออกมาด้วย

บรรทัดที่ 38 เป็น function โอนเงิน โดย ณ บรรทัดที่ 40 ด้านใน lib kulap-libra จะทำการลงลายเซ็นดิจิตอลด้วย private key ของเรา และทำการส่งไปยัง ac.testnet.libra.org (Admission Control ของ Libra Testnet) ให้

บรรทัดที่ 58 ทำการเรียกใช้คำสั่งโอนเงิน โดยระบุ address ผู้รับ ตรงนี้อาจใช้ https://dev.kulap.io/libra/ เพื่อเป็น wallet ผู้รับ กด Receive แล้ว copy address มาใช้ได้ (พอโอนเสร็จ กด refresh เพื่อเช็คยอดเงินเข้า)

ผลลัพธ์

...
balance Before 927.999976
transferResult 0
balance After 915.999976

เย้!! 😄 เราโอนเงินสำเร็จแล้ว และยอดเงินก็ได้ลดแล้ว ทีนี้ก็อย่าลืมลองเช็คที่ผู้รับกันด้วยนะครับ

สรุปส่งท้าย

เราจะเห็นได้ว่าในโลก Blockchain ในทีนี้คือ Libra Blockchain สามารถที่จะเขียนโปรเจคสั่งงาน เพื่อทำระบบ Crypto Wallet ได้ด้วยตัวเอง และเป็น Protocol กลางที่ทุก ๆ โปรแกรมของทุก ๆ คนสามารถที่จะติดต่อสื่อสารกันได้ กล่าวคือ ผมอาจสร้าง Wallet ของตัวเองชื่อว่า Kulap Wallet แล้วเพื่อนผมสร้างชื่อ TonHor Wallet ทั้ง 2 ผู้ให้บริการนี้ไม่เคยคุยกันมาก่อน แต่ก็สามารถส่งเงินหากันได้ เพราะเราใช้ Protocol ในการสื่อสารที่เหมือนกันนั้นเอง

หากใครสนใจที่จะสร้าง Wallet ต่อยอดจาก kulap-libra javascript ตัวนี้ ก็อย่าลืมแบ่งปั่นให้เพื่อน ๆ ใน Libra and Move Developers Thailand ได้ลองเล่นก้นด้วยนะคร้บ และหากให้อยากต่อยอดมากกว่านี้ทางเราจัดคอร์สเรียน Libra Blockchain แบบเต็มวันที่มีเนื้อหาครบถ้วนก็ลองไปดูรายละเอียดกันได้ครับ Build DApps on Libra Blockchain

หากใครชอบบทความ ฝากกดติดตาม Kulap Official กันได้นะครับ ทีมงาน Kulap เราเป็นทีมที่สนใจศึกษาด้าน Blockchain โดยเฉพาะ และกำลังทำ Decentralized Exchange (Dex) กันอยู่ครับ

หมายเหตุ: ขอบคุณพี่ฮ้อ TonHor ที่ช่วยตรวจบทความให้

--

--