Skip to content

Commit c422408

Browse files
committed
fix build
1 parent f632023 commit c422408

File tree

2 files changed

+179
-174
lines changed

2 files changed

+179
-174
lines changed

lazer/js/src/index.ts

Lines changed: 45 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,54 @@
11
import { PythLazerClient } from "@pythnetwork/pyth-lazer-sdk";
22

3-
/* eslint-disable no-console */
4-
const client = await PythLazerClient.create(
5-
["wss://pyth-lazer-staging.dourolabs.app/v1/stream"],
6-
"my_token",
7-
);
3+
const main = async () => {
4+
const client = await PythLazerClient.create(
5+
["wss://pyth-lazer-staging.dourolabs.app/v1/stream"],
6+
"my_token",
7+
);
88

9-
client.addMessageListener((message) => {
10-
console.log("got message:", message);
11-
switch (message.type) {
12-
case "json": {
13-
if (message.value.type == "streamUpdated") {
14-
console.log(
15-
"stream updated for subscription",
16-
message.value.subscriptionId,
17-
":",
18-
message.value.parsed?.priceFeeds,
19-
);
9+
client.addMessageListener((message) => {
10+
console.log("got message:", message);
11+
switch (message.type) {
12+
case "json": {
13+
if (message.value.type == "streamUpdated") {
14+
console.log(
15+
"stream updated for subscription",
16+
message.value.subscriptionId,
17+
":",
18+
message.value.parsed?.priceFeeds,
19+
);
20+
}
21+
break;
2022
}
21-
break;
22-
}
23-
case "binary": {
24-
if ("solana" in message.value) {
25-
console.log("solana message:", message.value.solana?.toString("hex"));
26-
}
27-
if ("evm" in message.value) {
28-
console.log("evm message:", message.value.evm?.toString("hex"));
23+
case "binary": {
24+
if ("solana" in message.value) {
25+
console.log("solana message:", message.value.solana?.toString("hex"));
26+
}
27+
if ("evm" in message.value) {
28+
console.log("evm message:", message.value.evm?.toString("hex"));
29+
}
30+
break;
2931
}
30-
break;
3132
}
32-
}
33-
});
33+
});
34+
35+
client.addAllConnectionsDownListener(() => {
36+
console.log("All connections are down");
37+
});
3438

35-
client.addAllConnectionsDownListener(() => {
36-
console.log("All connections are down");
37-
});
39+
client.subscribe({
40+
type: "subscribe",
41+
subscriptionId: 1,
42+
priceFeedIds: [1, 2],
43+
properties: ["price"],
44+
chains: ["solana"],
45+
deliveryFormat: "json",
46+
channel: "fixed_rate@200ms",
47+
jsonBinaryEncoding: "hex",
48+
});
3849

39-
client.subscribe({
40-
type: "subscribe",
41-
subscriptionId: 1,
42-
priceFeedIds: [1, 2],
43-
properties: ["price"],
44-
chains: ["solana"],
45-
deliveryFormat: "json",
46-
channel: "fixed_rate@200ms",
47-
jsonBinaryEncoding: "hex",
48-
});
50+
// shutdown client after 10 seconds
51+
setTimeout(() => client.shutdown(), 10000);
52+
};
4953

50-
// shutdown client after 10 seconds
51-
setTimeout(() => client.shutdown(), 10000);
54+
main();

lazer/js/src/publish.ts

Lines changed: 134 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -35,140 +35,142 @@ const connection = new Connection(SOLANA_RPC_URL, "confirmed");
3535

3636
// Load the payer's keypair
3737
const payer = Keypair.fromSecretKey(PAYER_SECRET_KEY);
38+
const main = async () => {
39+
const client = await PythLazerClient.create(
40+
["wss://pyth-lazer-staging.dourolabs.app/v1/stream"],
41+
"my_token",
42+
);
3843

39-
/* eslint-disable no-console */
40-
const client = await PythLazerClient.create(
41-
["wss://pyth-lazer-staging.dourolabs.app/v1/stream"],
42-
"my_token",
43-
);
44-
45-
// data received from pyth lazer
46-
let rawData: string | undefined = undefined;
47-
48-
client.addMessageListener(async (message) => {
49-
// avoid processing multiple messages
50-
if (rawData) {
51-
return;
52-
}
53-
54-
// received message from server
55-
console.log("got message:", message);
56-
57-
// We are expecting a JSON messages
58-
if (message.type !== "json") {
59-
console.log("unexpected message type:", message.type);
60-
return;
61-
}
62-
63-
// ignore the subscribed message
64-
if (message.value.type === "subscribed") {
65-
return;
66-
}
67-
68-
// close the ws connection
69-
// we only need 1 message
70-
client.shutdown();
71-
72-
// We are expecting a streamUpdated message
73-
if (message.value.type !== "streamUpdated") {
74-
console.log("unexpected message value type:", message.value.type);
75-
return;
76-
}
77-
78-
// Extract the base64 encoded data
79-
rawData = message.value.solana?.data;
80-
console.log("rawData:", rawData);
81-
82-
// Decode the base64 encoded data
83-
const instructionMessage = Buffer.from(rawData!, "hex");
84-
console.log("instructionMessage:", instructionMessage);
85-
86-
// Create the ed25519 instruction
87-
// The instruction index is 1
88-
// the starting offset is 9 (1 byte for the instruction index, 8 bytes for the program data)
89-
// the rest of the data is the message
90-
const ed25519Instr = createEd25519Instruction(instructionMessage, 1, 9);
91-
console.log("ed25519Instr:", ed25519Instr);
92-
93-
// concatenate the message to the end of the instruction
94-
const verifyMessageData = Buffer.from([
95-
1,
96-
42,
97-
0,
98-
0,
99-
0,
100-
0,
101-
0,
102-
0,
103-
0,
104-
...instructionMessage,
105-
]);
106-
console.log("verifyMessageData:", verifyMessageData);
107-
108-
// Create the verify message instruction
109-
const verifyMessageInstr = new TransactionInstruction({
110-
keys: [
111-
{ pubkey: payer.publicKey, isSigner: true, isWritable: true },
112-
{
113-
pubkey: new PublicKey(DATA_PDA_KEY),
114-
isSigner: false,
115-
isWritable: true,
116-
},
117-
{
118-
pubkey: new PublicKey(PYTH_LAZER_SOLANA_CONTRACT_ID),
119-
isSigner: false,
120-
isWritable: true,
121-
},
44+
// data received from pyth lazer
45+
let rawData: string | undefined = undefined;
46+
47+
client.addMessageListener(async (message) => {
48+
// avoid processing multiple messages
49+
if (rawData) {
50+
return;
51+
}
52+
53+
// received message from server
54+
console.log("got message:", message);
55+
56+
// We are expecting a JSON messages
57+
if (message.type !== "json") {
58+
console.log("unexpected message type:", message.type);
59+
return;
60+
}
61+
62+
// ignore the subscribed message
63+
if (message.value.type === "subscribed") {
64+
return;
65+
}
66+
67+
// close the ws connection
68+
// we only need 1 message
69+
client.shutdown();
70+
71+
// We are expecting a streamUpdated message
72+
if (message.value.type !== "streamUpdated") {
73+
console.log("unexpected message value type:", message.value.type);
74+
return;
75+
}
76+
77+
// Extract the base64 encoded data
78+
rawData = message.value.solana?.data;
79+
console.log("rawData:", rawData);
80+
81+
// Decode the base64 encoded data
82+
const instructionMessage = Buffer.from(rawData!, "hex");
83+
console.log("instructionMessage:", instructionMessage);
84+
85+
// Create the ed25519 instruction
86+
// The instruction index is 1
87+
// the starting offset is 9 (1 byte for the instruction index, 8 bytes for the program data)
88+
// the rest of the data is the message
89+
const ed25519Instr = createEd25519Instruction(instructionMessage, 1, 9);
90+
console.log("ed25519Instr:", ed25519Instr);
91+
92+
// concatenate the message to the end of the instruction
93+
const verifyMessageData = Buffer.from([
94+
1,
95+
42,
96+
0,
97+
0,
98+
0,
99+
0,
100+
0,
101+
0,
102+
0,
103+
...instructionMessage,
104+
]);
105+
console.log("verifyMessageData:", verifyMessageData);
106+
107+
// Create the verify message instruction
108+
const verifyMessageInstr = new TransactionInstruction({
109+
keys: [
110+
{ pubkey: payer.publicKey, isSigner: true, isWritable: true },
111+
{
112+
pubkey: new PublicKey(DATA_PDA_KEY),
113+
isSigner: false,
114+
isWritable: true,
115+
},
116+
{
117+
pubkey: new PublicKey(PYTH_LAZER_SOLANA_CONTRACT_ID),
118+
isSigner: false,
119+
isWritable: true,
120+
},
121+
{
122+
pubkey: new PublicKey(PYTH_LAZER_SOLANA_CONTRACT_STORAGE_ID),
123+
isSigner: false,
124+
isWritable: false,
125+
},
126+
{
127+
pubkey: new PublicKey(PYTH_LAZER_SOLANA_CONTRACT_TREASURY_ID),
128+
isSigner: false,
129+
isWritable: true,
130+
},
131+
// system program
132+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
133+
// sysvar
134+
{
135+
pubkey: SYSVAR_INSTRUCTIONS_PUBKEY,
136+
isSigner: false,
137+
isWritable: false,
138+
},
139+
],
140+
programId: new PublicKey(PROGRAM_ID),
141+
data: verifyMessageData,
142+
});
143+
console.log("verifyMessageInstr:", verifyMessageInstr);
144+
145+
// Create the transaction
146+
// 1st instruction is the ed25519 instruction
147+
// 2nd instruction is the verify message instruction
148+
const transaction = new Transaction().add(ed25519Instr, verifyMessageInstr);
149+
console.log("transaction:", transaction);
150+
151+
const signature = await sendAndConfirmTransaction(
152+
connection,
153+
transaction,
154+
[payer],
122155
{
123-
pubkey: new PublicKey(PYTH_LAZER_SOLANA_CONTRACT_STORAGE_ID),
124-
isSigner: false,
125-
isWritable: false,
156+
skipPreflight: true,
126157
},
127-
{
128-
pubkey: new PublicKey(PYTH_LAZER_SOLANA_CONTRACT_TREASURY_ID),
129-
isSigner: false,
130-
isWritable: true,
131-
},
132-
// system program
133-
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
134-
// sysvar
135-
{
136-
pubkey: SYSVAR_INSTRUCTIONS_PUBKEY,
137-
isSigner: false,
138-
isWritable: false,
139-
},
140-
],
141-
programId: new PublicKey(PROGRAM_ID),
142-
data: verifyMessageData,
158+
);
159+
160+
console.log("Transaction confirmed with signature:", signature);
143161
});
144-
console.log("verifyMessageInstr:", verifyMessageInstr);
145-
146-
// Create the transaction
147-
// 1st instruction is the ed25519 instruction
148-
// 2nd instruction is the verify message instruction
149-
const transaction = new Transaction().add(ed25519Instr, verifyMessageInstr);
150-
console.log("transaction:", transaction);
151-
152-
const signature = await sendAndConfirmTransaction(
153-
connection,
154-
transaction,
155-
[payer],
156-
{
157-
skipPreflight: true,
158-
},
159-
);
160162

161-
console.log("Transaction confirmed with signature:", signature);
162-
});
163-
164-
client.subscribe({
165-
type: "subscribe",
166-
subscriptionId: 1,
167-
// Example contract receives ETH/USD price
168-
priceFeedIds: [2],
169-
properties: ["price"],
170-
chains: ["solana"],
171-
deliveryFormat: "json",
172-
channel: "real_time",
173-
jsonBinaryEncoding: "hex",
174-
});
163+
client.subscribe({
164+
type: "subscribe",
165+
subscriptionId: 1,
166+
// Example contract receives ETH/USD price
167+
priceFeedIds: [2],
168+
properties: ["price"],
169+
chains: ["solana"],
170+
deliveryFormat: "json",
171+
channel: "real_time",
172+
jsonBinaryEncoding: "hex",
173+
});
174+
};
175+
176+
main();

0 commit comments

Comments
 (0)