Skip to content

Commit f9c69ca

Browse files
committed
feat: improve uniformity & add IDL
1 parent 224455c commit f9c69ca

File tree

3 files changed

+286
-1
lines changed

3 files changed

+286
-1
lines changed

api/idl/idl.json

Lines changed: 281 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,281 @@
1+
{
2+
"address": "VrffXU38S8MzqTtTYQG3M8GNwheKH8n77HVEZUdakH8",
3+
"metadata": {
4+
"name": "ephemeral_vrf",
5+
"version": "0.1.0",
6+
"spec": "0.1.0",
7+
"description": "Ephemeral VRF"
8+
},
9+
"instructions": [
10+
{
11+
"name": "initialize",
12+
"discriminator": [
13+
1
14+
],
15+
"accounts": [
16+
{
17+
"name": "signer",
18+
"writable": true,
19+
"signer": true
20+
},
21+
{
22+
"name": "oraclesPda"
23+
},
24+
{
25+
"name": "systemProgram"
26+
}
27+
],
28+
"args": []
29+
},
30+
{
31+
"name": "initializeOracleQueue",
32+
"discriminator": [
33+
2
34+
],
35+
"accounts": [
36+
{
37+
"name": "signer",
38+
"writable": true,
39+
"signer": true
40+
},
41+
{
42+
"name": "identity"
43+
},
44+
{
45+
"name": "oracleDataPda"
46+
},
47+
{
48+
"name": "oracleQueuePda"
49+
},
50+
{
51+
"name": "systemProgram"
52+
}
53+
],
54+
"args": [
55+
{
56+
"name": "index",
57+
"type": "u8"
58+
}
59+
]
60+
},
61+
{
62+
"name": "requestRandomness",
63+
"discriminator": [
64+
3,
65+
0,
66+
0,
67+
0,
68+
0,
69+
0,
70+
0,
71+
0
72+
],
73+
"accounts": [
74+
{
75+
"name": "caller",
76+
"writable": true,
77+
"signer": true
78+
},
79+
{
80+
"name": "programIdentity"
81+
},
82+
{
83+
"name": "oracleQueue",
84+
"writable": true
85+
},
86+
{
87+
"name": "systemProgram",
88+
"address": "11111111111111111111111111111111"
89+
},
90+
{
91+
"name": "Slot Hashes",
92+
"address": "SysvarS1otHashes111111111111111111111111111"
93+
}
94+
],
95+
"args": [
96+
{
97+
"name": "callerSeed",
98+
"type": {
99+
"array": [
100+
"u8",
101+
32
102+
]
103+
}
104+
},
105+
{
106+
"name": "callbackProgramId",
107+
"type": "pubkey"
108+
},
109+
{
110+
"name": "callbackDiscriminator",
111+
"type": {
112+
"vec": "u8"
113+
}
114+
},
115+
{
116+
"name": "account_metas",
117+
"type": {
118+
"vec": {
119+
"defined": {
120+
"name": "AccountMeta"
121+
}
122+
}
123+
}
124+
},
125+
{
126+
"name": "callbackArgs",
127+
"type": {
128+
"vec": "u8"
129+
}
130+
}
131+
]
132+
},
133+
{
134+
"name": "provideRandomness",
135+
"discriminator": [
136+
4, 13, 203, 241, 93, 225, 85, 54
137+
],
138+
"accounts": [
139+
{
140+
"name": "oracleIdentity",
141+
"writable": true,
142+
"signer": true
143+
},
144+
{
145+
"name": "vrfProgramIdentity"
146+
},
147+
{
148+
"name": "oracleDataPda",
149+
"writable": true
150+
},
151+
{
152+
"name": "oracleQueue",
153+
"writable": true
154+
},
155+
{
156+
"name": "callbackProgramId"
157+
},
158+
{
159+
"name": "systemProgram"
160+
},
161+
{
162+
"name": "accountCallback",
163+
"writable": true
164+
}
165+
],
166+
"args": [
167+
{
168+
"name": "rndSeed",
169+
"type": "bytes"
170+
}
171+
]
172+
},
173+
{
174+
"name": "delegateOracleQueue",
175+
"discriminator": [
176+
5
177+
],
178+
"accounts": [
179+
{
180+
"name": "signer",
181+
"writable": true,
182+
"signer": true
183+
},
184+
{
185+
"name": "queue"
186+
},
187+
{
188+
"name": "buffer"
189+
},
190+
{
191+
"name": "delegationRecord"
192+
},
193+
{
194+
"name": "delegationMetadata"
195+
},
196+
{
197+
"name": "delegationProgramId"
198+
},
199+
{
200+
"name": "programId"
201+
},
202+
{
203+
"name": "systemProgram"
204+
}
205+
],
206+
"args": [
207+
{
208+
"name": "index",
209+
"type": "u8"
210+
}
211+
]
212+
},
213+
{
214+
"name": "undelegateOracleQueue",
215+
"discriminator": [
216+
6
217+
],
218+
"accounts": [
219+
{
220+
"name": "signer",
221+
"writable": true,
222+
"signer": true
223+
},
224+
{
225+
"name": "queue"
226+
},
227+
{
228+
"name": "magicContextId"
229+
},
230+
{
231+
"name": "magicProgramId"
232+
}
233+
],
234+
"args": [
235+
{
236+
"name": "index",
237+
"type": "u8"
238+
}
239+
]
240+
}
241+
],
242+
"errors": [
243+
{
244+
"code": 0,
245+
"name": "Unauthorized",
246+
"msg": "Unauthorized authority"
247+
},
248+
{
249+
"code": 1,
250+
"name": "RandomnessRequestNotFound",
251+
"msg": "Randomness request not found"
252+
},
253+
{
254+
"code": 2,
255+
"name": "InvalidProof",
256+
"msg": "Invalid proof"
257+
}
258+
],
259+
"types": [
260+
{
261+
"name": "AccountMeta",
262+
"type": {
263+
"kind": "struct",
264+
"fields": [
265+
{
266+
"name": "pubkey",
267+
"type": "pubkey"
268+
},
269+
{
270+
"name": "is_signer",
271+
"type": "bool"
272+
},
273+
{
274+
"name": "is_writable",
275+
"type": "bool"
276+
}
277+
]
278+
}
279+
}
280+
]
281+
}

program/src/provide_randomness.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use solana_program::hash::hash;
12
use crate::verify::verify_vrf;
23
use ephemeral_vrf_api::prelude::*;
34
use steel::*;
@@ -113,7 +114,8 @@ pub fn process_provide_randomness(accounts: &[AccountInfo<'_>], data: &[u8]) ->
113114
item.callback_discriminator.len() + output.0.len() + item.callback_args.len(),
114115
);
115116
callback_data.extend_from_slice(&item.callback_discriminator);
116-
callback_data.extend_from_slice(&output.0);
117+
let rdn = hash(&output.0);
118+
callback_data.extend_from_slice(rdn.to_bytes().as_ref());
117119
callback_data.extend_from_slice(&item.callback_args);
118120

119121
let ix = Instruction {

program/src/request_randomness.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,15 @@ pub fn process_request_randomness(accounts: &[AccountInfo<'_>], data: &[u8]) ->
5454
.try_into()
5555
.map_err(|_| ProgramError::UnsupportedSysvar)?;
5656
let slot = Clock::get()?.slot;
57+
let time = Clock::get()?.unix_timestamp;
5758

5859
let combined_hash = hashv(&[
5960
&args.caller_seed,
6061
&slot.to_le_bytes(),
6162
&slothash,
6263
&args.callback_discriminator,
6364
&args.callback_program_id.to_bytes(),
65+
&time.to_le_bytes(),
6466
]);
6567

6668
let mut oracle_queue =

0 commit comments

Comments
 (0)