Lightning-cli發票標籤中的最大字節大小或字元限制是多少?是否接受 UTF-8 字元?
我正在用 C 語言編寫一個腳本,目的是讓我的 c-lightning 錢包的使用更加方便。所以我必須指定一個字元限制(
l
是一個代表標籤的變數):puts("The label(a unique string or number)?"); char l[15]; fgets(l, 15, stdin); l[strcspn(l, "\n")] = 0;
我隨意決定15不知道是否
lightning-cli invoice
會接受這麼長的字元串。雖然help invoice
提供了一些關於標籤的資訊:標籤必須是唯一的字元串或數字(將其視為字元串,因此“01”與“1”不同);它永遠不會透露給閃電網路上的其他節點,但可以用來查詢這張發票的狀態。
它沒有指定它的長度,也沒有指定它的字元集?標籤中是否接受UTF-8 字元,還是應該只使用ASCII字元集?標籤的最大大小/字元數是多少?
如果您查看原始碼,您可以在以下位置找到用於儲存發票的 SQLite3 數據庫的數據庫架構:https ://github.com/ElementsProject/lightning/blob/426ff0abfff8b080b22095b9f0b670c7192f54ea/wallet/db.c#L185
這表明標籤欄位的類型是 TEXT。根據 SQLite3 文件,這意味著:
文本。該值是一個文本字元串,使用數據庫編碼(UTF-8、UTF-16BE 或 UTF-16LE)儲存。
當然你需要檢查一下閃電是否也能處理這麼長的字元串。標籤儲存在
invoice_details
其中定義為:<https://github.com/ElementsProject/lightning/blob/335ef3fb69f923f6f30213f68881d10ee6d977ed/wallet/wallet.h#L777>
從那裡你可以看到它的類型
* json_escape
來自 rusty 的 ccan 庫,定義在:<https://github.com/ElementsProject/lightning/blob/ade10e7fc4dacbb9d635b05152c7dc38c0896ce7/ccan/ccan/json_escape/json_escape.h>
那裡說:
/* Type differentiation for a correctly-escaped JSON string */ struct json_escape { /* NUL terminated string. */ char s[1]; }; /** * json_escape - escape a valid UTF-8 string. * @ctx: tal context to allocate from. * @str: the string to escape. * * Allocates and returns a valid JSON string (without surrounding quotes). */ struct json_escape *json_escape(const tal_t *ctx, const char *str TAKES);
據我了解,這確實表明只要您有記憶體和磁碟,您就應該能夠儲存任意長度的 UTF-8 字元串。