Stellar 101: Introduction

Anonymous
Dcen.io
Published in
5 min readApr 21, 2018

Stellar เป็น OpenSource Platform ที่ออกแบบมาสำหรับระบบการเงินโดยเฉพาะ โดยนำ Blockchain เข้ามาช่วยให้การโอนเงินมีค่าใช้จ่ายที่ถูกลง รวดเร็ว และสามารถโอนแบบแลกเปลี่ยนสกุลเงินได้เลยในระบบ ซึ่งได้มีการออกแบบให้สามารถสร้างสกุลเงินอะไรขึ้นมาก็ได้ในระบบ โดยมีหน่วยเงินกลางที่เรียกว่า Lumens (XLM) ใช้เป็นค่าเงินกลางในการแลกเปลี่ยนเงินสกุลอื่นๆที่มีในระบบอีกที นอกจากนี้ยังรองรับการใช้งาน Smart Contract อีกด้วย

Asset: Digital Currency in Stellar

Stellar นั้นออกแบบมาให้สามารถสร้างสกุลเงินภายในระบบได้ โดยเรียกมันว่า Assets โดยเราสามารถใช้อ้างอิงกับสิ่งของอื่นๆ หรือสกุลเงินต่างๆนอกระบบได้ ซึ่งช่วยให้เราสร้างหน่วยอะไรก็ได้ขึ้นมาในระบบ Stellar เช่น

  • USD/EUR/BHT… ที่อ้างอิงกับสกุลเงินของประเทศต่างๆ
  • BTC/ETH/XRP…. ที่อ้างอิงกับ Cryptocurrency ต่างๆ

รวมไปถึงเราสามารถสร้างสกุลเงินใหม่ๆของเราขึ้นมาได้ด้วย ซึ่งอาจจะนำมาใช้ในระบบภายใน หรือเปิดขาย ICO ก็ได้เช่นกัน ยกตัวอย่างเช่น

  • AV Coin เพื่อทำ ICO เว็บ AV Streaming ซับไทย
  • M44 Coin เพื่อทำ ICO ระบบเลือกตั้งบน Blockchain

อะไรก็ได้ทั้งนั้นแหละ….

Transfer Money

การโอนเงินในระบบ Stellar นั้น เนื่องจากระบบออกมาให้มีสกุลเงินได้หลายแบบ การโอนเงินจึงออกแบบมาให้สามารถทำได้หลากหลายด้วย โดยสามารถทำได้ทั้ง

  • โอนเงินแบบปกติ (Payment) คือการโอนเงินให้ Account อื่นด้วยสกุลเงินเดียวกัน
  • โอนเงินต่างสกุล (Path Payment) คือการโอนเงินผ่านสกุลเงินต่างๆออกไปให้ผู้รับเป็นอีกสกุลหนึ่ง เช่นส่ง 10 XLM ไป แต่ผู้รับจะได้รับเป็นสกุล BTC แทน โดยคำนวนผ่านอัตราแลกเปลี่ยนในระบบ
  • เสนอขายสกุลเงิน (Manage Offer) ฟีเจอร์นี้ช่วยเราสามารถเสนอขายสกุลเงินที่เรามีอยู่ ให้คนอื่นเข้ามาซื้อได้ เช่น เสนอขายสกุลเงินใหม่ AV Coin โดยสามารถซื้อได้ที่อัตราแลกเปลี่ยน 1 AV Coin = 0.0002 BTC เป็นต้น ซึ่งก็เป็นช่องทางให้เราสามารถทำการเสนอขาย ICO หรือขายสกุลเงินอื่นๆที่เราถือไว้อยู่ได้นั่นเอง

Stellar Account

Account ใน Stellar นั้นมีได้ 2 รูปแบบคือ Account แบบ PublicKey/PrivateKey ปกติ ที่มีเจ้าของคนเดียวสามารถทำ Transaction ได้แล้ว

กับอีกรูปแบบคือ Multi-signature Account หรือบัญชีที่มีผู้ใช้คนอื่นเป็นเจ้าของร่วมกันอยู่ด้วย การจะดำเนินการอะไรสักอย่าง เช่น โอนเงิน จำเป็นต้องได้รับอนุญาตจากเจ้าของร่วมกันด้วย ซึ่งหมายถึงการจะทำรายการได้ ต้องใช้ PrivateKey ของเจ้าของร่วมมาทำรายการด้วย

โดย Multi Signature Account เองก็สามารถกำหนด Threshold ได้ว่าต้องให้เจ้าของที่ Priority มารวมกันมากกว่าค่า Threshold ถึงจะสามารถทำรายการได้ เช่น

  • บัญชี A มีเจ้าของร่วมกันคือ A, B, C, D โดยมี Priority คือ 1, 1, 0.5, 0.5 ตามลำดับ
  • มีการตั้งค่า Threshold ไว้ 3 ระดับคือ Low = 1, Med = 2, High =3
  • หากต้องการทำรายการโอนจากบัญชี A ซึ่งการโอนเงินเป็น Operation ระดับ Medium Threshold ดังนั้นต้องใช้ Private Key ของ A, B, C, D โดยให้ค่ารวมกันมากกว่า 2 นั้นเอง เช่น A,B หรือ A,C,D, หรือ B,C,D เป็นอย่างน้อย หรือทุกคนเลยก็ได้

จะเห็นได้ว่าตัว Multi Signature Account นั้นมีประโยชน์มากในกรณีที่เราต้องการให้บัญชีนั้น ไม่สามารถดำเนินการได้ด้วยบุคคลเพียงคนเดียว เช่น บัญชีรับบริจาคร่วมระหว่างองค์กร เพราะอาจจะเกิดปัญหาถูกยักยอกโอนออกไปได้นั้นเอง

Stellar Network

Stellar Network นั้นประกอบไปด้วย 2 ส่วนหลักๆคือ

  • Stellar Core เป็นส่วนของโหนดต่างๆที่รันอยู่ในระบบ Network ทำหน้าที่ติดต่อสื่อสารกันระหว่างโหนด พร้อมทั้งตรวจสอบและ Confirm รายการธุรกรรมต่างๆที่เข้ามาในระบบผ่าน Stellar Consensus Protocol
  • Horizon ทำหน้าที่เป็น Interface ตัวกลางระหว่างตัว Stellar Core ใน Network กับตัว Client ภายนอกที่ต่อเข้ามาเพื่อดึงข้อมูลหรือทำรายการเข้ามาในระบบ

Stellar นั้นมี Network หลักที่รันอยู่แล้วผ่าน stellar.org ซึ่งมีทั้งระบบ Public และ Test Network ให้ Developer สามารถทดสอบและทดลองเล่นกันได้

หรือหากใครที่ต้องการทำ Private Blockchain ตัว Stellar ก็มีเครื่องมือต่างๆให้สามารถทำไปใช้ได้เลย เพราะเปิดเป็น Opensource อยู่แล้ว สามารถนำ stellar-core และ horizon ไปดีพลอยใช้งานภายในได้เลย

Learn Stellar from Laboratory

Stellar Laboratory https://www.stellar.org/laboratory/#account-creator?network=test

Stellar มีเว็บสำหรับให้เราลองเล่นฟังก์ชันต่างๆที่มีในระบบได้แบบง่ายๆที่ Laboratory ซึ่งสามารถลองได้เล่นกับทั้ง Test Network และ Public Network สามารถลองเล่นได้แทบทุกฟังก์ชันเลยครับ สำหรับใครที่ยังไม่อยากไปลงเขียนโค้ดเลยก็สามารถลองให้เข้าใจกันก่อนได้ ลองเข้าเว็บกันได้เลยฮะ สามารถกดเปลี่ยนโหมดด้านบนได้ หากต้องการลองดึงข้อมูลจาก Public Network นะครับ

Create Account

เริ่มจากการสร้าง Account กันก่อนนะครับ Account ของ Stellar ก็เหมือน Crypto Wallet ตัวอื่น โดยจะทำการ Generate Keypair ขึ้นมาเราจะได้ค่าออกมา 2 ค่า คือ Private Key กับ Public Key ซึ่งสามารถใช้เป็นกุญแจและ Address ได้นั่นเอง หรือใครยังไม่เข้าใจระบบ PrivateKey/PublicKey มันทำงานยังไงสามารถดูเพิ่มเติมที่ได้ Blockchain EP.3 : Digital Wallet ครับผม

ถัดมา Address ที่เราสร้างขึ้นมาจะยังไม่ได้เข้าไปอยู่ในระบบ (สร้างขึ้นมาลอยๆในเครื่องเราเฉยๆ) สิ่งที่เราต้องทำคือ ขอให้คนอื่นโอนเงินเข้ามาใน Address นี้ ซึ่งใน Test Network จะมี Friend Bot ที่จะคอยโอนเงินมาให้เราครั้งละ 10,000 XLM เพื่อให้เราใช้เทสได้ เราแค่ต้องกรอก Address และเรียกใช้งานเพียงเท่านั้นเอง

Get Information from Explorer

ถัดมาที่ Tab “Endpoint Explorer” เราก็มาลองดึงข้อมูลต่างๆที่ตัวระบบ Stellar มี API ให้ดึงได้ผ่าน Horizon กันนะครับ โดยเมื่อเราเลือก Endpoint ต่างๆ ตัว Laboratory ก็จะแสดงให้ดูเลยว่ายิง API ไปที่ไหนด้วย Parameters อะไรบ้าง ซึ่งเราสามารถนำไปยิงจริงได้เลย หรือถ้าหากใครใช้ตัว StellarSDK คำสั่งก็แบ่งออกเป็นหมวดหมู่คล้ายๆรายการใน Endpoint Explorer ครับ

อันดับแรกลองมาดึงข้อมูล Account ที่เราสร้างเมื่อสักครู่กันก่อนละกัน

มี API ให้เลือกเยอะแยะ แทบจะครบๆเลยมั้ง

และนี่คือผลลัพธ์ที่ได้….

เราจะได้ข้อมูลของ Account มานะครับ ซึ่งเราจะเห็นฟิลด์ๆหนึ่งชื่อว่า balances ซึ่งบอกยอดเงินที่เราถืออยู่ใน Account นี้ ซึ่งอาจจะงงว่าแล้วทำไมเป็นอาเรย์ละ…. นั่นเพราะ Account ใน Stellar เราสามารถถือได้มากกว่า 1 สกุลเงินครับ!!

ฟิลด์ asset_type จะเป็นตัวบอกว่าเราว่าเราถือสกุลเงินไหนยอดเท่าไหร่ อย่างในตัวอย่างคือ native ซึ่งก็หรือสกุลเงิน Lumens (XLM) ของตัว Stellar นั่นเองครับ หากเราถืออยู่หลายสกุลก็จะมีค่าอื่นๆเพิ่มขึ้นมา ในที่นี้ก็คือเราถือเงินอยู่ 10,000 Lumens นั่นเอง

Transaction Builder

ถัดมาเราจะมาลองสร้าง Transaction ใน Stellar นะครับ ก่อนอื่นเลย ย้อนกลับไปสร้าง Account เพิ่มขึ้นมาอีก 1 Account กันก่อน แล้วก็มาทำความเข้าใจ Transaction ใน Stellar กันก่อนนะครับ

Transactionใน Stellar นั้นไม่ได้หมายถึงแค่การโอนเงินจากการ Account หนึ่งไปยังอีก Account หนึ่งเท่านั้น แต่มันรวมไปถึงทุกๆการกระทำที่เราทำต่อ Account ของต่างๆ โดย Steller เรียกมันว่า Operation ซึ่งที่เกี่ยวกับ การโอนหรือขายเงิน หลักๆจะมีดังนี้

  • โอนเงิน (Payment) แน่นอนว่าเราต้องสามารถโอนเงินได้ โดยเราสามารถเลือกโอนสกุลเงินอะไรก็ได้ที่เราถืออยู่
  • โอนเงินต่างสกุล (Path Payment) ความสามารถพิเศษของตัว Stellar นั้นคือ เราสามารถโอนเงินให้ผู้รับ โดยผู้รับนั้นรับเงินต่างสกุลจากที่เราส่งไป เช่น เรามีเงิน 500 XLM ทำการโอนให้ Bob เป็นสกุลเงิน BTC / USD หรืออื่นๆในระบบได้เลย
  • เสนอขายสกุลเงิน (Manage Offer) ฟีเจอร์นี้ช่วยเราสามารถเสนอขายสกุลเงินที่เรามีอยู่ ให้คนอื่นเข้ามาซื้อได้

Operation อื่นๆก็จะเป็นเกี่ยวกับการจัดการ Account ขอข้ามไปก่อนแล้วกันนะครับ ไว้อธิบายในบทความถัดๆไป

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

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

Create Transaction

สิ่งที่เราต้องใช้และสามารถกำหนดได้ในการทำรายการใหม่นั้นมีดังนี้

  • Source Account ซึ่งก็คือ Public Key ของ Account เรา
  • Transaction Sequence Number เป็น Running Number ที่สามารถดึงได้จากระบบหรือกำหนดเองก็ได้ให้ไม่ซ้ำกัน Transaction ก่อนหน้านี้ที่เคยทำรายการไป
  • Base Fee คือค่าธรรมเนียม ซึ่งจะขึ้นอยู่กับ Operation ที่เราสร้างในแต่ละ Transaction ด้วย ( 1 Transaction สร้างได้หลาย Operation ) ปกติจะอยู่ที่ 100 stroops หรือ 0.00001 lumens ต่อ 1 Operation ( หากสร้าง 2 Operation ก็เสียค่าธรรมเนียม 200 stroops นั่นเอง )
  • Memo เราสามารถใส่ข้อความบันทึกลงไปได้ หรือจะใส่เป็น ID / Hash / Return Hash ก็ได้ ซึ่งแต่ละตัวก็จะมีความแตกต่างกันที่ขนาดของข้อมูลที่บันทึกลงไป
    ( ** Return Hash คือ Hash ของรายการก่อนหน้านี้ที่ถูกโอนมาให้คนส่ง ใส่ค่านี้เพื่อบอกว่ารายการนี้เป็นการ Refund กลับไปให้คนรับ )
  • Time Bounds หรือช่วงเวลาที่จะให้รายการนี้ยังมองว่าถูกต้องอยู่ หากรายการถูกส่งเข้ามาประมวลผลนอกช่วงเวลาที่ระบุก็จะตีตกไป

Add Operations

หลักจากเราระบุรายละเอียด Transaction เรียบร้อยแล้ว เราก็จะมาสร้าง Operation เพื่อระบุว่าจะให้มันทำรายการอะไรต่อไป ซโอนเงินแบบปกติ เราจะใช้ Operation ที่ชื่อ Payment กันนะครับ โดยเราต้องระบบ

  • Destination ก็คือ Public Key ของ Account ปลายทางที่เราจะโอนให้
  • Assets หรือสกุลเงินที่จะเอาโอนนะครับ Native ก็คือตัว Lumens นั่นเอง
  • Amount ก็ยอดเงิน
  • Source Account เป็น Public Key ของ Account ที่เราจะหักเงินนั่นเองนะครับ

เมื่อเสร็จแล้วก็กด Sign in Transaction Signer เพื่อทำการ Sign ตัวรายการเพื่อ Submit เข้าระบบต่อไปนะครับ กดเล้ยยยย

Transaction Signer

ถัดมาเมื่อทำการสร้าง Transaction เสร็จแล้ว เราก็ต้องมาทำการลงลายเซ็น Transaction ของเรา เพื่อยืนยันการทำรายการ โดยเราจะใช้ Private Key ของ Source Account ของเรามาทำการ Sign จากนั้นระบบจะนำค่า Signature ที่ได้ไปตรวจสอบ Operation ข้างในอีกทีว่าเรามีสิทธิที่จะกระทำการใดๆกับคำสั่งที่เราส่งเข้าไปได้จริงๆ รายการนั้นถึงจะผ่านการยืนยันจากระบบครับ

การลงลายเซ็นใน Stellar นั้นออกแบบมาให้สามารถลงลายเซ็นได้หลายค่า เนื่องจากบาง Account นั้นเราสามารถกำหนดให้ได้ว่า หากจะทำรายการ ต้องขออนุญาตจากทุกฝ่าย เช่น เป็น บัญชีร่วมระหว่างองค์กรและภาครัฐ การจะทำรายโอนเงินออกจากบัญชี ต้องใช้กุญแจจากทั้งสองฝ่ายพร้อมกันนั่นเอง

ในทีนี้ก็ใช้แค่ของเรานี่แหละ ใส่ไปเลยจากนั้นก็กด Submit ไปได้เลย

จากนั้นตัว Lab จะเด้งกลับมาหน้า Endpoint Explorer พร้อมกับ Perform การสร้าง Transaction ก็กด Submit ต่อได้เลย

Submit เสร็จก็รอผลสักครู่

และทุกอย่างก็เรียบร้อย ไปลองเช็คเงินใน Wallet กัน ทางด้าน Account แรกก็จะถูกโอนออกไป 100 Lumens พร้อมกับค่า Fee อีก 100 Stroops ก็จะเหลือยอดตามที่เห็น

Sender Account Balance
Receiver Balance

ส่วนทางด้าน Account ของคนรับเงินก็เข้าไปมา 100 Lumens เรียบร้อย

Conclusion

บทความนี้พาไปรู้จักกับ Stellar เบื้องต้นพร้อมพาลองเล่นตัว Laboratory เรียบร้อยแล้ว ตัว Stellar ก็คล้ายๆกับ Blockchain ตัวอื่นๆ ต่อมาพร้อมกับความง่ายในการนำมาทำ Application สำหรับเชื่อมต่อเข้าระบบ Blockchain เนื่องจากตัว Stellar นั้นทำ API ตัวกลางได้อย่างเรียบง่ายแล้วเข้าใจง่ายมากๆ ดูได้จาก API ตัวอย่างใน Laboratory นะครับ และตัว Stellar เองยังมี SDK ภาษาต่างๆให้ใช้กันด้วยทั้ง Javascripts, Java, Ruby, Python, C# ยังไงก็ลองเล่นกันดูได้เลยนะครับ

References

--

--