@zofai/zo-sdk 0.2.14 → 0.2.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/abstract/BaseDataAPI.cjs +1 -1
- package/dist/abstract/BaseDataAPI.cjs.map +1 -1
- package/dist/abstract/BaseDataAPI.mjs +1 -1
- package/dist/abstract/BaseDataAPI.mjs.map +1 -1
- package/dist/consts/deployments-usdz-mainnet.json +1 -1
- package/dist/consts/deployments-zo-oracle-mainnet.json +329 -0
- package/dist/consts/index.cjs +35 -1
- package/dist/consts/index.cjs.map +1 -1
- package/dist/consts/index.d.cts +45 -0
- package/dist/consts/index.d.cts.map +1 -1
- package/dist/consts/index.d.mts +45 -0
- package/dist/consts/index.d.mts.map +1 -1
- package/dist/consts/index.mjs +31 -0
- package/dist/consts/index.mjs.map +1 -1
- package/dist/data.cjs +1 -1
- package/dist/data.cjs.map +1 -1
- package/dist/data.mjs +1 -1
- package/dist/data.mjs.map +1 -1
- package/dist/implementations/USDZAPI.cjs +426 -78
- package/dist/implementations/USDZAPI.cjs.map +1 -1
- package/dist/implementations/USDZAPI.d.cts +54 -0
- package/dist/implementations/USDZAPI.d.cts.map +1 -1
- package/dist/implementations/USDZAPI.d.mts +54 -0
- package/dist/implementations/USDZAPI.d.mts.map +1 -1
- package/dist/implementations/USDZAPI.mjs +427 -79
- package/dist/implementations/USDZAPI.mjs.map +1 -1
- package/dist/implementations/USDZDataAPI.cjs +38 -0
- package/dist/implementations/USDZDataAPI.cjs.map +1 -1
- package/dist/implementations/USDZDataAPI.d.cts +16 -0
- package/dist/implementations/USDZDataAPI.d.cts.map +1 -1
- package/dist/implementations/USDZDataAPI.d.mts +16 -0
- package/dist/implementations/USDZDataAPI.d.mts.map +1 -1
- package/dist/implementations/USDZDataAPI.mjs +38 -0
- package/dist/implementations/USDZDataAPI.mjs.map +1 -1
- package/dist/index.cjs +3 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -0
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +3 -0
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +3 -0
- package/dist/index.mjs.map +1 -1
- package/dist/interfaces/base.d.cts +19 -1
- package/dist/interfaces/base.d.cts.map +1 -1
- package/dist/interfaces/base.d.mts +19 -1
- package/dist/interfaces/base.d.mts.map +1 -1
- package/dist/interfaces/usdz.d.cts +17 -0
- package/dist/interfaces/usdz.d.cts.map +1 -1
- package/dist/interfaces/usdz.d.mts +17 -0
- package/dist/interfaces/usdz.d.mts.map +1 -1
- package/dist/oracle.cjs +119 -1
- package/dist/oracle.cjs.map +1 -1
- package/dist/oracle.d.cts +57 -1
- package/dist/oracle.d.cts.map +1 -1
- package/dist/oracle.d.mts +57 -1
- package/dist/oracle.d.mts.map +1 -1
- package/dist/oracle.mjs +120 -2
- package/dist/oracle.mjs.map +1 -1
- package/dist/oraclePro.cjs +214 -0
- package/dist/oraclePro.cjs.map +1 -0
- package/dist/oraclePro.d.cts +92 -0
- package/dist/oraclePro.d.cts.map +1 -0
- package/dist/oraclePro.d.mts +92 -0
- package/dist/oraclePro.d.mts.map +1 -0
- package/dist/oraclePro.mjs +196 -0
- package/dist/oraclePro.mjs.map +1 -0
- package/dist/pythProClient.cjs +277 -0
- package/dist/pythProClient.cjs.map +1 -0
- package/dist/pythProClient.d.cts +143 -0
- package/dist/pythProClient.d.cts.map +1 -0
- package/dist/pythProClient.d.mts +143 -0
- package/dist/pythProClient.d.mts.map +1 -0
- package/dist/pythProClient.mjs +269 -0
- package/dist/pythProClient.mjs.map +1 -0
- package/dist/storkClient.cjs +217 -0
- package/dist/storkClient.cjs.map +1 -0
- package/dist/storkClient.d.cts +90 -0
- package/dist/storkClient.d.cts.map +1 -0
- package/dist/storkClient.d.mts +90 -0
- package/dist/storkClient.d.mts.map +1 -0
- package/dist/storkClient.mjs +208 -0
- package/dist/storkClient.mjs.map +1 -0
- package/dist/storkOracle.cjs +61 -0
- package/dist/storkOracle.cjs.map +1 -0
- package/dist/storkOracle.d.cts +21 -0
- package/dist/storkOracle.d.cts.map +1 -0
- package/dist/storkOracle.d.mts +21 -0
- package/dist/storkOracle.d.mts.map +1 -0
- package/dist/storkOracle.mjs +56 -0
- package/dist/storkOracle.mjs.map +1 -0
- package/package.json +1 -1
- package/src/abstract/BaseDataAPI.ts +1 -1
- package/src/consts/deployments-usdz-mainnet.json +1 -1
- package/src/consts/deployments-zo-oracle-mainnet.json +329 -0
- package/src/consts/index.ts +80 -0
- package/src/data.ts +1 -1
- package/src/implementations/USDZAPI.ts +731 -101
- package/src/implementations/USDZDataAPI.ts +42 -0
- package/src/index.ts +3 -0
- package/src/interfaces/base.ts +54 -1
- package/src/interfaces/usdz.ts +125 -0
- package/src/oracle.ts +222 -1
- package/src/oraclePro.ts +312 -0
- package/src/pythProClient.ts +406 -0
- package/src/storkClient.ts +328 -0
- package/src/storkOracle.ts +82 -0
- package/tests/pythProClient.test.ts +155 -0
- package/tests/storkClient.test.ts +316 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/** Kronos Stork price REST client + update payload parsing. */
|
|
2
|
+
export interface IStorkEvmSignature {
|
|
3
|
+
r: string;
|
|
4
|
+
s: string;
|
|
5
|
+
v: string | number;
|
|
6
|
+
}
|
|
7
|
+
export interface IStorkSignedPrice {
|
|
8
|
+
public_key?: string;
|
|
9
|
+
encoded_asset_id?: string;
|
|
10
|
+
/** Stork quantized price used for on-chain signature verification. */
|
|
11
|
+
quantized_price?: string;
|
|
12
|
+
price?: string;
|
|
13
|
+
timestamped_signature?: {
|
|
14
|
+
timestamp?: number | string;
|
|
15
|
+
/** Nanosecond timestamp used for on-chain updates (preferred). */
|
|
16
|
+
timestamp_nano?: number | string;
|
|
17
|
+
signature?: IStorkEvmSignature;
|
|
18
|
+
msg_hash?: string;
|
|
19
|
+
};
|
|
20
|
+
publisher_merkle_root?: string;
|
|
21
|
+
calculation_alg?: {
|
|
22
|
+
type?: string;
|
|
23
|
+
version?: string;
|
|
24
|
+
checksum?: string;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export interface IStorkKronosPriceEntry {
|
|
28
|
+
asset_id: string;
|
|
29
|
+
price: string;
|
|
30
|
+
priceUsd?: number;
|
|
31
|
+
timestamp?: number;
|
|
32
|
+
signature_type?: string;
|
|
33
|
+
stork_signed_price?: IStorkSignedPrice;
|
|
34
|
+
signed_prices?: unknown[];
|
|
35
|
+
/** Pre-parsed on-chain update payload from kronos (preferred). */
|
|
36
|
+
update_data?: IStorkUpdateDataRaw;
|
|
37
|
+
}
|
|
38
|
+
export interface IStorkUpdateDataRaw {
|
|
39
|
+
id?: string | number[];
|
|
40
|
+
temporal_numeric_value_timestamp_ns?: number | string;
|
|
41
|
+
temporal_numeric_value_magnitude?: string | number;
|
|
42
|
+
temporal_numeric_value_negative?: boolean;
|
|
43
|
+
publisher_merkle_root?: string | number[];
|
|
44
|
+
value_compute_alg_hash?: string | number[];
|
|
45
|
+
r?: string | number[];
|
|
46
|
+
s?: string | number[];
|
|
47
|
+
v?: number | string;
|
|
48
|
+
}
|
|
49
|
+
/** Normalized update payload for Stork Move calls. */
|
|
50
|
+
export interface IStorkUpdateData {
|
|
51
|
+
id: Uint8Array;
|
|
52
|
+
temporalNumericValueTimestampNs: bigint;
|
|
53
|
+
temporalNumericValueMagnitude: bigint;
|
|
54
|
+
temporalNumericValueNegative: boolean;
|
|
55
|
+
publisherMerkleRoot: Uint8Array;
|
|
56
|
+
valueComputeAlgHash: Uint8Array;
|
|
57
|
+
r: Uint8Array;
|
|
58
|
+
s: Uint8Array;
|
|
59
|
+
v: number;
|
|
60
|
+
}
|
|
61
|
+
export interface IStorkLatestPriceData {
|
|
62
|
+
prices: Record<string, IStorkKronosPriceEntry>;
|
|
63
|
+
}
|
|
64
|
+
export interface IStorkLatestPriceResponse {
|
|
65
|
+
success: boolean;
|
|
66
|
+
timestamp?: string;
|
|
67
|
+
data?: IStorkLatestPriceData;
|
|
68
|
+
message?: string;
|
|
69
|
+
}
|
|
70
|
+
export interface IGetLatestStorkPricesOptions {
|
|
71
|
+
assets: string[];
|
|
72
|
+
/** Override kronos REST base URL. */
|
|
73
|
+
kronosUrl?: string;
|
|
74
|
+
}
|
|
75
|
+
export declare function hexToBytes(hex: string): Uint8Array;
|
|
76
|
+
export declare function base64ToBytes(base64: string): Uint8Array;
|
|
77
|
+
export declare function parseStorkUpdateDataRaw(raw: IStorkUpdateDataRaw): IStorkUpdateData;
|
|
78
|
+
/** Build on-chain update data from kronos / Stork REST signed price payload. */
|
|
79
|
+
export declare function buildStorkUpdateDataFromSignedPrice(entry: IStorkKronosPriceEntry,
|
|
80
|
+
/** Fallback 32-byte feeder id when `encoded_asset_id` is absent. */
|
|
81
|
+
feederId?: Uint8Array): IStorkUpdateData | null;
|
|
82
|
+
export declare function parseStorkUpdateDataList(data: IStorkLatestPriceData,
|
|
83
|
+
/** Stork asset symbol → 32-byte on-chain feeder id from zo-oracle config. */
|
|
84
|
+
assetIdByAsset?: Map<string, Uint8Array>): IStorkUpdateData[];
|
|
85
|
+
/**
|
|
86
|
+
* Fetch latest Stork prices from kronos REST (`GET` or `POST /stork/latest-price`).
|
|
87
|
+
*/
|
|
88
|
+
export declare function getLatestStorkPrices(baseUrl: string, options: IGetLatestStorkPricesOptions): Promise<IStorkLatestPriceData>;
|
|
89
|
+
export declare function fetchStorkUpdateDataFromKronos(baseUrl: string, assets: string[], assetIdByAsset?: Map<string, Uint8Array>): Promise<IStorkUpdateData[]>;
|
|
90
|
+
//# sourceMappingURL=storkClient.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storkClient.d.cts","sourceRoot":"","sources":["../src/storkClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/** Kronos Stork price REST client + update payload parsing. */
|
|
2
|
+
export interface IStorkEvmSignature {
|
|
3
|
+
r: string;
|
|
4
|
+
s: string;
|
|
5
|
+
v: string | number;
|
|
6
|
+
}
|
|
7
|
+
export interface IStorkSignedPrice {
|
|
8
|
+
public_key?: string;
|
|
9
|
+
encoded_asset_id?: string;
|
|
10
|
+
/** Stork quantized price used for on-chain signature verification. */
|
|
11
|
+
quantized_price?: string;
|
|
12
|
+
price?: string;
|
|
13
|
+
timestamped_signature?: {
|
|
14
|
+
timestamp?: number | string;
|
|
15
|
+
/** Nanosecond timestamp used for on-chain updates (preferred). */
|
|
16
|
+
timestamp_nano?: number | string;
|
|
17
|
+
signature?: IStorkEvmSignature;
|
|
18
|
+
msg_hash?: string;
|
|
19
|
+
};
|
|
20
|
+
publisher_merkle_root?: string;
|
|
21
|
+
calculation_alg?: {
|
|
22
|
+
type?: string;
|
|
23
|
+
version?: string;
|
|
24
|
+
checksum?: string;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export interface IStorkKronosPriceEntry {
|
|
28
|
+
asset_id: string;
|
|
29
|
+
price: string;
|
|
30
|
+
priceUsd?: number;
|
|
31
|
+
timestamp?: number;
|
|
32
|
+
signature_type?: string;
|
|
33
|
+
stork_signed_price?: IStorkSignedPrice;
|
|
34
|
+
signed_prices?: unknown[];
|
|
35
|
+
/** Pre-parsed on-chain update payload from kronos (preferred). */
|
|
36
|
+
update_data?: IStorkUpdateDataRaw;
|
|
37
|
+
}
|
|
38
|
+
export interface IStorkUpdateDataRaw {
|
|
39
|
+
id?: string | number[];
|
|
40
|
+
temporal_numeric_value_timestamp_ns?: number | string;
|
|
41
|
+
temporal_numeric_value_magnitude?: string | number;
|
|
42
|
+
temporal_numeric_value_negative?: boolean;
|
|
43
|
+
publisher_merkle_root?: string | number[];
|
|
44
|
+
value_compute_alg_hash?: string | number[];
|
|
45
|
+
r?: string | number[];
|
|
46
|
+
s?: string | number[];
|
|
47
|
+
v?: number | string;
|
|
48
|
+
}
|
|
49
|
+
/** Normalized update payload for Stork Move calls. */
|
|
50
|
+
export interface IStorkUpdateData {
|
|
51
|
+
id: Uint8Array;
|
|
52
|
+
temporalNumericValueTimestampNs: bigint;
|
|
53
|
+
temporalNumericValueMagnitude: bigint;
|
|
54
|
+
temporalNumericValueNegative: boolean;
|
|
55
|
+
publisherMerkleRoot: Uint8Array;
|
|
56
|
+
valueComputeAlgHash: Uint8Array;
|
|
57
|
+
r: Uint8Array;
|
|
58
|
+
s: Uint8Array;
|
|
59
|
+
v: number;
|
|
60
|
+
}
|
|
61
|
+
export interface IStorkLatestPriceData {
|
|
62
|
+
prices: Record<string, IStorkKronosPriceEntry>;
|
|
63
|
+
}
|
|
64
|
+
export interface IStorkLatestPriceResponse {
|
|
65
|
+
success: boolean;
|
|
66
|
+
timestamp?: string;
|
|
67
|
+
data?: IStorkLatestPriceData;
|
|
68
|
+
message?: string;
|
|
69
|
+
}
|
|
70
|
+
export interface IGetLatestStorkPricesOptions {
|
|
71
|
+
assets: string[];
|
|
72
|
+
/** Override kronos REST base URL. */
|
|
73
|
+
kronosUrl?: string;
|
|
74
|
+
}
|
|
75
|
+
export declare function hexToBytes(hex: string): Uint8Array;
|
|
76
|
+
export declare function base64ToBytes(base64: string): Uint8Array;
|
|
77
|
+
export declare function parseStorkUpdateDataRaw(raw: IStorkUpdateDataRaw): IStorkUpdateData;
|
|
78
|
+
/** Build on-chain update data from kronos / Stork REST signed price payload. */
|
|
79
|
+
export declare function buildStorkUpdateDataFromSignedPrice(entry: IStorkKronosPriceEntry,
|
|
80
|
+
/** Fallback 32-byte feeder id when `encoded_asset_id` is absent. */
|
|
81
|
+
feederId?: Uint8Array): IStorkUpdateData | null;
|
|
82
|
+
export declare function parseStorkUpdateDataList(data: IStorkLatestPriceData,
|
|
83
|
+
/** Stork asset symbol → 32-byte on-chain feeder id from zo-oracle config. */
|
|
84
|
+
assetIdByAsset?: Map<string, Uint8Array>): IStorkUpdateData[];
|
|
85
|
+
/**
|
|
86
|
+
* Fetch latest Stork prices from kronos REST (`GET` or `POST /stork/latest-price`).
|
|
87
|
+
*/
|
|
88
|
+
export declare function getLatestStorkPrices(baseUrl: string, options: IGetLatestStorkPricesOptions): Promise<IStorkLatestPriceData>;
|
|
89
|
+
export declare function fetchStorkUpdateDataFromKronos(baseUrl: string, assets: string[], assetIdByAsset?: Map<string, Uint8Array>): Promise<IStorkUpdateData[]>;
|
|
90
|
+
//# sourceMappingURL=storkClient.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storkClient.d.mts","sourceRoot":"","sources":["../src/storkClient.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAE/D,MAAM,WAAW,kBAAkB;IACjC,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,sEAAsE;IACtE,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qBAAqB,CAAC,EAAE;QACtB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;QAC3B,kEAAkE;QAClE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;QAChC,SAAS,CAAC,EAAE,kBAAkB,CAAA;QAC9B,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,eAAe,CAAC,EAAE;QAChB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;KAClB,CAAA;CACF;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kBAAkB,CAAC,EAAE,iBAAiB,CAAA;IACtC,aAAa,CAAC,EAAE,OAAO,EAAE,CAAA;IACzB,kEAAkE;IAClE,WAAW,CAAC,EAAE,mBAAmB,CAAA;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACtB,mCAAmC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACrD,gCAAgC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IAClD,+BAA+B,CAAC,EAAE,OAAO,CAAA;IACzC,qBAAqB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACzC,sBAAsB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC1C,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACrB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACrB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CACpB;AAED,sDAAsD;AACtD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,UAAU,CAAA;IACd,+BAA+B,EAAE,MAAM,CAAA;IACvC,6BAA6B,EAAE,MAAM,CAAA;IACrC,4BAA4B,EAAE,OAAO,CAAA;IACrC,mBAAmB,EAAE,UAAU,CAAA;IAC/B,mBAAmB,EAAE,UAAU,CAAA;IAC/B,CAAC,EAAE,UAAU,CAAA;IACb,CAAC,EAAE,UAAU,CAAA;IACb,CAAC,EAAE,MAAM,CAAA;CACV;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAA;CAC/C;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,qBAAqB,CAAA;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAaD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAUlD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CASxD;AAiDD,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,mBAAmB,GAAG,gBAAgB,CAiBlF;AAWD,gFAAgF;AAChF,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,sBAAsB;AAC7B,oEAAoE;AACpE,QAAQ,CAAC,EAAE,UAAU,GACpB,gBAAgB,GAAG,IAAI,CA0DzB;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,qBAAqB;AAC3B,6EAA6E;AAC7E,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GACvC,gBAAgB,EAAE,CAgBpB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,qBAAqB,CAAC,CA6BhC;AAED,wBAAsB,8BAA8B,CAClD,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EAAE,EAChB,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GACvC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAO7B"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
/** Kronos Stork price REST client + update payload parsing. */
|
|
2
|
+
function normalizeBaseUrl(baseUrl) {
|
|
3
|
+
return baseUrl.replace(/\/+$/, '');
|
|
4
|
+
}
|
|
5
|
+
function parseLatestStorkResponse(json) {
|
|
6
|
+
if (!json.success || !json.data) {
|
|
7
|
+
throw new Error(json.message ?? 'Stork latest-price request failed');
|
|
8
|
+
}
|
|
9
|
+
return json.data;
|
|
10
|
+
}
|
|
11
|
+
export function hexToBytes(hex) {
|
|
12
|
+
const normalized = hex.startsWith('0x') ? hex.slice(2) : hex;
|
|
13
|
+
if (normalized.length % 2 !== 0) {
|
|
14
|
+
throw new Error(`Invalid hex length: ${hex}`);
|
|
15
|
+
}
|
|
16
|
+
const bytes = new Uint8Array(normalized.length / 2);
|
|
17
|
+
for (let i = 0; i < normalized.length; i += 2) {
|
|
18
|
+
bytes[i / 2] = Number.parseInt(normalized.slice(i, i + 2), 16);
|
|
19
|
+
}
|
|
20
|
+
return bytes;
|
|
21
|
+
}
|
|
22
|
+
export function base64ToBytes(base64) {
|
|
23
|
+
const normalized = base64.replaceAll('-', '+').replaceAll('_', '/');
|
|
24
|
+
const padded = normalized + '='.repeat((4 - (normalized.length % 4)) % 4);
|
|
25
|
+
const binary = atob(padded);
|
|
26
|
+
const bytes = new Uint8Array(binary.length);
|
|
27
|
+
for (let i = 0; i < binary.length; i++) {
|
|
28
|
+
bytes[i] = binary.charCodeAt(i);
|
|
29
|
+
}
|
|
30
|
+
return bytes;
|
|
31
|
+
}
|
|
32
|
+
function toBytes(value, field) {
|
|
33
|
+
if (value === undefined || value === null) {
|
|
34
|
+
throw new Error(`Missing Stork field: ${field}`);
|
|
35
|
+
}
|
|
36
|
+
if (value instanceof Uint8Array) {
|
|
37
|
+
return value;
|
|
38
|
+
}
|
|
39
|
+
if (Array.isArray(value)) {
|
|
40
|
+
return Uint8Array.from(value);
|
|
41
|
+
}
|
|
42
|
+
if (value.startsWith('0x') || /^[0-9a-f]+$/i.test(value)) {
|
|
43
|
+
return hexToBytes(value);
|
|
44
|
+
}
|
|
45
|
+
return base64ToBytes(value);
|
|
46
|
+
}
|
|
47
|
+
function toBigInt(value) {
|
|
48
|
+
if (value === undefined || value === null) {
|
|
49
|
+
return 0n;
|
|
50
|
+
}
|
|
51
|
+
if (typeof value === 'bigint') {
|
|
52
|
+
return value;
|
|
53
|
+
}
|
|
54
|
+
if (typeof value === 'string') {
|
|
55
|
+
return BigInt(value);
|
|
56
|
+
}
|
|
57
|
+
// `value` is already a float64 at this point — any u64 > 2^53 has already lost
|
|
58
|
+
// precision before reaching here. String(n) round-trips the truncated float64,
|
|
59
|
+
// not the original integer. Callers should pass string timestamps from the API
|
|
60
|
+
// to avoid this loss.
|
|
61
|
+
return BigInt(String(value));
|
|
62
|
+
}
|
|
63
|
+
function parseV(value) {
|
|
64
|
+
if (typeof value === 'number') {
|
|
65
|
+
return value;
|
|
66
|
+
}
|
|
67
|
+
const bytes = toBytes(value, 'v');
|
|
68
|
+
if (bytes.length > 0) {
|
|
69
|
+
return bytes[0];
|
|
70
|
+
}
|
|
71
|
+
if (value.startsWith('0x')) {
|
|
72
|
+
return Number.parseInt(value, 16);
|
|
73
|
+
}
|
|
74
|
+
return Number.parseInt(value, 10);
|
|
75
|
+
}
|
|
76
|
+
export function parseStorkUpdateDataRaw(raw) {
|
|
77
|
+
const id = toBytes(raw.id, 'id');
|
|
78
|
+
if (id.length !== 32) {
|
|
79
|
+
throw new Error(`Stork update id must be 32 bytes, got ${id.length}`);
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
id,
|
|
83
|
+
temporalNumericValueTimestampNs: toBigInt(raw.temporal_numeric_value_timestamp_ns),
|
|
84
|
+
temporalNumericValueMagnitude: toBigInt(raw.temporal_numeric_value_magnitude),
|
|
85
|
+
temporalNumericValueNegative: raw.temporal_numeric_value_negative ?? false,
|
|
86
|
+
publisherMerkleRoot: toBytes(raw.publisher_merkle_root, 'publisher_merkle_root'),
|
|
87
|
+
valueComputeAlgHash: toBytes(raw.value_compute_alg_hash, 'value_compute_alg_hash'),
|
|
88
|
+
r: toBytes(raw.r, 'r'),
|
|
89
|
+
s: toBytes(raw.s, 's'),
|
|
90
|
+
v: parseV(raw.v ?? 0),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function parseQuantizedPrice(value) {
|
|
94
|
+
let price = BigInt(value);
|
|
95
|
+
const negative = price < 0n;
|
|
96
|
+
if (negative) {
|
|
97
|
+
price = -price;
|
|
98
|
+
}
|
|
99
|
+
return { magnitude: price, negative };
|
|
100
|
+
}
|
|
101
|
+
/** Build on-chain update data from kronos / Stork REST signed price payload. */
|
|
102
|
+
export function buildStorkUpdateDataFromSignedPrice(entry,
|
|
103
|
+
/** Fallback 32-byte feeder id when `encoded_asset_id` is absent. */
|
|
104
|
+
feederId) {
|
|
105
|
+
const signed = entry.stork_signed_price;
|
|
106
|
+
if (signed?.timestamped_signature?.signature) {
|
|
107
|
+
const checksum = signed.calculation_alg?.checksum;
|
|
108
|
+
if (!checksum) {
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
const quantizedPrice = signed.quantized_price ?? signed.price ?? entry.price;
|
|
112
|
+
if (!quantizedPrice) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
const assetId = signed.encoded_asset_id;
|
|
116
|
+
if (!assetId && !feederId) {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
const { magnitude, negative } = parseQuantizedPrice(String(quantizedPrice));
|
|
120
|
+
// Nanosecond timestamps for dates in 2026+ (~1.78e18 ns) exceed float64 safe-integer
|
|
121
|
+
// range (2^53 ≈ 9e15). JSON.parse silently truncates them by up to ±127 ns (precision
|
|
122
|
+
// step = 256 at this scale), causing get_stork_message_hash to produce the wrong value
|
|
123
|
+
// and ecrecover to fail → EInvalidSignature (error code 0).
|
|
124
|
+
// Prefer string sources; fall back to update_data.temporal_numeric_value_timestamp_ns
|
|
125
|
+
// (a string in kronos pre-parsed payloads) when stork_signed_price only has a number.
|
|
126
|
+
const rawTimestampNs = signed.timestamped_signature.timestamp_nano
|
|
127
|
+
?? signed.timestamped_signature.timestamp
|
|
128
|
+
?? entry.timestamp;
|
|
129
|
+
const timestampNs = (typeof rawTimestampNs === 'number'
|
|
130
|
+
&& typeof entry.update_data?.temporal_numeric_value_timestamp_ns === 'string')
|
|
131
|
+
? entry.update_data.temporal_numeric_value_timestamp_ns
|
|
132
|
+
: rawTimestampNs;
|
|
133
|
+
const id = assetId
|
|
134
|
+
? toBytes(assetId, 'encoded_asset_id')
|
|
135
|
+
: feederId;
|
|
136
|
+
return {
|
|
137
|
+
id,
|
|
138
|
+
temporalNumericValueTimestampNs: toBigInt(timestampNs),
|
|
139
|
+
temporalNumericValueMagnitude: magnitude,
|
|
140
|
+
temporalNumericValueNegative: negative,
|
|
141
|
+
publisherMerkleRoot: toBytes(signed.publisher_merkle_root, 'publisher_merkle_root'),
|
|
142
|
+
valueComputeAlgHash: toBytes(checksum, 'value_compute_alg_hash'),
|
|
143
|
+
r: toBytes(signed.timestamped_signature.signature.r, 'r'),
|
|
144
|
+
s: toBytes(signed.timestamped_signature.signature.s, 's'),
|
|
145
|
+
v: parseV(signed.timestamped_signature.signature.v),
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
if (entry.update_data) {
|
|
149
|
+
return parseStorkUpdateDataRaw(entry.update_data);
|
|
150
|
+
}
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
export function parseStorkUpdateDataList(data,
|
|
154
|
+
/** Stork asset symbol → 32-byte on-chain feeder id from zo-oracle config. */
|
|
155
|
+
assetIdByAsset) {
|
|
156
|
+
const updates = [];
|
|
157
|
+
for (const entry of Object.values(data.prices)) {
|
|
158
|
+
const feederId = assetIdByAsset?.get(entry.asset_id);
|
|
159
|
+
const update = buildStorkUpdateDataFromSignedPrice(entry, feederId);
|
|
160
|
+
if (update) {
|
|
161
|
+
if (update.id.length !== 32) {
|
|
162
|
+
throw new Error(`Stork asset ${entry.asset_id}: id must be 32 bytes (got ${update.id.length}); `
|
|
163
|
+
+ 'pass assetIdByAsset from buildStorkAssetIdMap()');
|
|
164
|
+
}
|
|
165
|
+
updates.push(update);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return updates;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Fetch latest Stork prices from kronos REST (`GET` or `POST /stork/latest-price`).
|
|
172
|
+
*/
|
|
173
|
+
export async function getLatestStorkPrices(baseUrl, options) {
|
|
174
|
+
const { assets } = options;
|
|
175
|
+
if (assets.length === 0) {
|
|
176
|
+
throw new Error('assets is required');
|
|
177
|
+
}
|
|
178
|
+
const root = normalizeBaseUrl(baseUrl);
|
|
179
|
+
if (assets.length <= 20) {
|
|
180
|
+
const params = new URLSearchParams();
|
|
181
|
+
params.set('assets', assets.join(','));
|
|
182
|
+
const res = await fetch(`${root}/stork/latest-price?${params}`);
|
|
183
|
+
const json = await res.json();
|
|
184
|
+
if (!res.ok && json.message) {
|
|
185
|
+
throw new Error(json.message);
|
|
186
|
+
}
|
|
187
|
+
return parseLatestStorkResponse(json);
|
|
188
|
+
}
|
|
189
|
+
const res = await fetch(`${root}/stork/latest-price`, {
|
|
190
|
+
method: 'POST',
|
|
191
|
+
headers: { 'Content-Type': 'application/json' },
|
|
192
|
+
body: JSON.stringify({ assets }),
|
|
193
|
+
});
|
|
194
|
+
const json = await res.json();
|
|
195
|
+
if (!res.ok && json.message) {
|
|
196
|
+
throw new Error(json.message);
|
|
197
|
+
}
|
|
198
|
+
return parseLatestStorkResponse(json);
|
|
199
|
+
}
|
|
200
|
+
export async function fetchStorkUpdateDataFromKronos(baseUrl, assets, assetIdByAsset) {
|
|
201
|
+
const data = await getLatestStorkPrices(baseUrl, { assets });
|
|
202
|
+
const updates = parseStorkUpdateDataList(data, assetIdByAsset);
|
|
203
|
+
if (updates.length === 0) {
|
|
204
|
+
throw new Error(`No Stork update data returned for assets: ${assets.join(',')}`);
|
|
205
|
+
}
|
|
206
|
+
return updates;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=storkClient.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storkClient.mjs","sourceRoot":"","sources":["../src/storkClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.STORK_UPDATE_FEE_MIST = void 0;
|
|
4
|
+
exports.appendStorkUpdatesToTransaction = appendStorkUpdatesToTransaction;
|
|
5
|
+
exports.estimateStorkUpdateFeeMist = estimateStorkUpdateFeeMist;
|
|
6
|
+
const transactions_1 = require("@mysten/sui/transactions");
|
|
7
|
+
/** 1 MIST per Stork feed update (matches zo-go-executor). */
|
|
8
|
+
exports.STORK_UPDATE_FEE_MIST = 1n;
|
|
9
|
+
function bytesToPureVector(bytesList) {
|
|
10
|
+
return bytesList.map(bytes => Array.from(bytes));
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Append Stork on-chain price updates to an open PTB (before Pyth Pro verify + market op).
|
|
14
|
+
*
|
|
15
|
+
* 1. `update_temporal_numeric_value_evm_input_vec::new`
|
|
16
|
+
* 2. `stork::update_multiple_temporal_numeric_values_evm`
|
|
17
|
+
*/
|
|
18
|
+
function appendStorkUpdatesToTransaction(tx, config, updates, options) {
|
|
19
|
+
if (updates.length === 0) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const feePerUpdate = options?.feePerUpdate ?? exports.STORK_UPDATE_FEE_MIST;
|
|
23
|
+
const totalFee = feePerUpdate * BigInt(updates.length);
|
|
24
|
+
const feeSource = options?.feeSource ?? tx.gas;
|
|
25
|
+
const [feeCoin] = tx.splitCoins(feeSource, [tx.pure.u64(totalFee)]);
|
|
26
|
+
const ids = bytesToPureVector(updates.map(u => u.id));
|
|
27
|
+
const timestampNss = updates.map(u => u.temporalNumericValueTimestampNs);
|
|
28
|
+
const magnitudes = updates.map(u => u.temporalNumericValueMagnitude);
|
|
29
|
+
const negatives = updates.map(u => u.temporalNumericValueNegative);
|
|
30
|
+
const publisherMerkleRoots = bytesToPureVector(updates.map(u => u.publisherMerkleRoot));
|
|
31
|
+
const valueComputeAlgHashes = bytesToPureVector(updates.map(u => u.valueComputeAlgHash));
|
|
32
|
+
const rs = bytesToPureVector(updates.map(u => u.r));
|
|
33
|
+
const ss = bytesToPureVector(updates.map(u => u.s));
|
|
34
|
+
const vs = updates.map(u => u.v);
|
|
35
|
+
const [updateInputVec] = tx.moveCall({
|
|
36
|
+
target: `${config.storkPackage}::update_temporal_numeric_value_evm_input_vec::new`,
|
|
37
|
+
arguments: [
|
|
38
|
+
tx.pure.vector('vector<u8>', ids),
|
|
39
|
+
tx.pure.vector('u64', timestampNss),
|
|
40
|
+
tx.pure.vector('u128', magnitudes),
|
|
41
|
+
tx.pure.vector('bool', negatives),
|
|
42
|
+
tx.pure.vector('vector<u8>', publisherMerkleRoots),
|
|
43
|
+
tx.pure.vector('vector<u8>', valueComputeAlgHashes),
|
|
44
|
+
tx.pure.vector('vector<u8>', rs),
|
|
45
|
+
tx.pure.vector('vector<u8>', ss),
|
|
46
|
+
tx.pure.vector('u8', vs),
|
|
47
|
+
],
|
|
48
|
+
});
|
|
49
|
+
tx.moveCall({
|
|
50
|
+
target: `${config.storkPackage}::stork::update_multiple_temporal_numeric_values_evm`,
|
|
51
|
+
arguments: [
|
|
52
|
+
tx.object(config.storkState),
|
|
53
|
+
updateInputVec,
|
|
54
|
+
feeCoin,
|
|
55
|
+
],
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function estimateStorkUpdateFeeMist(updateCount, feePerUpdate = exports.STORK_UPDATE_FEE_MIST) {
|
|
59
|
+
return feePerUpdate * BigInt(updateCount);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=storkOracle.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storkOracle.cjs","sourceRoot":"","sources":["../src/storkOracle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { TransactionObjectArgument } from "@mysten/sui/transactions";
|
|
2
|
+
import { Transaction } from "@mysten/sui/transactions";
|
|
3
|
+
import type { IOracleProConfig } from "./consts/index.cjs";
|
|
4
|
+
import type { IStorkUpdateData } from "./storkClient.cjs";
|
|
5
|
+
/** 1 MIST per Stork feed update (matches zo-go-executor). */
|
|
6
|
+
export declare const STORK_UPDATE_FEE_MIST = 1n;
|
|
7
|
+
export interface IAppendStorkUpdatesOptions {
|
|
8
|
+
/** Coin to split update fees from. Defaults to `tx.gas`. */
|
|
9
|
+
feeSource?: TransactionObjectArgument;
|
|
10
|
+
/** MIST per update. Defaults to 1. */
|
|
11
|
+
feePerUpdate?: bigint;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Append Stork on-chain price updates to an open PTB (before Pyth Pro verify + market op).
|
|
15
|
+
*
|
|
16
|
+
* 1. `update_temporal_numeric_value_evm_input_vec::new`
|
|
17
|
+
* 2. `stork::update_multiple_temporal_numeric_values_evm`
|
|
18
|
+
*/
|
|
19
|
+
export declare function appendStorkUpdatesToTransaction(tx: Transaction, config: Pick<IOracleProConfig, 'storkPackage' | 'storkState'>, updates: IStorkUpdateData[], options?: IAppendStorkUpdatesOptions): void;
|
|
20
|
+
export declare function estimateStorkUpdateFeeMist(updateCount: number, feePerUpdate?: bigint): bigint;
|
|
21
|
+
//# sourceMappingURL=storkOracle.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storkOracle.d.cts","sourceRoot":"","sources":["../src/storkOracle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,iCAAgC;AACzE,OAAO,EAAE,WAAW,EAAE,iCAAgC;AAEtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,2BAAgB;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,0BAAqB;AAErD,6DAA6D;AAC7D,eAAO,MAAM,qBAAqB,KAAK,CAAA;AAEvC,MAAM,WAAW,0BAA0B;IACzC,4DAA4D;IAC5D,SAAS,CAAC,EAAE,yBAAyB,CAAA;IACrC,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAMD;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,EAAE,EAAE,WAAW,EACf,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,cAAc,GAAG,YAAY,CAAC,EAC7D,OAAO,EAAE,gBAAgB,EAAE,EAC3B,OAAO,CAAC,EAAE,0BAA0B,GACnC,IAAI,CA2CN;AAED,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,YAAY,GAAE,MAA8B,GAC3C,MAAM,CAER"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { TransactionObjectArgument } from "@mysten/sui/transactions";
|
|
2
|
+
import { Transaction } from "@mysten/sui/transactions";
|
|
3
|
+
import type { IOracleProConfig } from "./consts/index.mjs";
|
|
4
|
+
import type { IStorkUpdateData } from "./storkClient.mjs";
|
|
5
|
+
/** 1 MIST per Stork feed update (matches zo-go-executor). */
|
|
6
|
+
export declare const STORK_UPDATE_FEE_MIST = 1n;
|
|
7
|
+
export interface IAppendStorkUpdatesOptions {
|
|
8
|
+
/** Coin to split update fees from. Defaults to `tx.gas`. */
|
|
9
|
+
feeSource?: TransactionObjectArgument;
|
|
10
|
+
/** MIST per update. Defaults to 1. */
|
|
11
|
+
feePerUpdate?: bigint;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Append Stork on-chain price updates to an open PTB (before Pyth Pro verify + market op).
|
|
15
|
+
*
|
|
16
|
+
* 1. `update_temporal_numeric_value_evm_input_vec::new`
|
|
17
|
+
* 2. `stork::update_multiple_temporal_numeric_values_evm`
|
|
18
|
+
*/
|
|
19
|
+
export declare function appendStorkUpdatesToTransaction(tx: Transaction, config: Pick<IOracleProConfig, 'storkPackage' | 'storkState'>, updates: IStorkUpdateData[], options?: IAppendStorkUpdatesOptions): void;
|
|
20
|
+
export declare function estimateStorkUpdateFeeMist(updateCount: number, feePerUpdate?: bigint): bigint;
|
|
21
|
+
//# sourceMappingURL=storkOracle.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storkOracle.d.mts","sourceRoot":"","sources":["../src/storkOracle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,iCAAgC;AACzE,OAAO,EAAE,WAAW,EAAE,iCAAgC;AAEtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,2BAAgB;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,0BAAqB;AAErD,6DAA6D;AAC7D,eAAO,MAAM,qBAAqB,KAAK,CAAA;AAEvC,MAAM,WAAW,0BAA0B;IACzC,4DAA4D;IAC5D,SAAS,CAAC,EAAE,yBAAyB,CAAA;IACrC,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAMD;;;;;GAKG;AACH,wBAAgB,+BAA+B,CAC7C,EAAE,EAAE,WAAW,EACf,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,cAAc,GAAG,YAAY,CAAC,EAC7D,OAAO,EAAE,gBAAgB,EAAE,EAC3B,OAAO,CAAC,EAAE,0BAA0B,GACnC,IAAI,CA2CN;AAED,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,MAAM,EACnB,YAAY,GAAE,MAA8B,GAC3C,MAAM,CAER"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Transaction } from "@mysten/sui/transactions";
|
|
2
|
+
/** 1 MIST per Stork feed update (matches zo-go-executor). */
|
|
3
|
+
export const STORK_UPDATE_FEE_MIST = 1n;
|
|
4
|
+
function bytesToPureVector(bytesList) {
|
|
5
|
+
return bytesList.map(bytes => Array.from(bytes));
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Append Stork on-chain price updates to an open PTB (before Pyth Pro verify + market op).
|
|
9
|
+
*
|
|
10
|
+
* 1. `update_temporal_numeric_value_evm_input_vec::new`
|
|
11
|
+
* 2. `stork::update_multiple_temporal_numeric_values_evm`
|
|
12
|
+
*/
|
|
13
|
+
export function appendStorkUpdatesToTransaction(tx, config, updates, options) {
|
|
14
|
+
if (updates.length === 0) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const feePerUpdate = options?.feePerUpdate ?? STORK_UPDATE_FEE_MIST;
|
|
18
|
+
const totalFee = feePerUpdate * BigInt(updates.length);
|
|
19
|
+
const feeSource = options?.feeSource ?? tx.gas;
|
|
20
|
+
const [feeCoin] = tx.splitCoins(feeSource, [tx.pure.u64(totalFee)]);
|
|
21
|
+
const ids = bytesToPureVector(updates.map(u => u.id));
|
|
22
|
+
const timestampNss = updates.map(u => u.temporalNumericValueTimestampNs);
|
|
23
|
+
const magnitudes = updates.map(u => u.temporalNumericValueMagnitude);
|
|
24
|
+
const negatives = updates.map(u => u.temporalNumericValueNegative);
|
|
25
|
+
const publisherMerkleRoots = bytesToPureVector(updates.map(u => u.publisherMerkleRoot));
|
|
26
|
+
const valueComputeAlgHashes = bytesToPureVector(updates.map(u => u.valueComputeAlgHash));
|
|
27
|
+
const rs = bytesToPureVector(updates.map(u => u.r));
|
|
28
|
+
const ss = bytesToPureVector(updates.map(u => u.s));
|
|
29
|
+
const vs = updates.map(u => u.v);
|
|
30
|
+
const [updateInputVec] = tx.moveCall({
|
|
31
|
+
target: `${config.storkPackage}::update_temporal_numeric_value_evm_input_vec::new`,
|
|
32
|
+
arguments: [
|
|
33
|
+
tx.pure.vector('vector<u8>', ids),
|
|
34
|
+
tx.pure.vector('u64', timestampNss),
|
|
35
|
+
tx.pure.vector('u128', magnitudes),
|
|
36
|
+
tx.pure.vector('bool', negatives),
|
|
37
|
+
tx.pure.vector('vector<u8>', publisherMerkleRoots),
|
|
38
|
+
tx.pure.vector('vector<u8>', valueComputeAlgHashes),
|
|
39
|
+
tx.pure.vector('vector<u8>', rs),
|
|
40
|
+
tx.pure.vector('vector<u8>', ss),
|
|
41
|
+
tx.pure.vector('u8', vs),
|
|
42
|
+
],
|
|
43
|
+
});
|
|
44
|
+
tx.moveCall({
|
|
45
|
+
target: `${config.storkPackage}::stork::update_multiple_temporal_numeric_values_evm`,
|
|
46
|
+
arguments: [
|
|
47
|
+
tx.object(config.storkState),
|
|
48
|
+
updateInputVec,
|
|
49
|
+
feeCoin,
|
|
50
|
+
],
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
export function estimateStorkUpdateFeeMist(updateCount, feePerUpdate = STORK_UPDATE_FEE_MIST) {
|
|
54
|
+
return feePerUpdate * BigInt(updateCount);
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=storkOracle.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storkOracle.mjs","sourceRoot":"","sources":["../src/storkOracle.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -48,7 +48,7 @@ export abstract class BaseDataAPI extends OracleAPI implements IBaseDataAPI {
|
|
|
48
48
|
connectionURL: string,
|
|
49
49
|
lpToken: LPToken,
|
|
50
50
|
) {
|
|
51
|
-
super(network, provider, connectionURL, lpToken)
|
|
51
|
+
super(network, provider, connectionURL, lpToken, apiEndpoint)
|
|
52
52
|
this.provider = provider
|
|
53
53
|
this.apiEndpoint = apiEndpoint
|
|
54
54
|
this.connectionURL = connectionURL
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"zo_core": {
|
|
3
3
|
"package": "0x7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec",
|
|
4
|
-
"upgraded_package": "
|
|
4
|
+
"upgraded_package": "0xca86fc435d91d1a6d56bcf20be99dcf21e61923cd30ee46b5930463fbce7d98f",
|
|
5
5
|
"upgrade_cap": "0x2f67d379d3b9e256a9c4079de50f4bd336dcbda1bd90d1fcd61a9cc1dc369d69",
|
|
6
6
|
"admin_cap": "0x63af8e78701327be98e0c44967389148c374f4ea7c7cf8acf64957b705ffd02d",
|
|
7
7
|
"market": "0x3310c794d0bbc4b0421d2fedc74fbd5a028b09fe4d396cd5458786f4c52fa636",
|