การจ่าย Blocknet ทุกครั้งแนบข้อความเข้ารหัสสั้นๆ ได้ คุณใช้ใส่เลขใบแจ้งหนี้ เลขอ้างอิงคำสั่งซื้อ หรือข้อความถึงผู้รับเงิน และมีเพียงคุณสองคนที่อ่านได้ คู่มือนี้แสดงวิธีเพิ่มเมโมเมื่อส่ง BNT ใครอ่านได้ ทำไมเมโมไม่ดูแตกต่างบนเชน และจะหาเมโมที่ได้รับได้ที่ไหน
เมโม Blocknet คืออะไร?
เมโม Blocknet คือช่องข้อมูลเข้ารหัส 128 bytes ที่แนบกับทุกเอาต์พุตธุรกรรม เก็บข้อความหรือข้อมูลของคุณได้ถึง 124 bytes เช่น เลขใบแจ้งหนี้หรือข้อความสั้นๆ เข้ารหัสด้วยความลับที่มีเฉพาะผู้ส่งและผู้รับร่วมกัน และเติมข้อมูลให้เมโมว่างดูเหมือนเมโมเต็ม
เมโมเป็นส่วนหนึ่งของรูปแบบธุรกรรม ทุกเอาต์พุตบนเชนมีเมโม รวมถึงเอาต์พุตเงินทอนที่คืนเหรียญให้กระเป๋าเงินของคุณ จึงได้คุณสมบัติที่มีประโยชน์สามข้อ:
- เป็นส่วนตัวโดยค่าเริ่มต้น เนื้อหาเข้ารหัสสำหรับผู้รับเอาต์พุตนั้น คนอื่นไม่เห็นสิ่งที่คุณเขียน
- ขนาดคงที่ ช่องข้อมูลบนเชนมีขนาด 128 bytes เสมอ ไม่ว่าจะใส่อะไร
- มีอยู่เสมอ เพราะทุกเอาต์พุตมีเมโม การจ่ายที่แนบข้อความจึงดูเหมือนการจ่ายที่ไม่มีข้อความทุกประการ
ใส่อะไรในเมโมได้บ้าง?
อะไรก็ได้ที่พอดีกับ 124 bytes ข้อความธรรมดาเก็บเป็น UTF-8 สำหรับภาษาอังกฤษจึงเป็นตัวอักษร ตัวเลข และช่องว่าง 124 ตัว อักขระนอกอักษรละตินใช้ bytes มากกว่า เช่น อักษรจีนใช้สาม bytes จึงใส่ได้ประมาณ 41 ตัว
การใช้งานทั่วไป:
- ใบแจ้งหนี้ ใส่เลขใบแจ้งหนี้ในเมโม ผู้รับเงินจะจับคู่กับบิลที่ถูกต้องได้โดยไม่ต้องถาม
- เลขคำสั่งซื้อ ร้านค้าหรือบริการขอให้ลูกค้าใส่เลขอ้างอิงคำสั่งซื้อ แล้วอ่านจากการจ่ายที่เข้ามาได้โดยตรง
- ข้อความ “ค่าเช่าเดือนพฤศจิกายน” “ขอบคุณที่ช่วย” หรือ “หารค่ามื้อเย็น” ส่งไปพร้อมเหรียญได้
- ข้อมูลไบนารี กระเป๋าเงินรับ bytes ดิบที่เขียนเป็น hex ได้ด้วย สำหรับรหัสอ้างอิงที่ซอฟต์แวร์สร้างและอ่าน
เพิ่มเมโมเมื่อส่ง 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 ขณะสแกนแต่ละบล็อก จากนั้นถอดรหัสเมโมและเก็บกับการจ่าย ทางฝั่งคุณ กระเป๋าเงินเก็บเมโมที่เขียนไว้ในประวัติการส่ง
มีสองเรื่องที่ควรรู้:
- กระเป๋าเงินแบบดูอย่างเดียวแสดงเมโมด้วย private view key ใช้อ่านการจ่ายขาเข้า กระเป๋าเงินแบบดูอย่างเดียวที่สร้างจากคีย์นี้จึงเห็นจำนวนเงินและเมโมของแต่ละการจ่าย แบ่งปันคีย์นี้เฉพาะกับคนที่คุณยอมให้เห็นการจ่ายขาเข้า
- รางวัลขุดมีเมโมว่าง ฉันทามติกำหนดให้เมโมของรางวัลบล็อกทุกอันว่าง เอาต์พุต coinbase ของเชนจึงใช้เป็นช่องทางข้อความสาธารณะไม่ได้
ทำไมเมโมทุกอันจึงดูเหมือนกันบนเชน
เมโมที่เผยความยาวจะเปิดเผยข้อมูลบางอย่าง ข้อความ 30 bytes ดูต่างจาก 100 bytes และเมโมว่างก็ต่างจากทั้งสอง กระเป๋าเงิน Blocknet ปิดช่องนี้ด้วยโครงสร้างคงที่และข้อมูลเติมแบบสุ่ม
ก่อนเข้ารหัส กระเป๋าเงินบรรจุเมโมในซอง 128 bytes:
| Bytes | เนื้อหา |
|---|---|
| 1 | เวอร์ชันซองข้อมูล |
| 1 | ความยาวเมโม |
| 2 | เช็กซัมของเมโม |
| 0 ถึง 124 | เมโมของคุณ |
| ส่วนที่เหลือ | ข้อมูลเติมแบบสุ่ม |
ข้อมูลเติมมาจากตัวสร้างเลขสุ่มทางวิทยาการเข้ารหัสของระบบ พื้นที่ที่ไม่ได้ใช้จึงคาดเดาไม่ได้ หลังเข้ารหัส ข้อความสั้น ข้อความเต็ม และเมโมว่างล้วนเป็นข้อมูล 128 bytes ที่ดูสุ่ม เอาต์พุตเงินทอนก็มีเมโมว่างพร้อมข้อมูลเติมของตัวเอง แม้แต่เหรียญที่คุณส่งกลับให้ตัวเองจึงดูกลมกลืน
เช็กซัมช่วยให้กระเป๋าเงินผู้รับยืนยันว่าถอดรหัสถูกต้องก่อนแสดงเมโม โหนดยังปฏิเสธบล็อกที่มีเอาต์พุตซึ่งช่องเมโมเป็นศูนย์ทั้งหมด ทุกเอาต์พุตบนเชนจึงมีช่องเมโมที่บรรจุข้อมูลอย่างถูกต้อง
หาเมโมที่ได้รับได้ที่ไหน
กระเป๋าเงินแบบบรรทัดคำสั่งแสดงเมโมในจุดที่แสดงรายการจ่าย:
historyแสดงการจ่ายขาเข้าและขาออก พร้อมบรรทัดmemo:ใต้การจ่ายที่มีเมโมoutputs tx <txid>แสดงทุกเอาต์พุตในธุรกรรมนั้นที่กระเป๋าเงินเป็นเจ้าของ รวมเมโมoutputs <n>ทำแบบเดียวกันสำหรับเอาต์พุตหนึ่งรายการ- API กระเป๋าเงิน ส่งเมโมของแต่ละเอาต์พุตที่ได้รับเป็น
memo_hexจากGET /api/wallet/historyพร้อมให้ระบบคำสั่งซื้อจับคู่กับใบแจ้งหนี้
เมโมข้อความแสดงในอัญประกาศ ส่วนเมโมที่ไม่ใช่ข้อความพิมพ์ได้ เช่น 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" กระเป๋าเงินจะค้นหาที่อยู่จากชื่อ แสดงที่อยู่ที่ตรวจสอบแล้ว ค่าธรรมเนียมและเมโม แล้วขอให้ยืนยัน เมโมถูกเข้ารหัสสำหรับกระเป๋าเงินที่ชื่อนั้นชี้ไป