สรุปขั้นตอนการติดตั้ง Node Ethereum บน Digital Ocean
แต่ไม่รวมวิธีการทำเหมืองนะ (no mining)
1. เปิดบัญชีกับ Digital Ocean
จะ google หาเว็บ Digital Ocean ก็ได้ แต่สมัครผ่าน link นี้ได้ฟรี 10 USD นะ
2. สร้าง Droplet
Droplet ก็เหมือน Virtual Host ที่เราจะเช่าจากทาง Digital Ocean แต่เรียก VM มันไม่เท่ห์ไงก็เลยเรียกว่า Droplet
- Log in เข้ามาหน้าแรกเมนูด้านขวาใกล้ๆ กับรูปหน้าเราให้กดปุ่ม Create สีเขียวๆ แล้วเลือก Droplet
- เลือก OS เป็น Ubuntu version แนะนำให้เลือก version ที่เค้าจัดมาให้เราแล้ว ตอนที่เขียน Blog นี้อยู่ที่ version 10.04.3 x64
- เลือก Size ขนาด 40 GB, 2 CPU เพราะจากที่ลองแล้ว 20 GB มันไม่พอ sync blockchain
- เลือก datacenter region ตรงนี้แล้วแต่ว่าใครจะเอาไปทำอะไร ผมเลือกที่ Singapore ไปเพราะกลัวว่าเลือกฝั่งเมกาแล้วจะช้าตอนที่ remote เข้าไปติดตั้งโปรแกรม
- ใส่ ssh key จะได้ไม่ต้องมานั่งกรอก password ทุกครั้งที่ remote เข้าไปทำงาน ถ้ายังงงๆ ให้กด New SSH Key จะมีฟอร์มขึ้นมาให้ใส่ key พร้อมกับ link วิธีใช้งาน
- ยังไม่ต้องเพิ่ม Droplet, Hostname จะใส่ก็ได้เผื่อมีหลายๆ เครื่องจะได้จำได้
- นั่งรอ
3. ติดตั้ง parity
พอ Droplet ของเราสร้างเสร็จก็จะมี Notification สีเขียวโผล่ขึ้นมาว่าเสร็จแล้วนะ ที่ console ของเราก็จะมีเครื่องเพิ่มขึ้นมาพร้อมกับแสดง ip ที่เราสามารถ remote เข้าไปติดตั้งโปรแกรมได้ ก็เริ่มลุยกันได้เลย
เปิด terminal หรือ command line ขึ้นมา พิมพ์คำสั่งตามนี้
ssh root@<ip ที่ copy มา>
หลังจากเข้าไปได้ปุ๊ปก็ติดตั้ง parity ด้วยคำสั่งบรรทัดเดียวตามข้างล่างนี้
bash <(curl https://get.parity.io -L)
ผลลัพธ์ที่ได้ก็จะประมาณนี้
หลังจากนั้นก็ลองพิมพ์
parity --version
ถ้าติดตั้งสำเร็จก็จะเห็นเลข version ล่าสุด
4. Sync ข้อมูล Blockchain
ความดีงามอย่างนึงของ parity คือแทบไม่ต้อง config อะไรเลย default config ถูกจัดสรรค์มาให้อย่างดีแล้ว เพียงแค่รันคำสั่ง parity
แล้วก็นั่งจิบกาแฟรอไปสามสี่ชั่วโมงก็แค่นั้นแหละ ทีนี้ถ้าเปิด remote ค้างไว้นานๆ ก็เสี่ยงว่า session อาจจะหลุดได้ ให้รันเป็น daemon mode จะดีกว่า
nohup pairty &
ทีนี้ก็ logout ไปนอนรอได้ หรือถ้าอยากเห็นความคืบหน้าสดๆ ก็ใช้คำสั่ง
tail -f nohup.out
หรือถ้าใครรู้สึกว่ามันไม่คลีนเลยต้องรันเป็น service สิ parity เค้าก็แอบมีให้นะ ลองดูเพิ่มเติมได้ที่นี่
ณ จุดนี้ก็ทำอะไรไม่ได้นอกจากรอ ดู log หรือจะหาข้อมูลเพิ่มเติมก็ได้ว่าทำไม node ของเราจำเป็นต้อง sync data ตั้งแต่ genesis block นะ
สำหรับใครที่อยากจะมี ethereum หลายๆ node ก็ไม่ต้องตกใจ ข้อมูลที่ sync จะถูกเก็บอยู่ที่ path ด้านล่างนี้ สามารถ copy ไปใส่ node อื่นได้ จะไม่ต้องเริ่ม sync ตั้งแต่ block แรก
/root/.local/share/io.parity.ethereum/chains/ethereum/db
ในอนาคตเราน่าจะได้เห็นเทคโนโลยีการ sync block ที่รวดเร็วมากขึ้น เช่นสามารถ sync จาก snapshot ได้ หรือสามารถ run node แบบไม่ sync data ได้ (ถ้าไม่ได้ใช้งาน function ที่จำเป็นต้องตรวจสอบข้อมูลเก่าๆ)
5. เริ่มต้นใช้งาน Node
การมี Node Ethereum เป็นของตัวเองนอกจากเป็นการโชว์ความ geek แล้ว เรายังสามารถใช้ประโยชน์จากมันได้อีกด้วย เช่นใช้เป็นกระเป๋า Ethereum ซึ่งสามารถเก็บเหรียญ Ethereum และเหรียญอื่นๆ ในตระกูล ERC20 ได้ด้วย แต่จะเริ่มใช้งาน Node ได้ต้องให้แน่ใจซะก่อนว่าการ sync ได้สิ้นสุดลงแล้ว วิธีการตรวจสอบง่ายๆ คือดูเลข Block ล่าสุดใน log
2017-09-13 13:49:08 UTC Imported #4269699 50ba…1b55 (66 txs, 6.74 Mgas, 417.53 ms, 12.59 KiB)
เลขหลังเครื่องหมาย # ก็คือ block ล่าสุดที่เรา import เข้ามานั่นเอง ทีนี้เราอาจจะนำเลข block ที่ได้ไปเช็คกับ web etherscan.io อีกที ถ้า block ล่าสุดตรงกัน หรือไม่ห่างกันมากก็เป็นอันว่าใช้งานได้
parity มี interface ให้เข้าใช้งานได้หลากหลายสามารถดูวิธีการใช้งานได้บน wiki ของ parity ในที่นี่จะแนะนำการใช้งานผ่าน JSON-RPC Protocol เห็นชื่อก็อย่าเพิ่งตกใจจริงๆ แล้วมันก็คือๆ กับ Rest API ธรรมดานั่นแหละ เพียงแต่ parity เค้าเปิดช่องให้ทั้งทาง HTTP ทาง WebSocket และทาง IPC Socket วิธีใช้ก็ไม่ยาก แต่อาจจะต้องใส่ option ให้ parity นิดหน่อยเพื่อเปิดใช้งาน api ให้หยุด parity เอาไว้ก่อนด้วยการ kill ทิ้งซะ
รันคำสั่งด้านล่างเพื่อหา id ของ parity process
ps -ef|grep parity
หลังจากนั้นก็ kill
kill <process id>
รัน parity ใหม่อีกครั้งด้วย option เปิดใช้งาน json-rpc api
nohup parity --jsonrpc-apis personal,eth &
เท่านี้เราก็สามารถใช้งาน api: personal และ eth ได้แล้ว
list ของ api ที่ใช้ได้ทั้งหมดสามารถดูได้ที่นี่
หลังจาก process run แล้วทดลองใช้งาน api เพื่อสร้างกระเป๋าด้วยการรันคำสั่ง curl
และส่ง parameter ที่เป็นรหัสของกระเป๋าเข้าไป ในตัวอย่างใช้เป็น hunter2
curl --data '{"method":"personal_newAccount","params":["hunter2"],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545
ก็จะได้กระเป๋า ethereum ใหม่กิ๊งมา
หรือจะลองดูเลข block ล่าสุดก็สามารถทำได้ด้วยคำสั่งนี้
curl --data '{"method":"eth_blockNumber","params":[],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545
ก็จะได้ response มาแบบนี้
{“jsonrpc”:”2.0",”result”:”0x4126a1",”id”:1}
เลขที่ใช้ในการรับส่งข้อมูลบน JSON-RPC จะเป็นเลขฐาน 16 ทั้งหมด จากในตัวอย่างเมื่อแปลงเป็นเลขฐานสิบก็จะเป็นเลข Block 4269729 นั่นเอง
จ.บ.
ป.ล. ถ้าชอบบทความนี้และอยากให้กำลังใจผู้เขียนสามารถบริจาคเหรียญ Ethereum ได้ที่ Address นี้ครับ
0xF02f7881357F98a11a3e9A6873F13842E7A1bAb4
ถ้าอยากบริจาคแต่ไม่รู้จะซื้อ Ethereum จากที่ไหนแนะนำให้เปิดบัญชีที่ bx.in.th ครับ