DRD List Set — Group 16, Code 144
Adds or updates entries on the caller’s white/black list, in batches of one or more 6-byte entries. Whitelisted users can send the owner QMail without paying the inbox fee; blacklisted users are denied. Setting an entry that already exists flips its type.
Quick reference
| Command Group | 16 (DRD) |
| Command Code | 144 (0x90) |
| Server function | cmd_drd_list_set in cmd_drd.c |
| Request body | challenge(16) + owner DN(1) SN(4) AN(16) + N × entry(6) + terminator(2). Minimum 45 bytes (N = 1). |
| Authentication | Owner AN — only the list owner can modify it |
| Batch validation | All entries validated before any write; a bad entry rejects the whole batch |
| Success response | Status 250, no payload |
| Semantics | Upsert per entry: new entries are added, existing entries have their type replaced |
Request body
Diagram shows a single-entry request (45 bytes). Each additional entry appends 6 bytes before the terminator. LDN/LSN = listed user’s denomination/serial; TY = list type (00 white, 01 black).
Request body layout, N entries
+-------------------+------------------------------+------------------------+------------+
| challenge/CRC | owner identity + auth | N x 6-byte entries | terminator |
| 16 bytes | DN(1) SN(4) AN(16) | LDN(1) LSN(4) TY(1) | 2 bytes |
+-------------------+------------------------------+------------------------+------------+
| body[0..15] | body[16..36] | body[37..37+6N-1] | 3E 3E |
+-------------------+------------------------------+------------------------+------------+
total = 39 + 6N bytes
| Body offset | Size | Field | Description |
|---|---|---|---|
| 0–15 | 16 | Challenge | 12 random bytes + big-endian CRC32 of them. |
| 16 | 1 | Owner denomination | List owner’s coin denomination. |
| 17–20 | 4 | Owner serial number | List owner’s coin serial number, big-endian. |
| 21–36 | 16 | Owner AN | Verified against the coin database before anything is written. |
| 37 + 6i | 1 | Listed denomination | Entry i: denomination of the user being listed. |
| 38 + 6i | 4 | Listed serial number | Entry i: serial of the user being listed, big-endian. |
| 42 + 6i | 1 | List type | 0x00 whitelist, 0x01 blacklist. Any other value rejects the whole batch. |
| last 2 | 2 | Terminator | Fixed 3E 3E. The entry region must be an exact multiple of 6 bytes. |
Response
Status-only. 250 means every entry in the batch was written (added or type-updated). On ERROR_INVALID_PARAMETER (bad list type) nothing was written — entries are validated before the first database write.
Status codes
| Decimal | Hex | Symbol | Meaning |
|---|---|---|---|
| 250 | 0xFA | STATUS_SUCCESS | All entries written. |
| 16 | 0x10 | ERROR_INVALID_PACKET_LENGTH | Body under 45 bytes. |
| 39 | 0x27 | ERROR_COINS_NOT_DIV | Entry region is not a multiple of 6 bytes. |
| 40 | 0x28 | ERROR_INVALID_SN_OR_DENOMINATION | Owner denomination/serial is not a coin this RAIDA holds. |
| 198 | 0xC6 | ERROR_INVALID_PARAMETER | A list type byte was neither 0x00 nor 0x01. Nothing written. |
| 200 | 0xC8 | ERROR_INVALID_AN | Owner AN mismatch. Nothing written. |
| 252 | 0xFC | ERROR_INTERNAL | Database failure mid-batch; earlier entries in this request may have been written. Safe to retry — the operation is idempotent. |
Common mistakes
Listed users are not validated
The listed denomination/serial is stored as-is. You can whitelist a user who has no directory record yet (or ever); the entry simply applies whenever that coin identity sends mail.
White and black are one table
A user cannot be on both lists. Setting an existing entry with a different type moves them between lists; it does not create a second entry.