@@ -7,8 +7,11 @@ import (
7
7
"encoding/base64"
8
8
"encoding/json"
9
9
"flag"
10
+ "fmt"
10
11
"io"
11
12
"os"
13
+ "path/filepath"
14
+ "sort"
12
15
"testing"
13
16
14
17
"github.com/scroll-tech/go-ethereum/core/types"
24
27
paramsPath = flag .String ("params" , "/assets/test_params" , "params dir" )
25
28
assetsPath = flag .String ("assets" , "/assets/test_assets" , "assets dir" )
26
29
proofDumpPath = flag .String ("dump" , "/assets/proof_data" , "the path proofs dump to" )
27
- tracePath1 = flag .String ("trace1" , "/assets/traces/1_transfer.json" , "chunk trace 1" )
28
- tracePath2 = flag .String ("trace2" , "/assets/traces/10_transfer.json" , "chunk trace 2" )
30
+ batchDirPath = flag .String ("batch-dir" , "/assets/traces/batch_24" , "batch directory" )
29
31
batchVkPath = flag .String ("batch-vk" , "/assets/test_assets/agg_vk.vkey" , "batch vk" )
30
32
chunkVkPath = flag .String ("chunk-vk" , "/assets/test_assets/chunk_vk.vkey" , "chunk vk" )
31
33
)
@@ -46,23 +48,34 @@ func TestFFI(t *testing.T) {
46
48
as .Equal (chunkProverCore .VK , readVk (* chunkVkPath , as ))
47
49
t .Log ("Chunk VK must be available when init" )
48
50
49
- chunkTrace1 := readChunkTrace (* tracePath1 , as )
50
- chunkTrace2 := readChunkTrace (* tracePath2 , as )
51
- t .Log ("Loaded chunk traces" )
52
-
53
- chunkInfo1 , err := chunkProverCore .TracesToChunkInfo (chunkTrace1 )
54
- as .NoError (err )
55
- chunkInfo2 , err := chunkProverCore .TracesToChunkInfo (chunkTrace2 )
56
- as .NoError (err )
57
- t .Log ("Converted to chunk infos" )
58
-
59
- chunkProof1 , err := chunkProverCore .ProveChunk ("chunk_proof1" , chunkTrace1 )
60
- as .NoError (err )
61
- t .Log ("Generated and dumped chunk proof 1" )
62
-
63
- chunkProof2 , err := chunkProverCore .ProveChunk ("chunk_proof2" , chunkTrace2 )
51
+ // Get the list of subdirectories (chunks)
52
+ chunkDirs , err := os .ReadDir (* batchDirPath )
64
53
as .NoError (err )
65
- t .Log ("Generated and dumped chunk proof 2" )
54
+ sort .Slice (chunkDirs , func (i , j int ) bool {
55
+ return chunkDirs [i ].Name () < chunkDirs [j ].Name ()
56
+ })
57
+
58
+ chunkInfos := make ([]* message.ChunkInfo , 0 , len (chunkDirs ))
59
+ chunkProofs := make ([]* message.ChunkProof , 0 , len (chunkDirs ))
60
+
61
+ for i , dir := range chunkDirs {
62
+ if dir .IsDir () {
63
+ chunkPath := filepath .Join (* batchDirPath , dir .Name ())
64
+
65
+ chunkTrace := readChunkTrace (chunkPath , as )
66
+ t .Logf ("Loaded chunk trace %d" , i + 1 )
67
+
68
+ chunkInfo , err := chunkProverCore .TracesToChunkInfo (chunkTrace )
69
+ as .NoError (err )
70
+ chunkInfos = append (chunkInfos , chunkInfo )
71
+ t .Logf ("Converted to chunk info %d" , i + 1 )
72
+
73
+ chunkProof , err := chunkProverCore .ProveChunk (fmt .Sprintf ("chunk_proof%d" , i + 1 ), chunkTrace )
74
+ as .NoError (err )
75
+ chunkProofs = append (chunkProofs , chunkProof )
76
+ t .Logf ("Generated and dumped chunk proof %d" , i + 1 )
77
+ }
78
+ }
66
79
67
80
as .Equal (chunkProverCore .VK , readVk (* chunkVkPath , as ))
68
81
t .Log ("Chunk VKs must be equal after proving" )
@@ -79,29 +92,53 @@ func TestFFI(t *testing.T) {
79
92
as .Equal (batchProverCore .VK , readVk (* batchVkPath , as ))
80
93
t .Log ("Batch VK must be available when init" )
81
94
82
- chunkInfos := []* message.ChunkInfo {chunkInfo1 , chunkInfo2 }
83
- chunkProofs := []* message.ChunkProof {chunkProof1 , chunkProof2 }
84
95
_ , err = batchProverCore .ProveBatch ("batch_proof" , chunkInfos , chunkProofs )
85
96
as .NoError (err )
86
97
t .Log ("Generated and dumped batch proof" )
87
98
88
99
as .Equal (batchProverCore .VK , readVk (* batchVkPath , as ))
89
100
t .Log ("Batch VKs must be equal after proving" )
90
101
}
91
-
92
102
func readChunkTrace (filePat string , as * assert.Assertions ) []* types.BlockTrace {
93
- f , err := os .Open (filePat )
94
- as .NoError (err )
95
- defer func () {
96
- as .NoError (f .Close ())
97
- }()
98
- byt , err := io .ReadAll (f )
103
+ fileInfo , err := os .Stat (filePat )
99
104
as .NoError (err )
100
105
101
- trace := & types.BlockTrace {}
102
- as .NoError (json .Unmarshal (byt , trace ))
106
+ var traces []* types.BlockTrace
107
+
108
+ readFile := func (path string ) {
109
+ f , err := os .Open (path )
110
+ as .NoError (err )
111
+ defer func () {
112
+ as .NoError (f .Close ())
113
+ }()
114
+ byt , err := io .ReadAll (f )
115
+ as .NoError (err )
116
+
117
+ trace := & types.BlockTrace {}
118
+ as .NoError (json .Unmarshal (byt , trace ))
119
+
120
+ traces = append (traces , trace )
121
+ }
122
+
123
+ if fileInfo .IsDir () {
124
+ files , err := os .ReadDir (filePat )
125
+ as .NoError (err )
126
+
127
+ // Sort files alphabetically
128
+ sort .Slice (files , func (i , j int ) bool {
129
+ return files [i ].Name () < files [j ].Name ()
130
+ })
131
+
132
+ for _ , file := range files {
133
+ if ! file .IsDir () {
134
+ readFile (filepath .Join (filePat , file .Name ()))
135
+ }
136
+ }
137
+ } else {
138
+ readFile (filePat )
139
+ }
103
140
104
- return [] * types. BlockTrace { trace }
141
+ return traces
105
142
}
106
143
107
144
func readVk (filePat string , as * assert.Assertions ) string {
0 commit comments