ledger_transactions
ledger_transactions, accepted stream için best-effort integrity trail tablosudur. Stream başarılı olsa bile ledger yazımı ayrı adımda çalışır; bu tablo denetim izi ve zincir bütünlüğü için kullanılır.
- accepted verinin hash-zincirli denetim izini tutmak
- değişmezlik / audit ihtiyacına taban hazırlamak
- cihaz bazlı zincirli kayıt oluşturmak
Kolonlar
| Kolon | Tip | Null | Anlamı |
|---|---|---|---|
id | bigint | hayır | Ledger kaydı anahtarı |
device_id | varchar(21) | hayır | Cihaz |
stream_id | int | hayır | İlgili accepted stream |
device_time | timestamp | hayır | Ölçüm zamanı |
payload | json | hayır | Accepted payload / snapshot |
payload_hash | varchar(64) | hayır | Payload hash’i |
previous_hash | varchar(64) | hayır | Önceki zincir halkası |
transaction_hash | varchar(64) | hayır | Bu halkaya ait hash |
source_signature | text | evet | Kaynak imzası varsa |
create_time | timestamp | hayır | Oluşturma zamanı |
payload_hash ve transaction_hash alanları unique olmalıdır. Ayrıca aynı cihaz ve stream için ledger kaydının tekilleşmesi amacıyla (device_id, stream_id) birleşik alanı da unique kabul edilir.
İndeksler
| İndeks | Amacı |
|---|---|
(payload_hash) unique | Aynı payload'ın tekrar zincire yazılmasını engellemek için |
(transaction_hash) unique | Zincir halkası kimliğini tekilleştirmek için |
(device_id, stream_id) unique | Bir stream için cihaz bazında tek ledger kaydı tutmak için |
Örnek Kayıtlar
- Cihaz 1
- Cihaz 2
- Cihaz 3
{
"id": 1,
"device_id": "46000000C47CA670",
"stream_id": 1,
"device_time": "2026-04-03T10:29:50Z",
"payload": {
"device_id": "46000000C47CA670",
"stream_id": 1,
"device_time": "2026-04-03T10:29:50Z",
"measurements": [
{"variable_id": "IFUND_R", "value": 42.300000},
{"variable_id": "IFUND_S", "value": 41.800000},
{"variable_id": "IFUND_T", "value": 42.600000},
{"variable_id": "VRMS_R", "value": 229.400000},
{"variable_id": "VRMS_S", "value": 228.900000},
{"variable_id": "VRMS_T", "value": 230.100000},
{"variable_id": "VRMS_A", "value": 229.466667}
]
},
"payload_hash": "1111111111111111111111111111111111111111111111111111111111111111",
"previous_hash": "0000000000000000000000000000000000000000000000000000000000000000",
"transaction_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"source_signature": null,
"create_time": "2026-04-03T10:30:01Z"
}
Özet: Birinci stream için ledger halkası oluşturulmuş; payload snapshot hash-zincire bağlanmış.
{
"id": 2,
"device_id": "46000000C47CA671",
"stream_id": 2,
"device_time": "2026-04-03T10:24:55Z",
"payload": {
"device_id": "46000000C47CA671",
"stream_id": 2,
"device_time": "2026-04-03T10:24:55Z",
"measurements": [
{"variable_id": "TEMP", "value": 24.700000},
{"variable_id": "HUM", "value": 48.200000}
]
},
"payload_hash": "2222222222222222222222222222222222222222222222222222222222222222",
"previous_hash": "0000000000000000000000000000000000000000000000000000000000000000",
"transaction_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"source_signature": null,
"create_time": "2026-04-03T10:25:01Z"
}
Özet: İkinci cihaz için ledger kaydı da aynı sözleşmeyle yazılmış; düşük yoğunluklu generic ölçümler de payload içine dahil edilmiş.
{
"id": 3,
"device_id": "46000000C47CA672",
"stream_id": 3,
"device_time": "2026-04-03T10:19:57Z",
"payload": {
"device_id": "46000000C47CA672",
"stream_id": 3,
"device_time": "2026-04-03T10:19:57Z",
"measurements": [
{"variable_id": "REGISTER_STATUS", "value": 5.000000}
]
},
"payload_hash": "3333333333333333333333333333333333333333333333333333333333333333",
"previous_hash": "0000000000000000000000000000000000000000000000000000000000000000",
"transaction_hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"source_signature": null,
"create_time": "2026-04-03T10:20:01Z"
}
Özet: Üçüncü stream için register ağırlıklı payload snapshot'ı ledger'a yazılmış; farklı payload tipleri aynı zincir sözleşmesiyle saklanabiliyor.