ขอแนะนำ MultiChain Streams

โหนดต้นทาง: 1213525

สำหรับฐานข้อมูลอนุกรมเวลาและคีย์-ค่าที่ไม่เปลี่ยนรูปแบบที่ใช้ร่วมกัน

วันนี้เราภูมิใจที่จะปล่อย MultiChain เวอร์ชันล่าสุด ซึ่งนำชุดการทำงานใหม่ที่สำคัญที่เรียกว่า “สตรีม” ไปใช้ สตรีมให้สิ่งที่เป็นนามธรรมตามธรรมชาติสำหรับกรณีการใช้งานบล็อคเชนซึ่งมุ่งเน้นไปที่การดึงข้อมูลทั่วไป การประทับเวลา และการเก็บถาวร มากกว่าการถ่ายโอนสินทรัพย์ระหว่างผู้เข้าร่วม สตรีมสามารถใช้เพื่อใช้งานฐานข้อมูลที่แตกต่างกันสามประเภทบนลูกโซ่:

  1. ฐานข้อมูลคีย์-ค่าหรือที่เก็บเอกสาร ในรูปแบบของ NoSQL
  2. ฐานข้อมูลอนุกรมเวลาซึ่งเน้นการเรียงลำดับรายการ
  3. ฐานข้อมูลที่ขับเคลื่อนด้วยข้อมูลประจำตัวซึ่งรายการต่างๆ ถูกจัดประเภทตามผู้เขียน

สิ่งเหล่านี้ถือได้ว่าเป็น 'อะไร' 'เมื่อไหร่' และ 'ใคร' ของฐานข้อมูลที่ใช้ร่วมกัน

ข้อมูลพื้นฐานเกี่ยวกับสตรีม

สามารถสร้างสตรีมจำนวนเท่าใดก็ได้ใน MultiChain blockchain และแต่ละสตรีมทำหน้าที่เป็นคอลเล็กชันรายการต่อท้ายเท่านั้นที่เป็นอิสระ แต่ละรายการในสตรีมมีลักษณะดังต่อไปนี้:

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

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

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

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

เช่นเดียวกับฉัน กล่าวถึงก่อนหน้านี้การรักษาความลับเป็นความท้าทายที่ใหญ่ที่สุดในกรณีการใช้งานบล็อคเชนจำนวนมาก นี่เป็นเพราะว่าแต่ละโหนดในบล็อคเชนเห็นสำเนาเต็มของเนื้อหาของเชนทั้งหมด สตรีมเป็นวิธีที่เป็นธรรมชาติในการสนับสนุนข้อมูลที่เข้ารหัสบนบล็อคเชนดังนี้:

  1. ผู้เข้าร่วมใช้สตรีมหนึ่งรายการเพื่อแจกจ่ายคีย์สาธารณะสำหรับรูปแบบการเข้ารหัสคีย์สาธารณะใดๆ
  2. สตรีมที่สองใช้เพื่อเผยแพร่ข้อมูล โดยที่ข้อมูลแต่ละชิ้นจะได้รับการเข้ารหัสโดยใช้การเข้ารหัสแบบสมมาตรด้วยคีย์เฉพาะ
  3. สตรีมที่สามให้การเข้าถึงข้อมูล สำหรับผู้เข้าร่วมแต่ละคนที่ควรเห็นข้อมูลบางส่วน รายการสตรีมจะถูกสร้างขึ้นซึ่งมีรหัสลับของข้อมูลนั้น ซึ่งเข้ารหัสโดยใช้กุญแจสาธารณะของผู้เข้าร่วมนั้น

นี่เป็นวิธีที่มีประสิทธิภาพในการจัดเก็บข้อมูลถาวรบนบล็อคเชน ในขณะที่ทำให้ผู้เข้าร่วมบางรายมองเห็นเท่านั้น

ดึงมาจากลำธาร

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

หากโหนดสมัครรับข้อมูลสตรีม สามารถดึงข้อมูลจากสตรีมนั้นได้หลายวิธี:

  • กำลังดึงรายการจากสตรีมตามลำดับ
  • ดึงรายการด้วยคีย์เฉพาะ
  • ดึงรายการที่ลงนามโดยผู้จัดพิมพ์เฉพาะ
  • แสดงรายการคีย์ที่ใช้ในสตรีม โดยมีการนับรายการสำหรับแต่ละคีย์
  • รายชื่อผู้เผยแพร่ในสตรีมพร้อมรายการนับ

ตามที่กล่าวไว้ตอนต้น วิธีการดึงข้อมูลเหล่านี้ทำให้สตรีมใช้สำหรับ ฐานข้อมูลคีย์-ค่า, ฐานข้อมูลอนุกรมเวลา และฐานข้อมูลที่ขับเคลื่อนด้วยข้อมูลประจำตัว ข้อเสนอ API การดึงข้อมูลทั้งหมด เริ่มต้น และ นับ พารามิเตอร์ ทำให้สามารถเรียกส่วนย่อยของรายการแบบยาวได้อย่างมีประสิทธิภาพ (เช่น LIMIT clause ใน SQL) ค่าลบสำหรับ เริ่มต้น อนุญาตให้ดึงรายการล่าสุด

สตรีมสามารถมีได้หลายรายการด้วยคีย์เดียวกัน และสิ่งนี้จะช่วยแก้ไขความตึงเครียดระหว่างความไม่เปลี่ยนรูปของบล็อคเชนและความจำเป็นในการอัปเดตฐานข้อมูล 'รายการ' ฐานข้อมูลที่มีประสิทธิภาพแต่ละรายการควรกำหนดคีย์เฉพาะในแอปพลิเคชันของคุณ โดยการอัปเดตแต่ละรายการนั้นจะแสดงด้วยรายการสตรีมใหม่พร้อมคีย์ API การดึงข้อมูลสตรีมของ MultiChain สามารถใช้เพื่อ: (a) ดึงข้อมูลเวอร์ชันแรกหรือเวอร์ชันสุดท้ายของรายการที่กำหนด (b) เรียกข้อมูลประวัติเวอร์ชันเต็มสำหรับรายการ (c) ดึงข้อมูลเกี่ยวกับรายการหลายรายการ รวมทั้งรายการแรกและรายการสุดท้าย แต่ละรุ่น.

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

สตรีมและแผนงาน MultiChain

ด้วยการเปิดตัวสตรีม เราได้ทำงานชิ้นสำคัญชิ้นสุดท้ายสำหรับ MultiChain 1.0 เสร็จเรียบร้อยแล้ว และขณะนี้อยู่ในเส้นทางสู่เบต้าอย่างมั่นคง เราคาดว่าจะใช้เวลาสองสามเดือนข้างหน้าในการขยายชุดทดสอบภายในของเรา (ซึ่งค่อนข้างใหญ่อยู่แล้ว!) จบพอร์ต Windows และ Mac เพิ่ม API ที่มีประโยชน์มากขึ้น อัปเดต สำรวจ สำหรับสตรีม การปรับแต่งแง่มุมต่างๆ ของกลไกฉันทามติ เผยแพร่การสาธิตเว็บของเรา และโดยทั่วไปแล้วการจัดระเบียบโค้ดและข้อความช่วยเหลือ ที่สำคัญที่สุด เราจะดำเนินการแก้ไขข้อบกพร่องต่างๆ ต่อไปทันทีที่มีการค้นพบ เพื่อไม่ให้ข้อผิดพลาดของเราไม่ขัดจังหวะการทำงานของคุณ

ในระยะยาว สตรีมจะพอดีกับแผนงานของ MultiChain ตรงไหน? เมื่อย้อนกลับไป ตอนนี้ MultiChain มีฟังก์ชันระดับสูงสามส่วน:

  • สิทธิ์ เพื่อควบคุมว่าใครสามารถเชื่อมต่อ ทำธุรกรรม สร้างสินทรัพย์/สตรีม ขุด/ตรวจสอบ และบริหารจัดการ
  • สินทรัพย์ รวมทั้งการออก การออกใหม่ การโอน การแลกเปลี่ยนปรมาณู escrow และการทำลาย
  • สตรีม ด้วย API สำหรับสร้างสตรีม การเขียน สมัครรับข้อมูล จัดทำดัชนี และดึงข้อมูล

หลังจากการเปิดตัว MultiChain 1.0 (และเวอร์ชันพรีเมียม) อะไรต่อไปในรายการนี้? ถ้าคุณดูที่ คำสั่ง API ซึ่งใช้ในการสร้างสตรีม คุณจะสังเกตเห็นพารามิเตอร์ฟุ่มเฟือยอย่างเห็นได้ชัด โดยมีค่าคงที่เท่ากับ stream. พารามิเตอร์นี้จะช่วยให้ MultiChain รองรับเอนทิตีระดับสูงประเภทอื่นๆ ได้ในอนาคต

ค่าในอนาคตที่เป็นไปได้สำหรับพารามิเตอร์นี้ได้แก่ evm (สำหรับ Ethereum- เครื่องเสมือนที่เข้ากันได้), sql (สำหรับฐานข้อมูลสไตล์ SQL) หรือแม้แต่ wiki (สำหรับข้อความที่แก้ไขร่วมกัน) เอนทิตีที่ใช้ร่วมกันใดๆ ที่สถานะถูกกำหนดโดยลำดับของการเปลี่ยนแปลงคือตัวเลือกที่เป็นไปได้ แต่ละเอนทิตีดังกล่าวจะต้อง: (a) API ที่จัดเตรียมสิ่งที่เป็นนามธรรมที่เหมาะสมสำหรับการอัปเดตสถานะ (b) กลไกที่เหมาะสมสำหรับโหนดที่สมัครรับข้อมูลเพื่อติดตามสถานะนั้น และ (c) API สำหรับการดึงข้อมูลบางส่วนหรือทั้งหมดของสถานะอย่างมีประสิทธิภาพ เรากำลังรอการเรียนรู้ว่าเอนทิตีระดับสูงตัวใดจะมีประโยชน์มากที่สุด โดยเราหรือบุคคลที่สามจะนำไปใช้ผ่านสถาปัตยกรรมปลั๊กอิน

แล้วสัญญาอัจฉริยะล่ะ?

โดยทั่วไป MultiChain ใช้แนวทางที่ ข้อมูล ถูกฝังอยู่ในบล็อคเชนอย่างไม่เปลี่ยนแปลง แต่ รหัส สำหรับการตีความว่าข้อมูลอยู่ในโหนดหรือชั้นแอปพลิเคชัน สิ่งนี้แตกต่างอย่างจงใจจากกระบวนทัศน์ "สัญญาอัจฉริยะ" ดังตัวอย่างโดย Ethereum ซึ่งโค้ดถูกฝังอยู่ในบล็อคเชนและทำงานในเครื่องเสมือน ตามทฤษฎีแล้ว เนื่องจากสัญญาที่ชาญฉลาดคือ ทัวริงสมบูรณ์พวกเขาสามารถทำซ้ำพฤติกรรมของ MultiChain หรือแพลตฟอร์มบล็อกเชนอื่น ๆ อย่างไรก็ตาม ในทางปฏิบัติ smart contract แบบ Ethereum มีข้อบกพร่องหลายประการ:

  • ทุกโหนดต้องทำการคำนวณทุกอย่าง ไม่ว่าจะเป็นเรื่องที่สนใจหรือไม่ก็ตาม ในทางตรงกันข้าม ใน MultiChain แต่ละโหนดจะตัดสินใจว่าจะสมัครรับข้อมูลสตรีมใด และสามารถละเว้นข้อมูลที่ผู้อื่นมีอยู่ได้
  • เครื่องเสมือนที่ใช้สำหรับสัญญาอัจฉริยะมีประสิทธิภาพที่แย่กว่าโค้ดที่คอมไพล์โดยกำเนิดสำหรับสถาปัตยกรรมคอมพิวเตอร์ที่กำหนด
  • รหัสสัญญาอัจฉริยะถูกฝังอยู่ในสายโซ่อย่างไม่เปลี่ยนแปลง ทำให้ไม่สามารถเพิ่มคุณสมบัติและจุดบกพร่องต่างๆ ได้ สิ่งนี้แสดงให้เห็นอย่างเข้มแข็งใน มรณกรรมของ DAO.
  • ธุรกรรมที่ส่งไปยังสัญญาอัจฉริยะ อัพเดทไม่ได้ สถานะของ blockchain จนกว่าจะทราบลำดับขั้นสุดท้าย เนื่องจากลักษณะของการคำนวณเพื่อวัตถุประสงค์ทั่วไป สิ่งนี้นำไปสู่ความล่าช้า (จนกว่าธุรกรรมจะได้รับการยืนยันในบล็อก) รวมถึงการกลับรายการที่เป็นไปได้ (ในกรณีที่มีการแยกในห่วงโซ่) ในทางตรงกันข้าม MultiChain สามารถปฏิบัติต่อธุรกรรมที่ไม่ได้รับการยืนยันแต่ละประเภทด้วยวิธีที่เหมาะสม: (a) สินทรัพย์ที่เข้ามาจะอัปเดตยอดดุลที่ไม่ได้รับการยืนยันของโหนดทันที (b) รายการสตรีมขาเข้าจะพร้อมใช้งานทันที โดยการสั่งซื้อทั่วโลกจะเสร็จสิ้นในเวลาต่อมา (c) การเปลี่ยนแปลงการอนุญาต จะถูกนำไปใช้ทันทีและเล่นซ้ำในบล็อคที่เข้ามา

อย่างไรก็ตาม อย่างที่ฉันได้ พูดก่อนเราไม่ได้พิจารณาว่าสัญญาอัจฉริยะเป็นกระบวนทัศน์ที่เป็นประโยชน์สำหรับแอปพลิเคชันบล็อคเชนอย่างแน่นอน หากเราเห็นกรณีการใช้งานที่แข็งแกร่งและเมื่อใด อย่างไรก็ตาม ในสัญญาอัจฉริยะ MultiChain จะถูกนำไปใช้ในเลเยอร์เหมือนสตรีมที่ด้านบนของบล็อคเชน แทนที่จะเป็นระดับธุรกรรมที่ต่ำที่สุด สิ่งนี้จะรักษาประสิทธิภาพที่เหนือกว่าของ MultiChain สำหรับเอนทิตีบล็อคเชนที่ง่ายกว่า เช่น สินทรัพย์และสตรีม ในขณะที่ให้การคำนวณแบบ on-chain ที่ช้าลงเมื่อจำเป็นจริงๆ แต่มีกรณีดังกล่าวน้อยกว่าที่คุณคิด

 

กรุณาโพสต์ความคิดเห็นใด ๆ ใน LinkedIn.

 

ภาคผนวกทางเทคนิค

คำสั่งทั้งหมดที่เกี่ยวข้องกับสตรีมได้รับการบันทึกไว้อย่างครบถ้วนใน หน้า MultiChain APIแต่ขอสรุปสั้นๆ ดังนี้

  • สร้างสตรีมโดยใช้ create stream or createfrom ... stream
  • เพิ่มรายการไปยังสตรีมด้วย publish or publishfrom
  • ดึงรายการสตรีมโดยใช้ liststreams
  • เริ่มหรือหยุดติดตามสตรีมด้วย subscribe และ unsubscribe
  • ดึงรายการสตรีมโดยใช้ liststreamitems, liststreamkeyitems และ liststreampublisheritems
  • แสดงรายการสตรีมคีย์และผู้เผยแพร่ด้วย liststreamkeys และ liststreampublishers
  • สำหรับรายการสตรีมขนาดใหญ่ ดึงข้อมูลทั้งหมดโดยใช้ gettxoutdata (ดู maxshowndata ด้านล่าง)
  • ควบคุมการอนุญาตต่อการสตรีมด้วยการโทรเช่น grant [address] stream1.write
  • ดูการอนุญาตของสตรีมโดยใช้ listpermissions stream1.*

หมายเหตุนักพัฒนาอื่น ๆ ที่เกี่ยวข้องกับสตรีม:

  • พื้นที่ create การอนุญาตอนุญาตให้ใช้ที่อยู่เพื่อสร้างสตรีม
  • สิทธิ์ต่อสตรีมที่เกี่ยวข้องคือ write, admin และ activate
  • ใหม่ พารามิเตอร์บล็อคเชน: root-stream-name (ปล่อยให้ว่างเปล่าสำหรับใคร) root-stream-open, anyone-can-create, admin-consensus-create, max-std-op-returns-count
  • ใหม่ พารามิเตอร์รันไทม์: autosubscribe เพื่อสมัครรับข้อมูลสตรีมใหม่ที่สร้างขึ้นโดยอัตโนมัติและ maxshowndata เพื่อจำกัดปริมาณข้อมูลในการตอบสนอง API (ดู gettxoutdata ข้างบน).
  • ขนาดสูงสุดของข้อมูลรายการสตรีมได้รับการแก้ไขโดย max-std-op-return-size พารามิเตอร์ blockchain เช่นเดียวกับค่าที่เล็กกว่าของ maximum-block-size และ max-std-tx-size ค่าลบสองสามร้อยไบต์
  • โหนดที่ใช้รูปแบบกระเป๋าสตางค์แบบเก่าไม่สามารถสมัครรับข้อมูลสตรีมได้และ ควรปรับปรุง.

 

ประทับเวลา:

เพิ่มเติมจาก มัลติเชน