Skip to content

Commit 7dc98dd

Browse files
chore: add stream info on attestation metadata (#144)
1 parent 149121c commit 7dc98dd

File tree

2 files changed

+36
-8
lines changed

2 files changed

+36
-8
lines changed

src/contracts-api/attestationAction.ts

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -291,40 +291,48 @@ export class AttestationAction extends Action {
291291
* 0. request_tx_id (TEXT)
292292
* 1. attestation_hash (BYTEA)
293293
* 2. requester (BYTEA)
294-
* 3. created_height (INT8)
295-
* 4. signed_height (INT8, nullable)
296-
* 5. encrypt_sig (BOOLEAN)
294+
* 3. data_provider (TEXT)
295+
* 4. stream_id (TEXT)
296+
* 5. created_height (INT8)
297+
* 6. signed_height (INT8, nullable)
298+
* 7. encrypt_sig (BOOLEAN)
297299
*/
298300
function parseAttestationRow(row: any, idx: number): AttestationMetadata {
299301
// kwil-js returns rows as objects with column names as keys
300302
// or as arrays depending on the query format
301303
let requestTxId: string;
302304
let attestationHash: Uint8Array;
303305
let requester: Uint8Array;
306+
let dataProvider: string;
307+
let streamId: string;
304308
let createdHeight: number;
305309
let signedHeight: number | null;
306310
let encryptSig: boolean;
307311

308312
// Handle both array and object formats
309313
if (Array.isArray(row)) {
310314
// Array format: [col0, col1, col2, ...]
311-
if (row.length < 6) {
315+
if (row.length < 8) {
312316
throw new Error(
313-
`Row ${idx}: expected 6 columns, got ${row.length}`
317+
`Row ${idx}: expected 8 columns, got ${row.length}`
314318
);
315319
}
316320

317321
requestTxId = row[0];
318322
attestationHash = decodeBytea(row[1], idx, 'attestation_hash');
319323
requester = decodeBytea(row[2], idx, 'requester');
320-
createdHeight = parseInt(row[3], 10);
321-
signedHeight = row[4] !== null ? parseInt(row[4], 10) : null;
322-
encryptSig = row[5];
324+
dataProvider = row[3];
325+
streamId = row[4];
326+
createdHeight = parseInt(row[5], 10);
327+
signedHeight = row[6] !== null ? parseInt(row[6], 10) : null;
328+
encryptSig = row[7];
323329
} else {
324330
// Object format: { request_tx_id: ..., attestation_hash: ..., ... }
325331
requestTxId = row.request_tx_id;
326332
attestationHash = decodeBytea(row.attestation_hash, idx, 'attestation_hash');
327333
requester = decodeBytea(row.requester, idx, 'requester');
334+
dataProvider = row.data_provider;
335+
streamId = row.stream_id;
328336
createdHeight = parseInt(row.created_height, 10);
329337
signedHeight = row.signed_height !== null ? parseInt(row.signed_height, 10) : null;
330338
encryptSig = row.encrypt_sig;
@@ -334,6 +342,8 @@ function parseAttestationRow(row: any, idx: number): AttestationMetadata {
334342
requestTxId,
335343
attestationHash,
336344
requester,
345+
dataProvider,
346+
streamId,
337347
createdHeight,
338348
signedHeight,
339349
encryptSig,
@@ -412,6 +422,8 @@ if (import.meta.vitest) {
412422
'tx123',
413423
Buffer.from([1, 2, 3]).toString('base64'),
414424
Buffer.from([4, 5, 6]).toString('base64'),
425+
'0x4710a8d8f0d845da110086812a32de6d90d7ff5c',
426+
'stai0000000000000000000000000000',
415427
'100',
416428
'200',
417429
true,
@@ -422,6 +434,8 @@ if (import.meta.vitest) {
422434
expect(metadata.requestTxId).toBe('tx123');
423435
expect(Array.from(metadata.attestationHash)).toEqual([1, 2, 3]);
424436
expect(Array.from(metadata.requester)).toEqual([4, 5, 6]);
437+
expect(metadata.dataProvider).toBe('0x4710a8d8f0d845da110086812a32de6d90d7ff5c');
438+
expect(metadata.streamId).toBe('stai0000000000000000000000000000');
425439
expect(metadata.createdHeight).toBe(100);
426440
expect(metadata.signedHeight).toBe(200);
427441
expect(metadata.encryptSig).toBe(true);
@@ -432,6 +446,8 @@ if (import.meta.vitest) {
432446
request_tx_id: 'tx456',
433447
attestation_hash: Buffer.from([7, 8, 9]).toString('base64'),
434448
requester: Buffer.from([10, 11, 12]).toString('base64'),
449+
data_provider: '0x1234567890123456789012345678901234567890',
450+
stream_id: 'stbx0000000000000000000000000000',
435451
created_height: '300',
436452
signed_height: null,
437453
encrypt_sig: false,
@@ -442,6 +458,8 @@ if (import.meta.vitest) {
442458
expect(metadata.requestTxId).toBe('tx456');
443459
expect(Array.from(metadata.attestationHash)).toEqual([7, 8, 9]);
444460
expect(Array.from(metadata.requester)).toEqual([10, 11, 12]);
461+
expect(metadata.dataProvider).toBe('0x1234567890123456789012345678901234567890');
462+
expect(metadata.streamId).toBe('stbx0000000000000000000000000000');
445463
expect(metadata.createdHeight).toBe(300);
446464
expect(metadata.signedHeight).toBe(null);
447465
expect(metadata.encryptSig).toBe(false);

src/types/attestation.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,16 @@ export interface AttestationMetadata {
143143
*/
144144
requester: Uint8Array;
145145

146+
/**
147+
* Data provider address
148+
*/
149+
dataProvider: string;
150+
151+
/**
152+
* Stream ID
153+
*/
154+
streamId: string;
155+
146156
/**
147157
* Block height when attestation was created
148158
*/

0 commit comments

Comments
 (0)