เมโมเข้ารหัสในการจ่าย Blocknet

· อ่าน 6 นาที

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

เมโม Blocknet คืออะไร?

เมโม Blocknet คือช่องข้อมูลเข้ารหัส 128 bytes ที่แนบกับทุกเอาต์พุตธุรกรรม เก็บข้อความหรือข้อมูลของคุณได้ถึง 124 bytes เช่น เลขใบแจ้งหนี้หรือข้อความสั้นๆ เข้ารหัสด้วยความลับที่มีเฉพาะผู้ส่งและผู้รับร่วมกัน และเติมข้อมูลให้เมโมว่างดูเหมือนเมโมเต็ม

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

ใส่อะไรในเมโมได้บ้าง?

อะไรก็ได้ที่พอดีกับ 124 bytes ข้อความธรรมดาเก็บเป็น UTF-8 สำหรับภาษาอังกฤษจึงเป็นตัวอักษร ตัวเลข และช่องว่าง 124 ตัว อักขระนอกอักษรละตินใช้ bytes มากกว่า เช่น อักษรจีนใช้สาม bytes จึงใส่ได้ประมาณ 41 ตัว

การใช้งานทั่วไป:

เพิ่มเมโมเมื่อส่ง BNT อย่างไร?

คำตอบสั้นๆ

ในกระเป๋าเงินแบบบรรทัดคำสั่ง ให้พิมพ์เมโมหลังจำนวนเงิน: send @rock 100 “invoice 1042” กระเป๋าเงินแสดงเมโมข้างค่าธรรมเนียมบนหน้าจอยืนยัน เข้ารหัสให้ผู้รับ แล้วส่งเมื่อคุณยืนยัน ใช้ bytes ดิบได้ด้วยโดยขึ้นต้นด้วย hex:

คำสั่ง send ของกระเป๋าเงินรับเมโมเป็นอาร์กิวเมนต์สุดท้ายที่ใส่หรือไม่ก็ได้:

send <address> <amount> [memo|hex:<memo_hex>]

เมโมมีช่องว่างได้และไม่จำเป็นต้องใส่อัญประกาศ กระเป๋าเงินจะลบอัญประกาศคู่ที่ตรงกันก่อนเข้ารหัสข้อความ ตัวอย่างการจ่ายให้ชื่อ Blocknet ID พร้อมเลขใบแจ้งหนี้:

> send @rock 100 "invoice 1042"
  Resolved @rock -> <address> ✓ verified

# Send
  Building transaction...

  Send 100 BNT to @rock?
  Fee:     <fee>
  Address: <address>
  Memo:    "invoice 1042"
  Confirm [y/N]: y

ขั้นตอนยืนยันแสดงเมโมที่ผู้รับจะอ่าน คุณจึงตรวจได้ก่อนส่ง หากเมโมเกิน 124 bytes กระเป๋าเงินหยุดก่อนสร้างธุรกรรมพร้อมข้อความ memo too long: max 124 bytes คุณย่อข้อความแล้วลองใหม่ได้

หากต้องการส่ง bytes ดิบ ให้ขึ้นต้นเมโมด้วย hex: กระเป๋าเงินถอดรหัส hex แล้วเข้ารหัส bytes:

send @rock 100 hex:494e562d31303432

ลิงก์ชำระเงิน แนบเมโมได้เช่นกัน เมื่อวางลิงก์ blocknet:// หรือ bntpay.com ในกระเป๋าเงิน ระบบจะกรอกที่อยู่ จำนวนเงิน และเมโมให้ยืนยัน ผู้รับเงินจึงกำหนดเลขอ้างอิงใบแจ้งหนี้ไว้ล่วงหน้าได้ อ่านเรื่องชื่อและลิงก์เพิ่มเติมในคู่มือ Blocknet ID

เมโมจากซอฟต์แวร์ของคุณ

API กระเป๋าเงินรับเมโมแยกตามผู้รับแต่ละราย ในคำขอ POST /api/wallet/send ให้ใส่ memo_text สำหรับข้อความธรรมดา หรือ memo_hex สำหรับ bytes ดิบให้ผู้รับแต่ละราย:

{
  "recipients": [
    { "address": "@rock", "amount": 10000000000, "memo_text": "invoice 1042" },
    { "address": "$shop", "amount": 2500000000, "memo_hex": "4f524445522d3737" }
  ]
}

จำนวนเงินที่นี่ใช้หน่วยย่อยที่สุด โดย 1 BNT เท่ากับ 100,000,000 หน่วย ตัวอย่างจึงส่ง 100 BNT และ 25 BNT ผู้รับแต่ละคนได้เมโมของตัวเอง เข้ารหัสเฉพาะกระเป๋าเงินนั้น และใช้ขีดจำกัด 124 bytes เช่นกัน

ใครอ่านเมโม Blocknet ได้?

คำตอบสั้นๆ

ผู้ส่งและผู้รับ เมโมแต่ละอันเข้ารหัสด้วยความลับร่วมของกระเป๋าเงินทั้งสองสำหรับเอาต์พุตนั้น ซึ่งเป็นความลับเดียวกับที่สร้าง stealth address แบบใช้ครั้งเดียวของผู้รับ คนอื่นรวมถึงผู้ดูแลโหนดและ block explorer เห็นเพียงข้อมูล 128 bytes ที่ดูสุ่ม และบอกไม่ได้ว่ามีข้อความอยู่ข้างในหรือไม่

เมื่อกระเป๋าเงินสร้างการจ่าย จะรวมคีย์ธุรกรรมสุ่มใหม่เข้ากับ public view key ของผู้รับเพื่อสร้างความลับร่วม ความลับนี้ใช้สร้างstealth address แบบใช้ครั้งเดียว ของผู้รับ และกระเป๋าเงินใช้เข้ารหัสเมโมด้วย โดยแฮชความลับด้วย SHA3-256 ร่วมกับตำแหน่งเอาต์พุตในธุรกรรมและรหัสเครือข่าย เพื่อสร้างมาสก์ 128 bytes แล้วรวมมาสก์เข้ากับเมโม แต่ละเอาต์พุตได้มาสก์ของตัวเอง เมโมสองอันในธุรกรรมเดียวกันจึงเข้ารหัสแยกกัน

กระเป๋าเงินผู้รับหาความลับเดียวกันจากอีกฝั่งด้วย private view key ขณะสแกนแต่ละบล็อก จากนั้นถอดรหัสเมโมและเก็บกับการจ่าย ทางฝั่งคุณ กระเป๋าเงินเก็บเมโมที่เขียนไว้ในประวัติการส่ง

มีสองเรื่องที่ควรรู้:

ทำไมเมโมทุกอันจึงดูเหมือนกันบนเชน

เมโมที่เผยความยาวจะเปิดเผยข้อมูลบางอย่าง ข้อความ 30 bytes ดูต่างจาก 100 bytes และเมโมว่างก็ต่างจากทั้งสอง กระเป๋าเงิน Blocknet ปิดช่องนี้ด้วยโครงสร้างคงที่และข้อมูลเติมแบบสุ่ม

ก่อนเข้ารหัส กระเป๋าเงินบรรจุเมโมในซอง 128 bytes:

Bytes เนื้อหา
1 เวอร์ชันซองข้อมูล
1 ความยาวเมโม
2 เช็กซัมของเมโม
0 ถึง 124 เมโมของคุณ
ส่วนที่เหลือ ข้อมูลเติมแบบสุ่ม

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

เช็กซัมช่วยให้กระเป๋าเงินผู้รับยืนยันว่าถอดรหัสถูกต้องก่อนแสดงเมโม โหนดยังปฏิเสธบล็อกที่มีเอาต์พุตซึ่งช่องเมโมเป็นศูนย์ทั้งหมด ทุกเอาต์พุตบนเชนจึงมีช่องเมโมที่บรรจุข้อมูลอย่างถูกต้อง

หาเมโมที่ได้รับได้ที่ไหน

กระเป๋าเงินแบบบรรทัดคำสั่งแสดงเมโมในจุดที่แสดงรายการจ่าย:

เมโมข้อความแสดงในอัญประกาศ ส่วนเมโมที่ไม่ใช่ข้อความพิมพ์ได้ เช่น bytes ดิบที่ส่งด้วย hex: จะแสดงเป็น hex

หากต้องพิสูจน์การจ่าย ผู้ส่งทำได้ คำสั่ง prove <txid> แสดงคีย์ธุรกรรมสำหรับการจ่ายที่คุณส่ง ใครก็ตามที่มีคีย์นั้น ID ธุรกรรม และที่อยู่ผู้รับสามารถตรวจผ่าน POST /api/verify-proof ซึ่งไม่ต้องมีกระเป๋าเงิน ระบบยืนยันธุรกรรมและแสดงเอาต์พุตที่ที่อยู่นั้นได้รับ พร้อมจำนวนเงินและเมโม

ขุด BNT ที่คุณจะนำไปส่ง

วิธีง่ายๆ ในการได้ BNT แรกคือขุด seine ทำงานบนคอมพิวเตอร์ของคุณ ปรับจูนตัวเองระหว่างขุด และรับเงินผ่าน bntpool.com ตรงสู่ที่อยู่หรือ @name ของคุณ คู่มือการขุด ช่วยให้เริ่มได้ในไม่กี่นาที

คำถามที่พบบ่อย

เมโม Blocknet ยาวได้แค่ไหน?

เมโมเก็บได้สูงสุด 124 bytes ข้อความธรรมดาใช้ UTF-8 จึงเท่ากับตัวอักษร ตัวเลข หรือเครื่องหมายภาษาอังกฤษ 124 ตัว หรืออักษรจีนประมาณ 41 ตัวที่ใช้ตัวละสาม bytes กระเป๋าเงินจะหยุดเมโมที่ยาวกว่านี้ก่อนสร้างธุรกรรมและแจ้งขีดจำกัด 124 bytes

block explorer อ่านเมโม Blocknet ได้ไหม?

ไม่ได้ explorer แสดงช่องเมโมเป็นข้อความเข้ารหัส 128 bytes พร้อมระบุว่าเข้ารหัส คีย์มาจากความลับร่วมของผู้ส่งกับผู้รับสำหรับเอาต์พุตนั้น จึงมีเพียงกระเป๋าเงินของทั้งสองที่เปิดอ่านได้ เพราะเมโมทุกอันเติมข้อมูลจนเต็มขนาด explorer จึงแยกไม่ได้ด้วยซ้ำว่าเอาต์พุตใดมีข้อความ

เมโมทำให้ธุรกรรม Blocknet ใหญ่ขึ้นไหม?

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

เพิ่มเมโมเมื่อจ่ายให้ชื่อ Blocknet ID ได้ไหม?

ได้ ใส่ชื่อแทนที่อยู่และใส่เมโมหลังจำนวนเงิน เช่น send @rock 100 "invoice 1042" กระเป๋าเงินจะค้นหาที่อยู่จากชื่อ แสดงที่อยู่ที่ตรวจสอบแล้ว ค่าธรรมเนียมและเมโม แล้วขอให้ยืนยัน เมโมถูกเข้ารหัสสำหรับกระเป๋าเงินที่ชื่อนั้นชี้ไป