สร้าง Hornet IOTA (Full Node) ด้วย Docker container บน Cloud (Step by Step)

โพสบทความนี้เกี่ยวกับผู้ที่สนใจ Blockchain และเทคโนโลยี Distributed Ledger และ Token ต่างๆ เพื่อไม่ให้เป็นการเสียเวลาไปเริ่มกันเลย (คำเตือน: เกริ่นยาวก่อนเข้าเนื้อหาสาระการ Deploy ฮ่าๆๆๆ)

Blockchain เทคโนโลยีที่มี Concept ตั้งอยู่บน “บัญชีธุรกรรมอิเล็กทรอนิกส์” หรือที่เรียกกันว่า Ledger และถูกเก็บไว้ในเครื่องคอมพิวเตอร์เซิร์ฟเวอร์ ที่เรียกว่า “โหนด” Node อีกทีครับ.โดยที่และแต่ละ Node จะมีสำเนาบัญชีธุรกรรมของตัวเอง และบัญชีนี้จะถูก “กระจายศูนย์” (Distributed คือถูกก๊อปปี้ไปอยู่ในทุกๆ Node ในเครือข่าย ข้อมูลเหล่านี้จะได้รับการยอมรับ ปลอดภัยเชื่อถือได้ โดยไม่ต้องผ่านคนกลาง

IOTA network (MIOTA) มี Concept เครือข่ายที่แตกต่างจากระบบเครือข่าย Blockchain แต่ก็มีความคล้ายกันในเรื่องของ ledger store data (Distributed Ledger protocol) โดยตัว IOTA จะใช้อุปกรณ์ Internet of Things (IoT) ทั่วไปๆ นี่แหละครับ มาเป็น Node ให้การยืนยัว transaction ก็คือพวกอุปกรณ์ที่เชื่อมต่ออินเทอร์เน็ตได้ เช่น Smartphone, SmartTV, อื่นๆ มาเป็นตัวช่วยในการ verify transaction หรือตรวจสอบการทำธุรกรรมบนเครือข่าย IOTA network.

IOTA is an open-source distributed ledger protocol that goes “beyond blockchain” through its core invention of the blockless "Tange“.
No! Fees on the transaction, No! Fixed limit on the transaction, Faster the network and
Unlike! Blockchain architecture.

IOTA เปิดตัวเครือข่าย IOTA mainnet ครั้งแรกในเดือนมิถุนายน ปี 2559 ด้วยแนวคิดออกแบบระบบเพื่อปฏิวัติ Blockchain โดย IOTA เป็นรายแรกที่ใช้แนวคิด Distributed ledger แต่เป็นบัญชีแยกประเภทแบบกระจาย ที่ใช้ทฤษฎีกราฟอัลกอริธึม DAG (directed acyclic graph) ทำให้ IOTA network ทำงานได้แบบ lightweight protocol ที่เบา, ต้นทุนต่ำ, ใช้พลังงานต่ำ IOTA เรียกเจ้าสิ่งนี้ว่า “The Tangel”

Tangel ได้รับการออกแบบให้ทุกโหนดในเครือข่ายเท่าเทียมกันเป็นเครือข่ายที่เป็นประชาธิปไตยและปลอดภัย โดยทุกโหนดมีส่วนร่วมโดยตรงต่อระบบความปลอดภัยของระบบ IOTA

กราฟอัลกอริธึม DAG (directed acyclic graph) ทฤษฎีกราฟแบบมีทิศทาง ที่ไม่มี Cycle อยู่ข้างใน ดังนั้นใน DAG จะต้องไม่มีเส้นทางเดินที่ย้อนกลับมาทางเก่าได้ เรียกว่าเมื่อเลือกเดินทางใดทางหนึ่งแล้วจะได้เส้นทางเดียว

credit image: acycle graph / DAG

IOTA network เป็นระบบที่เบื้องหลัง(ไม่ใช่)เทคโนโลยี Blockchain!

อย่างที่ทราบกันดีว่า Bitcoin ถูกสร้างมาโดยใช้เทคโนโลยี Blockchain แต่ IOTA ไม่ได้สร้างจาก BLOCKCHAIN.

IOTA ถูกพัฒนาและได้รับการสนับสนุนจาก IOTA Foundation เป็นองกรณ์ไม่แสวงหากำไร ตั้งอยู่ที่ประเทศ เยอรมัน มี Co-founder ด้วยกัน 4 คน คือ Sergey Ivancheglo, Serguei Popov, Dominik Schiener และ David Sønstebø อดีต CEO บริษัท Stealth hardware ซึ่งเป็นบริษัท Startup ในด้าน ultra low power processor ในตลาด internet of things และปัจจุบันเขาดำรงตำแหน่ง Chairman และเป็นผู้ก่อตั้ง IOTA foundation.  

IOTA Foundation, c/o Nextland, Straßburger Straße 55, 10405 Berlin, Germany
Board of Directors: Dominik Schiener, Serguei Popov & Navin Ramachandran
ID/Company No.:3416/1234/2
EU public ID number in the EU Transparency Register: 500027331119-04

Full Node คืออะไร?

Full Node เป็นเครื่อง Node ที่รันโหนดซอฟต์แวร์ (Hornet) สำหรับใช้ในการโหลดข้อมูลของ IOTA ทั้งหมดมาเก็บไว้ที่ตัวเครื่องคอมพิวเตอร์หรือเซิร์ฟเวอร์และทุก Node จะเชื่อมต่อกันทั้งหมด แต่ละเครื่องคุยกันได้เอง โดยซอฟต์แวร์ (Hornet) และ IOTA จะกำหนดวิธีการที่ Node คุยกันแล้วตกลงกันบันทึกข้อมูลลง Node เรียกว่า Consensus Protocol

แล้ว IOTA Foundation เป็นใคร?

IOTA Foundation มูลนิธิผู้ดูแลเครือข่ายเงินคริปโต IOTA

IOTA แตกต่างจาก Blockchain ยังไง?

IOTA network เหมือนกับ Blockchain ตรงที่ใช้ระบบแนวคิด Ledger (Distributed Ledger Technology) คือการกระจายข้อมูลตัว Ledger หรือ Transaction ให้กับทุก Node ในเครือข่าย IOTA แบบกระจายศูนย์ โดยไม่จำเป็นต้องมีคนกลางในการเก็บข้อมูล (ทุก Node ถือข้อมูลที่เหมือนกันทั้งหมด) และ Blockchain ยังเป็น Public Ledger ที่เปิดเผยเลขบัญชี (Address) และรายการเดินบัญชีสาธารณะ (Public Ledger) คือเปิดเผยทุกข้อมูลการเดินบัญชี (transaction) และมี consensus algorithms ใน DLTs แบบ PoW, PoS เป็นต้น และแอปพลิเคชั่นตัวแรกของโลกที่สร้างบน Blockchain technology ก็คือ Bitcoin

ซึ่งปัจจุบัน blockchain applications ก็พัฒนาจาก cryptocurrency เพิ่มความสามารถมาเป็น voting system, smart contracts เป็นต้น

และสิ่งที่ IOTA มี Concept ต่างจาก Blockchain คืออะไร?

  1. Scalable (lightweight IOTA node)
    ในเรื่องของความยืดหยุ่น (Scalability) ในระดับรองรับอุปกรณ์ IoT ได้ นั้นแสดงถึงการทำงาน ของ Lightweight node ที่เบา และใช้พลังงานต่ำสุดๆ สำหรับการเชื่อมต่อไปยัง Network (มันก็จริง! ไม่งั้นคงไม่สามารถรันบน IoT ได้)
  2. Zero fees
    ค่าธรรมเนียมน้อยมาก(จะว่าฟรีก็ได้ คือไม่ต้องเสียค่าธรรมเนียม)
  3. Faster transaction times
    IOTA แก้ปัญหา ที่ Blockchain กำลังเผชิญอยู่ คือด้าน inefficiencies คือส่ง transaction ช้า เพราะ transaction ต่อรอคิวจ่อต่อกันลง Block แล้วปิดถึงเอา Block ไปต่อเป็น Chain (รอซื้อ รอราย ที่สมบูรณ์ 55++), และค่าธรรมเนียมที่สูง (transaction โอนหรือส่งเหรียญ) ทำให้ IOTA พัฒนาเทคโนโลยีใหม่ (เรียก Concept ใหม่ดีกว่า) ชื่อ Tangle ขึ้นมาครับ

แต่สิ่งหนึ่งที่ IOTA กับ Blockchain เหมือนกันคือ ข้อมูล transaction ที่บันทึกไปแล้วจะไม่สามารถแก้ไขได้ ซึ่งเป็นการเพิ่มความน่าเชื่อถือของข้อมูล transaction นั้น และระบบ IOTA และ Blockchain ไม่เก็บยอดเงินแต่จะเก็บเป็นรายการ transaction หรือข้อมูลการเดินบัญชีทั้งหมดไว้ใน Node แทน

แล้วจะรู้ได้ยังไงว่า Transaction ถูกต้อง?

ตาม whitepaper version 1.4.3 (30 April 2018)
IOTA เป็น Centralized ไม่ใช่ Decentralized โดย Tangle มีปลั๊กอิน Node (Coordinator) ที่คัดเลือกหรือแต่งตั้งขึ้น แล้วมาเป็นคนตรวจสอบ (checkpoint valid transactions) ว่า transaction ไหนเพี้ยนๆ ผิดปกติ มีแนวโน้มเป็น attacker หรือไม่ แต่ถ้า transaction ไหนถูกต้อง ตัว Coordinator node ก็จะทำการประทับตรา Stamp ลงไป (3 ผ่าน นั้นมันรายการทีวีล่ะ 55++) โดย Stage ของมันจะเรียกว่า Milestone ซึ่งมีหน้าที่ในการอนุมัติ (Approve) และเป็นตัวอ้างอิจหรือ Reference

ยังไม่จบ! อย่าที่บอกไป IOTA เป็น Centralized ไม่ใช่ Decentralized และแล้วก็เกิดข้อครหา “ความไว้เนื้อเชื่อใจ” ที่ถกเถียงกันขึ้นเพราะ IOTA ไม่มีความเป็น Decentralized เนื่องจาก Node ที่เป็น Coordinator มีการคัดเลือกหรือแต่งตั้งขึ้น คือ Node นั้นได้รับการยอมรับว่าเชื่อถือได้ ซึ่งปัจจุบัน IOTA ออกอัพเกรด IOTA 2.0 (Coordicide) มาแล้วอ่านได้ที่นี่

แล้ว Coordinator คือใคร?

Coordinator คือ IOTA network node ที่ operate ดำเนินการโดย IOTA foundation ที่ออกและกำหนดอัตรามูลค่าที่เป็น zero-valued milestone โดยที่ transaction ที่มีการอ้างอิจกับ milestone ถือว่าได้รับการยืนยันธุรกรรมแล้ว! ฉะนั้นธุรกรรมใดๆ หรือ Transaction ที่ไม่ได้อ้างอิงไปยัง milestone จะถูกว่า Not confirmed (ธุรกรรมที่ไม่สำเร็จ)

พร้อมแล้ว? Smart Contract: IOTA เฟส Alpha

Jakub Cech ผู้อำนวยการฝ่ายวิศวกรรมของ IOTA ได้เผยแพร่การอัปเดตเดือนกุมภาพันธ์ปี 2021 ของ IOTA ซึ่งรวมถึงความสำเร็จทั้งหมดของการติดตั้ง Chrysalis เฟส 2 ที่ปูทางไปสู่ Coordicide โดย Coordicide เป็นการอัปเกรดโปรโตคอลที่เอาไว้ลบผู้ประสานงานส่วนกลางของเครือข่ายและเปิดใช้งานแบบกระจายอำนาจอย่างแท้จริง!

Smart Contract เฟส Alpha ของ IOTA

แนวคิดพื้นฐานของระบบ IOTA แล้ว Tangle คืออะไร?

credit image: forex.academy

Tangle จะใช้หลักของการต่อกันเป็นจุดๆ โดยเอา Transaction ไปต่อๆ กัน โดยเอา Transaction ที่เกิดขึ้นใหม่ไป verify ด้วยวิธีไปเช็คกับ Transactions อันเก่า (ให้นึกถึงรูปสามเหลี่ยมที่มีมุม 3 มุมต่อกัน) โดยใช้ Concept ที่เรียกว่า DAG (Directed Acyclic Graph) ทำให้ตัวระบบ TOTA สามารถ Scalable ได้อย่างง่าย ส่วนในเรื่องของ consensus protocol ดูเพิ่มเติมที่นี้ cellular consensus และ probabilistic consensus รวมถึงเรื่อง Security แนวคิดการป้องการ Node (Parasite Chain Detection) เรื่อง Double spending transaction/Brute Force เป็นต้น

Parasite chain attack

IOTA network ไม่ใช่ Bitcoin, Blockchain!
ไม่จำเป็นต้อง Mining แข่ง verify Transaction

เกริ่นมาซะยาว เมื่อไหร่จะเข้าสู่การ Deploy Hornet IOTA Full Node ตามจั่วหัว 55++ ก่อนจะไป Deploy Node เราก็ต้องไปรู้กันก่อนว่ามีซอฟต์แวร์อะไรบ้างที่ใช้รันเพื่อเป็น Full Node บน IOTA network ครับ

รายชื่อซอฟต์แวร์โหนดสำหรับ IOTA network

  • Hornet เป็น full-node ซอฟต์แวร์โหนดรุ่นใหม่ของ IOTA ที่ป้องกันสแปมได้ Hornet เขียนด้วยภาษา Go รัน Node ทำหน้าที่เพื่อตรวจสอบความถูกต้องของธุรกรรมบน IOTA network รองรับทั้ง Linux, Raspberry Pi, macOS, Windows และ Docker container (Docker Compose และ Docker image)
  • Chronicle เป็นซอฟต์แวร์ส่วนขยายของซอฟต์แวร์โหนด Hornet
  • GoShimmer เป็นซอฟต์แวร์โหนดต้นแบบของ Coordicide ที่เป็น Plugin เอาไปสร้าง Hornet node แบบ Private Tangle (private testnet หรือคัดเลือกแต่งตั้ง Node ขึ้นมาเลย)
  • IRI เป็น IOTA Mainnet
  • และ Bee เป็นซอฟต์แวร์โหนดสำหรับการอัปเดต Chrysalis

IOTA เหรียญระบบชื่อ IOTA Cryptocurrency
(IOTA token)

ไปเริ่มติดตั้ง Node กันเลยครับ

Deploy Hornet IOTA Full Node ด้วย Docker container บน Cloud

Step 1: สร้าง Environment

ไหนที่นี้ผู้เขียนใช้แพลตฟอร์ม PaaS จาก Ruk-com Cloud เพื่อทำการติดตั้ง IOTA Node application
ซึ่ง Stack ตัว Hornet Docker image จะประกอบด้วยซอฟต์แวร์
Docker, Nginx และ Certbot(Letsencrypt)

แต่หากเราใช้ Docker Compose สามารถ Define Stack เพิ่มเติมในไฟล์ docker-compose.yml ได้เช่น build ซอฟต์แวร์เข้าไปเพิ่ม อย่าง Prometheus, Alertmanager และ Grafana
เลือก Node ซอฟต์แวร์ที่จะติดตั้งสำหรับ IOTA network

Step 2: ติดตั้ง Stack Hornet จาก Marketplate

ติดตั้ง IOTA Node application

Hornet node ที่รันด้วย Docker container ตัวเซอร์วิส Hornet จะสตาร์ทอัตโนมัติอยู่บน Mainnet
และเมื่อ Hornet สตาร์ทมันจะดาวน์โหลดธุรกรรมและจัดเก็บธุรกรรมในไดเรกทอรี MainnetDB (/root/hornet/mainnetdb)

Step 3: ตรวจสอบ Hornet synchronize…

หลังจาก Deploy เสร็จ ให้เปิด web browser <IP Addaress> เพื่อเข้าสู่ Hornet dashboard
ถ้าตัวเลขฟิลด์ latestMilestoneIndex (LMI) เท่ากันกับฟิลด์ latestSolidSubtangleMilestoneIndex (LSMI) แปลว่า synchronized Hornet node สำเร็จ และพร้อมตรวจสอบความถูกต้องของธุรกรรม

Hornet Node Dashboard

ถัดไปก็ลอง Send transaction หรือส่ง/รับ เหรียญ IOTA (Transfer IOTA token) ดูครับแล้วตรวจสอบธุรกรรม (transaction) ที่ Tangle explorer

ข้อจำกัด Hornet

Hornet มีหน้าที่เพียงรับธุรกรรมและบันทึกลงใน Ledger (บัญชีแยกประเภท) และ Hornet ไม่ได้มีหน้าที่เพื่อสร้างหรือลงนาม (sign transaction) ในธุรกรรมใดๆ ทั้งสิ้น กระบวนการสร้างหรือลงนามธุรกรรม (sign transaction) ต้องทำผ่านซอฟต์แวร์กระเป๋าเงินดิจิทัล Wallet ไคลเอ็นต์ เช่น แอปพลิเคชั่น Trinity เป็นตัวส่งธุรกรรมไปยัง Node อีกทีครับ

วิธีเพิ่ม Static neighbor ให้กับ Hornet Node ของเรา

แต่ถ้าต้องการใช้ปลั๊กอินเปิดเผย IP address นี้ไปยัง Node ทั้งหมด แนะนำให้เพิ่ม 1-2 Static Peers คือการที่เครื่องคอมพิวเตอร์ หรืออุปกรณ์ IoT แต่ละเครื่องของผู้ใช้ในระบบ (IOTA Network) สามารถคุยกันเองได้

vi /root/hornet/peering.json
{
  "acceptAnyConnection": false,
  "maxPeers": 5,
  "peers": [
    {
      "identity": "IP ADDRESS:15600",
      "alias": "ContainerNode1",
      "preferIPv6": false
    },
    {
      "identity": "IP ADDRESS:15605",
      "alias": "ContainerNode2",
      "preferIPv6": false
    }
  ]
}

โดยค่าเริ่มต้น Hornet จะใช้พอร์ต 15600 สำหรับ Static neighbor แต่ไม่ใช่ทุกโหนดที่จะ listening รอรับฟังที่พอร์ต 15600 นี้นะครับ

Autopeering Plugin (Autopeering Entry Node) คืออะไร?

Autopeering การทำงานของปลั๊กอินนี้จะเปิดเผย IP address แบบสาธารณะไปยัง Node ทั้งหมด ที่เรียกว่า Entry Node ทำให้ Node อื่นๆ จะเห็น IP address ที่แท้จริงของเรา) สามารถดูรายชื่อ Plugin สำหรับ Hornet อื่นๆ ได้ที่นี่)เช่น Spammer, Prometheus, Dashboard และ Coordinator เป็นต้น

แต่ถ้าไม่ต้องการ เราสามารถปิดการใช้ปลั๊กอินนี้ได้โดยเพิ่ม disablePlugins ในไฟล์ config.json

ถัดไปแก้ไขไฟล์คอนฟิก Hornet (config.json)

vi /root/hornet/config.json
"node": {
"disablePlugins": ["Autopeering"],
"disablePlugins": []
},

ดูวิธีการคอนฟิก Autopeering Entry Node สำหรับเป็น Hosting public entry node
สามารถดูเพิ่มเติมได้ที่นี่ [1], [2]

คำเตือน: หากต้องการรัน Node เป็น Host node สำหรับเครือข่ายสาธารณะ (public network) เช่น mainnet สิ่งที่ควรพิจารณาคือ ควรมีประสบการณ์ด้าน server และ security ครับ

​วิธีคอนฟิก Autopeering entry node แบบกำหนดเอง

1. สร้าง autopeering seed key

กรณีที่เราอยู่บน Docker host (Docker Engine CE)

docker exec -it hornet_hornet_1 /bin/sh

พิมพ์คำสั่ง seedgen (Hornet’s built-in เครื่องมือนี้มาให้อยู่แล้ว)

$ ./hornet tool seedgen

Seedgen เป็นเครื่องมือใช้สำหรับ Genrate Seed บน IOTA network.

ตัวอย่าง Seed key

Your autopeering seed:  YOUR9ENTRY9NODE9SEED9HERE*******************Y

หรือจะเข้าผ่าน SSH ไปยัง gate.manage ก็ได้เช่นกัน จากนั้นก็เลือก environment แล้วเลือก Docker Engine CE -> container ที่ต้องการเข้าถึงได้เลยครับ

เพิ่ม Seed ในไฟล์คอนฟิก

2. Switch “on” the autopeering mode

vi hornet/config.json

ค้นหาคำว่า network จะเจอบรรทัดข้อความประมาณนี้
runAsEntryNode” เปลี่ยนจาก flase ให้เป็น true
และ seed ก็นำ seed key ของคุณมาใส่

...
"network": {
    ...
    "autopeering": {
        "bindAddress": "0.0.0.0:14626",
        "runAsEntryNode": true,
        "seed": "YOUR9ENTRY9NODE9SEED9HERE"
    }
}
...

Hornet Node ทั้งหมดสามารถสื่อสารกันได้ผ่านทางพอร์ต 14626 นี้ แต่บางสถานการณ์จะแตกต่างหาก Node อื่นๆ กำหนดพอร์ตเฉพาะเช่น 15600 เป็นต้น

จากนั้น Restart (reload container)

3. ดู Log messages ใน Container

หลังจาก Container สตาร์ทขึ้นมา เมื่อดู logs จะพบ node public key แสดงในไฟล์ log (ค้นหาคำว่า PublicKey)

หรือ export logs message ออกมาเป็นไฟล์

docker logs -f hornet_hornet_1 > logs.txt
INFO    Autopeering     Autopeering started: ID=a0ba6bf62d6fe911 Address=0.0.0.0:14626/udp PublicKey=YOUR9ENTRY9NODE9SEED9HERE

​​รูปแบบคำสั่ง docker service logs [OPTIONS] SERVICE|TASK​
เช่น ​แสดง logs ​ที่บันทึกเวลา ​(​timestamp​) ใน 3นาที ที่แล้ว (–since 3m) 

docker logs --since 3m hornet_hornet_1

แสดง logs message 10 บรรทัดสุดท้าย

docker logs --tail 10 hornet_hornet_1

​ในที่นี้ Node อื่นๆ บน Local network ของเรา เราสามารถใช้ public key นี้เพื่อ connect กับ Entry Node ได้เลย

​​วิธีเพิ่ม entry node (ให้กับ Node อื่นๆ ใน local network เรา)

​โดยค่าเริ่มต้น Hornet จะเชื่อมต่อกับโหนดชุมชน (Community IOTA และ IOTA Foundation) ในการเชื่อมต่อกับโหนดแบบกำหนดเอง ให้เพิ่มแอดเดรสลงในฟิลด์ entryNodes ในไฟล์คอนฟิกูเรชัน config.json

โดยกำหนดรูปแบบ Entry nodes’ addresses จะเป็นดังนี้
Your entry node address is <PublicKey>@<your-domain.tld>:<autopeering-port>

ถัดไปก็เพิ่ม entry node address เข้าไปในไฟล์คอนฟิก config.json

ตัวอย่าง:

"entryNodes": [        
"npLI53UCxBvOJaV0xv/mzWuV+f+pduc6GzE83jM/[email protected]:14626"
],

Logs nitialized local: peer

021-04-17T07:47:52ZINFOCLILoading plugins ...
2021-04-17T07:47:52ZINFONodeLoading Plugin: CLI ... done
2021-04-17T07:47:52ZINFONodeLoading Plugin: Graceful Shutdown ... done
2021-04-17T07:47:52ZINFONodeLoading Plugin: Profiling ... done
2021-04-17T07:47:52ZINFONodeLoading Plugin: Database ... done
2021-04-17T07:47:52ZINFONodeLoading Plugin: Curl ... done
2021-04-17T07:47:52ZINFOLocalInitialized local: peer://3sZNUznmSBgrZ************[email protected]:14626
2021-04-17T07:47:52ZINFONodeLoading Plugin: Autopeering ... done
2021-04-17T07:47:52ZINFONodeLoading Plugin: WebAPI ... done
2021-04-17T07:47:52ZINFONodeExecuting plugins ...
2021-04-17T07:47:52ZINFONodeStarting Plugin: CLI ... done
2021-04-17T07:47:52ZINFONodeStarting Plugin: Graceful Shutdown ... done
2021-04-17T07:47:52ZINFONodeStarting Plugin: Profiling ... done
2021-04-17T07:47:52ZINFONodeStarting Plugin: Database ... done
2021-04-17T07:47:52ZINFONodeStarting Plugin: Curl ... done
2021-04-17T07:47:52ZINFONodeStarting Plugin: Autopeering ... done
2021-04-17T07:47:52ZINFOWebAPIStarting WebAPI server ...
2021-04-17T07:47:52ZINFONodeStarting Plugin: WebAPI ... done
2021-04-17T07:47:52ZINFONodeStarting background workers ...
2021-04-17T07:47:52ZINFOCurlStarting Curl batched hashing ... done
2021-04-17T07:47:52ZINFOWebAPIStarting WebAPI server ... done
2021-04-17T07:47:52ZINFOWebAPIYou can now access the API using: http://0.0.0.0:14265
2021-04-17T07:47:52ZINFOAutopeering

2021-04-17T07:47:52ZINFOAutopeeringsalt updated; expires=17 Apr 21 08:17 UTC
2021-04-17T07:47:52ZINFOAutopeeringstarted: ID=5DVKWUDrxVa Address=YOUR-IPADDRESS:14626/udp PublicKey=3sZNUznmSBgr***************TJpm9PuXYHcRBDN
2021-04-17T07:48:04ZINFOAutopeeringdiscovered: 65.21.53.251:14626 / 5NGz5iexvyh
2021-04-17T07:48:10ZINFOAutopeeringdiscovered: 188.68.37.41:14626 / YZAm37LxTLa
2021-04-17T07:48:13ZINFOAutopeering[incoming peering] whitelisting 173.249.11.104:15600 / 5Jauo7FA5Wu

แล้วถ้า Node เชื่อมต่ออินเทอร์เน็ตไม่ได้ จะทำงานยังไง?

ไม่เป็นประเด็นครับ เมื่อเครื่องเชื่อมต่อเน็ตได้ ระบบ IOTA ก็จะอัปเดต Transection ให้เป็นข้อมูลล่าสุดเอง โดย node software (Hornet) จะซิงค์ข้อมูลใหม่อัตโนมัติเอง

คำสั่งอื่นๆ ที่จำเป็น!

คำสั่งตรวจสอบ container ที่รันอยู่

docker ps

คำสั่งตรวจสอบ Log message Hornet node

docker logs --follow CONTAINERNAME

คำสั่ง Export Log ไฟล์

docker logs CONTAINERNAME > log.txt

วิธี Delete local database! กรณี Node ไม่ sync (Node out of synch on MAINNET)

rm -rf /root/hornet/export.bin
rm -rf /root/hornet/mainnetdb

Create Address: ขั้นตอนการทดสอบ Transfer IOTA Token บน Devnet

1. สร้าง Seed (หรือ Private key)

IOTA Address จะถูกสร้างจาก Private key (Seed) ซึ่ง Seed สามารถสร้างได้จากฝั่ง client-side เช่น Browser หรือ Computer โดย IOTA จะเขียนลายเซ็นแบบครั้งเดียวลงบน Address (เหมือนเซ็นใน Bookbank นั้นแหละครับ)

*การใช้ Seed ซ้ำ! สามารถนำไปสู่การปลอมลายเซ็นและอาจทำให้สูญเสียเงินในกระเป๋าได้ (Address)

วิธี Generate Seed บน Linux พิมพ์คำสั่งนี้ได้เลย เดี๋ยวมัน random ให้เอง

cat /dev/urandom |tr -dc A-Z9|head -c${1:-81}

จากนั้นก็ Backup seed เก็บรักษาไว้ยิ่งชีพ!

2. Transfer IOTA token

เมื่อได้ Seed key แล้วให้ Generate Address (IOTA account) ขึ้นมา 2 Address เพื่อใช้ในการทดสอบ

และเมื่อได้ Address กับ Private key มาแล้วเราก็ไปลอง Transfer ได้เลยครับ

สร้างไฟล์ JavaScript (แทน seed ด้วย key ของคุณ)

const Iota = require('@iota/core');
////////////////////////////////////////////////
// Generate an address
////////////////////////////////////////////////

const Iota = require('@iota/core');

// Connect to a node
const iota = Iota.composeAPI({
  provider: 'https://nodes.devnet.iota.org:443'
});

// The seed that will be used to generate an address
const seed =
  'PUETPSEITFEVEWCWBTSIZM9NKRGJEIMXTULBACGFRQK9IMGICLBKW9TTEVSDQMGWKBXPVCBMMCXWMNPDX';

// Define the index of the address
let index = 0;

// Define the security level of the address
const securityLevel = 2;

// If any address is spent, this method returns the next unspent address with the lowest index
iota.getNewAddress(seed, { index: index, securityLevel: securityLevel, total: 2 })
  .then(address => {
    console.log('Your addresses are: ' + address);
  })
  .catch(err => {
    console.log(err)
  });

3. Run the code

สามารถใช้ REPL.it tool รัน code ได้เลย

ถัดไปก็เทสส่ง IOTA ให้ตาม Address ได้เลยครับ
(แก้ไข Node Address เป็น Node ของเราเอง และ const seed)

4. Send IOTA token

แล้วจะเอาเหรียญ IOTA token จากไหนล่ะมาส่ง?? 55++
ไปขอฟรีได้ที่ official Devnet faucet แล้วทำตามขั้นตอนครับ **ได้มา 1000 i ** เย้ ๆๆๆ

devnet

สามารถใช้ REPL.it tool รัน JavaScript code ข้างล่างนี้ได้เลย โดยทดสอบโอน 1000 i (Test บน Devnet)

////////////////////////////////////////////////
// Send a microtransaction
////////////////////////////////////////////////

const Iota = require('@iota/core');
const Converter = require('@iota/converter');

// Connect to a node
const iota = Iota.composeAPI({
  provider: 'https://nodes.devnet.iota.org:443'
});

// Define the depth that the node will use for tip selection
const depth = 3;
// Define the minimum weight magnitude for the Devnet
const minimumWeightMagnitude = 9;

// Replace this seed with the one that owns the address you used to receive test tokens 
const seed =
  'PUETPSEITFEVEWCWBTSIZM9*************9IMGICLBKW9TTEVSDQMGWKBXPVCBMMCXWMNPDX';

// Create a wrapping function so you can use async/await
const main = async () => {

  // Define an address to which to send IOTA tokens 
  const receivingAddress = "CHMZRJOHZ9VMVMRGPBVELEC*************KICGHPEYESDKZJSPRASKKQ9VTDQXRXIJGVMCQTHJJZ";

  // Define an input transaction object
  // that sends 1 Ki to your new address
  const transfers = [
    {
      value: 1000,
      address: receivingAddress
    }
  ];

  console.log('Sending 1 Ki to ' + receivingAddress);

  try {
    // Construct the bundle and sign your input transactions
    const trytes = await iota.prepareTransfers(seed, transfers);
    // Send the transactions to the node
    const response = await iota.sendTrytes(trytes, depth, minimumWeightMagnitude);

    console.log('Bundle sent');
    response.map(tx => console.log(tx));
  } catch (error) {
    console.log(error);
  }
}

main();
Send IOTA tokens

เย้ ๆๆๆ ได้มาล่ะ 2000 i เมื่อเสร็จสิ้นเราสามารถตรวจสอบ transaction ให้ไปดูได้ที่ Explorer Devnet (ไม่ใช่ Mainnet นะจ๊ะ)

Transfer IOTA tokens

วิธีสร้างกระเป๋าเงิน Trinity wallet
(ใช้จริง! IOTA mainnet)

เรื่องของ Wallet ก็เหมือนกันกับพวกแอป MetaMask, SafePal, Station อื่นๆ ที่สร้างอยู่บน Network ของตนเอง ต่างกันเพียงแต่แอปกระเป๋าเงิน Trinity waller สร้างอยู่บน IOTA network เท่านั้นเอง

ลงแอป trinity ที่พัฒนาโดย IOTA Foundation เอง โดยไปดาวน์โหลดติดตั้งแอปพลิเคชันได้ที่ Official IOTA wallet และสามารถซื้อเหรียญ TOTA และเทรดได้ที่ Binance (สมัครเปิดบัญชี Binance) จากนั้นจะเก็บเงินไว้กับ Centralized exchanges หรือจะโอนออกมาเก็บที่กระเป๋าเงิน Trinity waller ของเราเองก็ได้เช่นกัน.

Firefly wallet (IOTA’s Next Generation Wallet) *Chrysalis testnet

ล่าสุดทาง MIOTA เตรียมออกกระเป๋าเงินใหม่ในชื่อ Firefly wallet เป็น Waller ที่พัฒนาเขียนด้วย Rust และนำเสนอในเรื่องการตรวจสอบความปลอดภัย (สามารถทดสอบได้บน Chrysalis testnet) ซึ่งในเบื้องต้น ไวท์แฮดจะทดลองใช้ลักษณะด้านความปลอดภัยและความเป็นส่วนตัวของ desktop version. นอกจากนี้ IOTA ยังประกาศความมือทางเทคนิดกับเจ้าพ่อซอฟต์แวร์อย่าง Dell ใน Project Alvarium และเราน่าจะได้เห็น IOTA’s ecosystem ครบวงจรในเร็วๆ นี้

Firefly wallet beta release
Firefly’s Dashboard in Dark Mode
Chrysalis testnet

ดาวน์โหลด Firefly Wallet (Desktop version)

สามารถดาวน์โหลดแอปพลิเคชั่น Firefly Waller รุ่น Beta ได้ที่ MacWindows และ Linux. ดู Releases note

ปัจจุบันเหรียญ IOTA มีราคาอยู่ที่ 2.2657 ดอลลาร์* และมีมูลค่าตลาดถึง 39 ล้านดอลลาร์

*อ้างอิจราคาตามตลาด Binance

สุดท้าย (1) บทความนี้เป็นเพียงเบื้องต้นของการติดตั้ง IOTA Full Node เท่านั้น ยังมีรายละเอียดทั้งในด้าน Security และการประยุกต์ใช้ อีกมากมาย ผู้เขียนหวังว่าบทความนี้จะเป็นประโยชน์สำหรับผู้อ่านได้ไม่มากก็น้อยนะครับ หากอ่านแล้วเป็นประโยชน์ช่วยแชร์บทความนี้ให้เพื่อนๆ เราได้อ่านกันด้วยนะ ^^

อ่อๆๆๆ ลืมบอกไป ปัจจุบัน Cloud provider ที่สามารถติดตั้ง Hornet ได้แบบ 1-Click ผ่าน Marketplace เช่น AWS, DigitalOcean และ Ruk-com Cloud ครับ.

สุดท้าย (2) สุดท้ายจริงๆ ไม่มีอีกแล้ว 55++ หากผิดพลาดประการใดผู้เขียนก็มือใหม่เช่นกันครับ

IOTA เตรียมอัพเกรดเครือข่าย (token migration) ย้ายโปรโตคอลไปเป็น Chrysalis ทั้งหมด และจะเปิดตัวใช้ IOTA mainnet on Chrysalis ในวันที่ 28 เมษายน นี้!

คำปฏิเสธ

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

เนื้อหานี้ได้อ่าน ความคิดเห็น และข้อความที่แสดงในที่นี้เป็นของผู้เขียน โปรดรับทราบว่าการลงทุนของคุณอยู่ในความเสี่ยงของคุณเองและการสูญเสียใดๆ ที่คุณอาจต้องรับผิดชอบนั้นเป็นความรับผิดชอบของคุณ ครับ

Source:
[1] https://github.com/gohornet/hornet/wiki
[2] http://goshimmer.docs.iota.org/tutorials/setup.html
[3] https://docs.iota.org/docs/node-software/1.0/best-practice
[4] https://docs.iota.org/docs/hornet/1.1/tutorials/install-hornet-docker
[5] https://www.youtube.com/watch?v=nfBhdRCV2kw
[6] http://goshimmer.docs.iota.org/tutorials/setup.html#setting-up-the-grafana-dashboard
[7] https://hub.docker.com/r/gohornet/hornet
[8] https://medium.com/@dantherealm4n/the-ultimate-guide-to-pi-hornet-5ab706f4977d
[9] https://iotahispano.com/setting-up-a-vps-iota-full-node-from-scratch/
[10] https://siamblockchain.com/2021/02/10/iota-blockchain-introduces-oracle-capabilities/
[11] https://cryptosiam.com/iota-launched-alpha-version-of-chronicle/

Scroll to top