Skip to content

Commit bf3216b

Browse files
committed
fix: unify rosetta operation schemas
1 parent 8ec29fb commit bf3216b

File tree

3 files changed

+64
-51
lines changed

3 files changed

+64
-51
lines changed

components/client/typescript/src/schemas/bitcoin/payload.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
import { Static, Type } from '@sinclair/typebox';
2-
import { Nullable, BlockIdentifierSchema, TransactionIdentifierSchema } from '../common';
2+
import {
3+
Nullable,
4+
BlockIdentifierSchema,
5+
TransactionIdentifierSchema,
6+
RosettaOperationSchema,
7+
} from '../common';
38

49
export const BitcoinInscriptionRevealedSchema = Type.Object({
510
content_bytes: Type.String(),
@@ -49,7 +54,7 @@ export type BitcoinTransactionMetadata = Static<typeof BitcoinTransactionMetadat
4954

5055
export const BitcoinTransactionSchema = Type.Object({
5156
transaction_identifier: TransactionIdentifierSchema,
52-
operations: Type.Array(Type.Any()),
57+
operations: Type.Array(RosettaOperationSchema),
5358
metadata: BitcoinTransactionMetadataSchema,
5459
});
5560
export type BitcoinTransaction = Static<typeof BitcoinTransactionSchema>;

components/client/typescript/src/schemas/common.ts

+55-2
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,63 @@ import { Static, TSchema, Type } from '@sinclair/typebox';
22

33
export const Nullable = <T extends TSchema>(type: T) => Type.Union([type, Type.Null()]);
44

5-
export const OperationIdentifierSchema = Type.Object({
5+
export const RosettaOperationIdentifierSchema = Type.Object({
66
index: Type.Integer(),
7+
network_index: Type.Optional(Type.Integer()),
78
});
8-
export type OperationIdentifier = Static<typeof OperationIdentifierSchema>;
9+
export type RosettaOperationIdentifier = Static<typeof RosettaOperationIdentifierSchema>;
10+
11+
export const RosettaOperationTypeSchema = Type.Union([
12+
Type.Literal('CREDIT'),
13+
Type.Literal('DEBIT'),
14+
Type.Literal('LOCK'),
15+
]);
16+
export type RosettaOperationType = Static<typeof RosettaOperationTypeSchema>;
17+
18+
export const RosettaOperationAccountSchema = Type.Object({
19+
address: Type.String(),
20+
sub_account: Type.Optional(Type.String()),
21+
});
22+
export type RosettaOperationAccount = Static<typeof RosettaOperationAccountSchema>;
23+
24+
export const RosettaOperationAmountSchema = Type.Object({
25+
currency: Type.Object({
26+
decimals: Type.Integer(),
27+
symbol: Type.String(),
28+
metadata: Type.Object({
29+
asset_class_identifier: Type.String(),
30+
asset_identifier: Nullable(Type.String()),
31+
standard: Type.String(),
32+
}),
33+
}),
34+
value: Type.Integer(),
35+
});
36+
export type RosettaOperationAmount = Static<typeof RosettaOperationAmountSchema>;
37+
38+
export const RosettaOperationPublicKeySchema = Type.Object({
39+
hex_bytes: Type.Optional(Type.String()),
40+
curve_type: Type.String(),
41+
});
42+
export type RosettaOperationPublicKey = Static<typeof RosettaOperationPublicKeySchema>;
43+
44+
export const RosettaOperationMetadataSchema = Type.Object({
45+
public_key: Type.Optional(RosettaOperationPublicKeySchema),
46+
code: Type.Optional(Type.String()),
47+
method_name: Type.Optional(Type.String()),
48+
args: Type.Optional(Type.String()),
49+
});
50+
export type RosettaOperationMetadata = Static<typeof RosettaOperationMetadataSchema>;
51+
52+
export const RosettaOperationSchema = Type.Object({
53+
account: RosettaOperationAccountSchema,
54+
amount: Type.Optional(RosettaOperationAmountSchema),
55+
metadata: Type.Optional(RosettaOperationMetadataSchema),
56+
operation_identifier: RosettaOperationIdentifierSchema,
57+
related_operations: Type.Optional(Type.Array(RosettaOperationIdentifierSchema)),
58+
status: Type.Optional(Type.Literal('SUCCESS')),
59+
type: RosettaOperationTypeSchema,
60+
});
61+
export type RosettaOperation = Static<typeof RosettaOperationSchema>;
962

1063
export const BlockIdentifierSchema = Type.Object({
1164
index: Type.Integer(),

components/client/typescript/src/schemas/stacks/payload.ts

+2-47
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Static, Type } from '@sinclair/typebox';
22
import {
33
BlockIdentifierSchema,
44
Nullable,
5-
OperationIdentifierSchema,
5+
RosettaOperationSchema,
66
TransactionIdentifierSchema,
77
} from '../common';
88
import { StacksTransactionEventSchema } from './tx_events';
@@ -53,54 +53,9 @@ export const StacksTransactionMetadataSchema = Type.Object({
5353
});
5454
export type StacksTransactionMetadata = Static<typeof StacksTransactionMetadataSchema>;
5555

56-
export const StacksOperationAccountSchema = Type.Object({
57-
address: StacksPrincipalSchema,
58-
sub_account: Type.Optional(StacksPrincipalSchema),
59-
});
60-
export type StacksOperationAccount = Static<typeof StacksOperationAccountSchema>;
61-
62-
export const StacksOperationAmountSchema = Type.Object({
63-
currency: Type.Object({
64-
decimals: Type.Integer(),
65-
symbol: Type.String(),
66-
metadata: Type.Object({
67-
asset_class_identifier: Type.String(),
68-
asset_identifier: Nullable(Type.String()),
69-
standard: Type.String(),
70-
}),
71-
}),
72-
value: Type.Integer(),
73-
});
74-
export type StacksOperationAmount = Static<typeof StacksOperationAmountSchema>;
75-
76-
export const StacksOperationPublicKeySchema = Type.Object({
77-
hex_bytes: Type.Optional(Type.String()),
78-
curve_type: Type.String(),
79-
});
80-
export type StacksOperationPublicKey = Static<typeof StacksOperationPublicKeySchema>;
81-
82-
export const StacksOperationMetadataSchema = Type.Object({
83-
public_key: Type.Optional(StacksOperationPublicKeySchema),
84-
code: Type.Optional(Type.String()),
85-
method_name: Type.Optional(Type.String()),
86-
args: Type.Optional(Type.String()),
87-
});
88-
export type StacksOperationMetadata = Static<typeof StacksOperationMetadataSchema>;
89-
90-
export const StacksOperationSchema = Type.Object({
91-
account: StacksOperationAccountSchema,
92-
amount: Type.Optional(StacksOperationAmountSchema),
93-
metadata: Type.Optional(StacksOperationMetadataSchema),
94-
operation_identifier: OperationIdentifierSchema,
95-
related_operations: Type.Optional(Type.Array(OperationIdentifierSchema)),
96-
status: Type.Optional(Type.Literal('SUCCESS')),
97-
type: Type.Union([Type.Literal('CREDIT'), Type.Literal('DEBIT'), Type.Literal('LOCK')]),
98-
});
99-
export type StacksOperation = Static<typeof StacksOperationSchema>;
100-
10156
const StacksTransactionSchema = Type.Object({
10257
transaction_identifier: TransactionIdentifierSchema,
103-
operations: Type.Array(StacksOperationSchema),
58+
operations: Type.Array(RosettaOperationSchema),
10459
metadata: StacksTransactionMetadataSchema,
10560
});
10661
export type StacksTransaction = Static<typeof StacksTransactionSchema>;

0 commit comments

Comments
 (0)