Κρυπτογραφημένα memos στις πληρωμές Blocknet

· Ανάγνωση: 6 λεπ.

Κάθε πληρωμή Blocknet μπορεί να μεταφέρει μια σύντομη κρυπτογραφημένη σημείωση. Μπορείτε να τη χρησιμοποιήσετε για αριθμό τιμολογίου, κωδικό παραγγελίας ή μήνυμα προς τον άνθρωπο που πληρώνετε, και μόνο εσείς οι δύο μπορείτε να τη διαβάσετε. Αυτός ο οδηγός δείχνει πώς να προσθέσετε ένα memo όταν στέλνετε BNT, ποιος μπορεί να το διαβάσει, γιατί τα memos δεν ξεχωρίζουν ποτέ στην αλυσίδα και πού θα βρείτε τα memos που λαμβάνετε.

Τι είναι ένα memo στο Blocknet;

Ένα memo στο Blocknet είναι ένα κρυπτογραφημένο πεδίο 128 bytes που συνοδεύει κάθε έξοδο συναλλαγής. Χωρά έως 124 bytes δικού σας κειμένου ή δεδομένων, όπως έναν αριθμό τιμολογίου ή μια σύντομη σημείωση. Κρυπτογραφείται με ένα μυστικό που μοιράζονται μόνο ο αποστολέας και ο παραλήπτης και συμπληρώνεται ώστε ένα κενό memo να μοιάζει με γεμάτο.

Το memo είναι μέρος της ίδιας της μορφής των συναλλαγών. Κάθε έξοδος στην αλυσίδα έχει ένα, ακόμη και οι έξοδοι ρέστων που επιστρέφουν νομίσματα στο δικό σας πορτοφόλι. Αυτό δίνει τρεις χρήσιμες ιδιότητες:

Τι μπορείτε να βάλετε σε ένα memo;

Οτιδήποτε χωράει σε 124 bytes. Το απλό κείμενο αποθηκεύεται ως UTF-8, οπότε στα αγγλικά αυτό σημαίνει 124 γράμματα, ψηφία και κενά. Οι χαρακτήρες εκτός του λατινικού αλφαβήτου πιάνουν περισσότερα bytes: ένας κινεζικός χαρακτήρας πιάνει τρία, οπότε ένα memo χωρά περίπου 41 από αυτούς.

Συνηθισμένες χρήσεις:

Πώς προσθέτετε memo όταν στέλνετε BNT;

Σύντομη απάντηση

Στο πορτοφόλι γραμμής εντολών, πληκτρολογήστε το memo μετά το ποσό: send @rock 100 “invoice 1042”. Το πορτοφόλι δείχνει το memo στην οθόνη επιβεβαίωσης δίπλα στη χρέωση, το κρυπτογραφεί για τον παραλήπτη και στέλνει την πληρωμή μόλις επιβεβαιώσετε. Λειτουργούν και ακατέργαστα bytes, με το πρόθεμα hex:.

Η εντολή send του πορτοφολιού δέχεται το memo ως προαιρετικό τελευταίο όρισμα:

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

Ένα memo μπορεί να περιέχει κενά, και τα εισαγωγικά γύρω του είναι προαιρετικά. Το πορτοφόλι αφαιρεί ένα ζεύγος εισαγωγικών που ταιριάζουν πριν κρυπτογραφήσει το κείμενο. Ορίστε μια πληρωμή σε ένα όνομα 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

Το βήμα επιβεβαίωσης δείχνει το memo που θα διαβάσει ο παραλήπτης, ώστε να το ελέγξετε πριν σταλεί οτιδήποτε. Αν ένα memo είναι μεγαλύτερο από 124 bytes, το πορτοφόλι σταματά πριν δημιουργήσει τη συναλλαγή με το μήνυμα memo too long: max 124 bytes, και μπορείτε να το συντομεύσετε και να δοκιμάσετε ξανά.

Για να στείλετε ακατέργαστα bytes, βάλτε μπροστά από το memo το hex:. Το πορτοφόλι αποκωδικοποιεί το hex και κρυπτογραφεί τα bytes:

send @rock 100 hex:494e562d31303432

Και οι σύνδεσμοι πληρωμής μπορούν να μεταφέρουν memo. Όταν επικολλάτε έναν σύνδεσμο blocknet:// ή bntpay.com στο πορτοφόλι, συμπληρώνει τη διεύθυνση, το ποσό και το memo για να τα επιβεβαιώσετε, ώστε αυτός που πληρώνετε να μπορεί να ορίσει εκ των προτέρων τον κωδικό του τιμολογίου. Μπορείτε να διαβάσετε περισσότερα για τα ονόματα και τους συνδέσμους στον οδηγό Blocknet ID.

Memos από το δικό σας λογισμικό

Το API του πορτοφολιού δέχεται ένα memo για κάθε παραλήπτη μιας αποστολής. Σε ένα αίτημα προς 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. Κάθε παραλήπτης παίρνει το δικό του memo, κρυπτογραφημένο μόνο για το δικό του πορτοφόλι. Ισχύει το ίδιο όριο των 124 bytes.

Ποιος μπορεί να διαβάσει ένα memo του Blocknet;

Σύντομη απάντηση

Ο αποστολέας και ο παραλήπτης. Κάθε memo κρυπτογραφείται με το μυστικό που μοιράζονται τα δύο πορτοφόλια για τη συγκεκριμένη έξοδο, το ίδιο μυστικό που δημιουργεί τη stealth διεύθυνση μίας χρήσης του παραλήπτη. Οποιοσδήποτε άλλος, μαζί με τους διαχειριστές κόμβων και τους block explorers, βλέπει 128 bytes δεδομένων που μοιάζουν τυχαία και δεν μπορεί να καταλάβει αν υπάρχει σημείωση μέσα.

Όταν το πορτοφόλι σας δημιουργεί μια πληρωμή, συνδυάζει ένα νέο τυχαίο κλειδί συναλλαγής με το δημόσιο κλειδί προβολής (view key) του παραλήπτη για να πάρει ένα κοινό μυστικό. Αυτό το μυστικό δημιουργεί τη stealth διεύθυνση μίας χρήσης του παραλήπτη, και το πορτοφόλι το χρησιμοποιεί επίσης για να κρυπτογραφήσει το memo. Περνά το μυστικό από SHA3-256, μαζί με τη θέση της εξόδου στη συναλλαγή και το αναγνωριστικό του δικτύου, για να φτιάξει μια μάσκα 128 bytes, και μετά συνδυάζει τη μάσκα με το memo. Κάθε έξοδος παίρνει τη δική της μάσκα, οπότε δύο memos στην ίδια συναλλαγή κρυπτογραφούνται χωριστά.

Το πορτοφόλι του παραλήπτη βρίσκει το ίδιο μυστικό από την άλλη πλευρά, χρησιμοποιώντας το ιδιωτικό κλειδί προβολής του, καθώς σαρώνει κάθε μπλοκ. Αποκρυπτογραφεί το memo και το αποθηκεύει μαζί με την πληρωμή. Από τη δική σας πλευρά, το πορτοφόλι κρατά τα memos που γράψατε στο ιστορικό αποστολών.

Δύο σημεία που αξίζει να ξέρετε:

Γιατί κάθε memo φαίνεται ίδιο στην αλυσίδα

Ένα memo που έδειχνε το μήκος του θα πρόδιδε κάτι. Μια σημείωση 30 bytes φαίνεται διαφορετική από μια σημείωση 100 bytes, και ένα κενό memo θα ξεχώριζε και από τις δύο. Το πορτοφόλι του Blocknet κλείνει αυτό το κενό με σταθερή διάταξη και τυχαία συμπλήρωση.

Πριν από την κρυπτογράφηση, το πορτοφόλι πακετάρει το memo σε έναν φάκελο 128 bytes:

Bytes Περιεχόμενο
1 Έκδοση φακέλου
1 Μήκος του memo σας
2 Άθροισμα ελέγχου του memo
0 έως 124 Το memo σας
Τα υπόλοιπα Τυχαία συμπλήρωση

Η συμπλήρωση προέρχεται από την κρυπτογραφική γεννήτρια τυχαίων αριθμών του συστήματος, οπότε ο αχρησιμοποίητος χώρος είναι απρόβλεπτος. Μετά την κρυπτογράφηση, μια σύντομη σημείωση, μια γεμάτη σημείωση και ένα κενό memo είναι όλα 128 bytes δεδομένων που μοιάζουν τυχαία. Οι έξοδοι ρέστων παίρνουν το δικό τους κενό, συμπληρωμένο memo, οπότε ακόμη και τα νομίσματα που στέλνετε πίσω στον εαυτό σας δεν ξεχωρίζουν.

Το άθροισμα ελέγχου επιτρέπει στο πορτοφόλι του παραλήπτη να επιβεβαιώσει ότι αποκρυπτογράφησε σωστά το memo πριν το εμφανίσει. Οι κόμβοι επίσης απορρίπτουν κάθε μπλοκ που περιέχει έξοδο με πεδίο memo γεμάτο μηδενικά, οπότε κάθε έξοδος στην αλυσίδα έχει ένα σωστά συμπληρωμένο memo.

Πού θα βρείτε τα memos που λάβατε

Το πορτοφόλι γραμμής εντολών δείχνει τα memos όπου εμφανίζει πληρωμές:

Τα memos κειμένου εμφανίζονται σε εισαγωγικά. Ένα memo που δεν είναι εκτυπώσιμο κείμενο, όπως ακατέργαστα bytes που στάλθηκαν με hex:, εμφανίζεται σε hex.

Αν μια πληρωμή χρειαστεί ποτέ διευθέτηση, ο αποστολέας μπορεί να την αποδείξει. Η εντολή prove <txid> του πορτοφολιού τυπώνει το κλειδί συναλλαγής για μια πληρωμή που στείλατε. Οποιοσδήποτε έχει αυτό το κλειδί, το αναγνωριστικό της συναλλαγής και τη διεύθυνση του παραλήπτη μπορεί να ελέγξει την πληρωμή μέσω του endpoint POST /api/verify-proof, που δεν χρειάζεται πορτοφόλι. Επιβεβαιώνει τη συναλλαγή και δείχνει τις εξόδους που έλαβε αυτή η διεύθυνση, τα ποσά τους και τα memos τους.

Κερδίστε τα BNT που θα στείλετε

Ένας απλός τρόπος να αποκτήσετε τα πρώτα σας BNT είναι να τα εξορύξετε. Το seine τρέχει στον δικό σας υπολογιστή, ρυθμίζεται μόνο του όσο κάνει εξόρυξη και πληρώνει μέσω του bntpool.com απευθείας στη διεύθυνσή σας ή στο @name σας. Ο οδηγός εξόρυξης το βάζει σε λειτουργία μέσα σε λίγα λεπτά.

Συχνές ερωτήσεις

Πόσο μεγάλο μπορεί να είναι ένα memo στο Blocknet;

Ένα memo χωρά έως 124 bytes. Το απλό κείμενο αποθηκεύεται ως UTF-8, οπότε αυτό σημαίνει 124 λατινικά γράμματα, ψηφία ή σημεία στίξης στα αγγλικά, ή περίπου 41 κινεζικούς χαρακτήρες των τριών bytes ο καθένας. Το πορτοφόλι σταματά ένα μεγαλύτερο memo πριν δημιουργήσει τη συναλλαγή και σας ενημερώνει για το όριο των 124 bytes.

Μπορεί ένας block explorer να διαβάσει ένα memo του Blocknet;

Όχι. Ένας explorer δείχνει το πεδίο memo ως 128 bytes κρυπτογραφημένου κειμένου με την ένδειξη ότι είναι κρυπτογραφημένο. Το κλειδί προέρχεται από το μυστικό που μοιράζονται ο αποστολέας και ο παραλήπτης για τη συγκεκριμένη έξοδο, οπότε μόνο τα πορτοφόλια τους μπορούν να το ανοίξουν. Επειδή κάθε memo συμπληρώνεται μέχρι το πλήρες μέγεθος, ένας explorer δεν μπορεί καν να καταλάβει ποιες έξοδοι έχουν σημείωση.

Κάνει ένα memo μεγαλύτερη μια συναλλαγή Blocknet;

Όχι. Κάθε έξοδος έχει ήδη ένα κρυπτογραφημένο πεδίο memo 128 bytes, είτε γράψετε σημείωση είτε το αφήσετε κενό. Η προσθήκη ενός memo γεμίζει χώρο που υπάρχει έτσι κι αλλιώς, οπότε μια πληρωμή με αριθμό τιμολογίου έχει ακριβώς το ίδιο μέγεθος με την ίδια πληρωμή χωρίς αυτόν, και οι δύο φαίνονται ίδιες στην αλυσίδα.

Μπορώ να προσθέσω memo όταν πληρώνω ένα όνομα Blocknet ID;

Ναι. Βάλτε το όνομα εκεί που μπαίνει η διεύθυνση και το memo μετά το ποσό, για παράδειγμα send @rock 100 "invoice 1042". Το πορτοφόλι επιλύει το όνομα, δείχνει την επαληθευμένη διεύθυνση, τη χρέωση και το memo και σας ζητά επιβεβαίωση. Το memo κρυπτογραφείται για το πορτοφόλι στο οποίο οδηγεί το όνομα.