@@ -18,6 +18,12 @@ pub struct HashSignalInfo {
18
18
pub signalsize : u64 ,
19
19
}
20
20
21
+ pub struct Graph {
22
+ pub nodes : Vec < Node > ,
23
+ pub signals : Vec < usize > ,
24
+ pub input_mapping : Vec < HashSignalInfo > ,
25
+ }
26
+
21
27
fn fnv1a ( s : & str ) -> u64 {
22
28
let mut hash: u64 = 0xCBF29CE484222325 ;
23
29
for c in s. bytes ( ) {
@@ -39,18 +45,27 @@ fn set_input_signal_eval(
39
45
signal_values[ si] = val;
40
46
}
41
47
48
+ /// Loads the graph from bytes
49
+ pub fn init_graph ( graph_bytes : & [ u8 ] ) -> eyre:: Result < Graph > {
50
+ let ( nodes, signals, input_mapping) : ( Vec < Node > , Vec < usize > , Vec < HashSignalInfo > ) =
51
+ postcard:: from_bytes ( graph_bytes) ?;
52
+
53
+ Ok ( Graph {
54
+ nodes,
55
+ signals,
56
+ input_mapping,
57
+ } )
58
+ }
59
+
42
60
/// Calculate witness based on serialized graph and inputs
43
61
pub fn calculate_witness (
44
62
input_list : HashMap < String , Vec < U256 > > ,
45
- graph_bytes : & [ u8 ] ,
63
+ graph : & Graph ,
46
64
) -> eyre:: Result < Vec < U256 > > {
47
- let ( nodes, signals, input_mapping) : ( Vec < Node > , Vec < usize > , Vec < HashSignalInfo > ) =
48
- postcard:: from_bytes ( graph_bytes) ?;
49
-
50
65
// Calculate number of inputs from graph
51
66
let mut start = false ;
52
67
let mut max_index = 0usize ;
53
- for & node in nodes. iter ( ) {
68
+ for & node in graph . nodes . iter ( ) {
54
69
if let Node :: Input ( i) = node {
55
70
if i > max_index {
56
71
max_index = i;
@@ -69,12 +84,12 @@ pub fn calculate_witness(
69
84
for ( key, value) in input_list {
70
85
let h = fnv1a ( key. as_str ( ) ) ;
71
86
for ( idx, item) in value. into_iter ( ) . enumerate ( ) {
72
- set_input_signal_eval ( input_mapping. clone ( ) , & mut inputs, h, idx as u64 , item) ;
87
+ set_input_signal_eval ( graph . input_mapping . clone ( ) , & mut inputs, h, idx as u64 , item) ;
73
88
}
74
89
}
75
90
76
91
// Calculate witness
77
- let witness = graph:: evaluate ( & nodes, & inputs, & signals) ;
92
+ let witness = graph:: evaluate ( & graph . nodes , & inputs, & graph . signals ) ;
78
93
79
94
Ok ( witness)
80
95
}
0 commit comments