@@ -11,7 +11,7 @@ use crate::channel_handler::game_handler::GameHandler;
11
11
use crate :: channel_handler:: types:: { GameStartInfo , ReadableMove } ;
12
12
use crate :: common:: standard_coin:: { read_hex_puzzle, ChiaIdentity } ;
13
13
use crate :: common:: types:: {
14
- Aggsig , AllocEncoder , Amount , Error , GameID , Node , PrivateKey , PuzzleHash , Sha256tree , Timeout ,
14
+ Aggsig , AllocEncoder , Amount , Error , GameID , Node , PrivateKey , PuzzleHash , Sha256tree , Timeout , Puzzle , Hash
15
15
} ;
16
16
use crate :: referee:: { RefereeMaker , ValidatorMoveArgs , GameMoveDetails } ;
17
17
@@ -81,16 +81,78 @@ fn make_debug_game_handler(
81
81
}
82
82
}
83
83
84
+ pub struct RefereeTest {
85
+ pub my_identity : ChiaIdentity ,
86
+ pub their_identity : ChiaIdentity ,
87
+
88
+ pub my_referee : RefereeMaker ,
89
+ pub their_referee : RefereeMaker ,
90
+
91
+ pub referee_coin_puzzle : Puzzle ,
92
+ pub referee_coin_puzzle_hash : PuzzleHash ,
93
+ }
94
+
95
+ impl RefereeTest {
96
+ fn new (
97
+ allocator : & mut AllocEncoder ,
98
+
99
+ my_identity : ChiaIdentity ,
100
+ their_identity : ChiaIdentity ,
101
+
102
+ their_game_handler : GameHandler ,
103
+ their_validation_info_hash : PuzzleHash ,
104
+
105
+ game_start : & GameStartInfo
106
+ ) -> RefereeTest {
107
+ // Load up the real referee coin.
108
+ let referee_coin_puzzle = read_hex_puzzle ( allocator, "onchain/referee.hex" ) . expect ( "should be readable" ) ;
109
+ let referee_coin_puzzle_hash: PuzzleHash = referee_coin_puzzle. sha256tree ( allocator) ;
110
+ let my_referee = RefereeMaker :: new (
111
+ referee_coin_puzzle_hash. clone ( ) ,
112
+ & game_start,
113
+ my_identity. clone ( ) ,
114
+ & their_identity. puzzle_hash ,
115
+ 1 ,
116
+ )
117
+ . expect ( "should construct" ) ;
118
+
119
+ let their_game_start_info = GameStartInfo {
120
+ is_my_turn : !game_start. is_my_turn ,
121
+ initial_mover_share : game_start. amount . clone ( ) - game_start. initial_mover_share . clone ( ) ,
122
+ game_handler : their_game_handler,
123
+ initial_validation_puzzle_hash : their_validation_info_hash,
124
+ .. game_start. clone ( )
125
+ } ;
126
+
127
+ let mut their_referee = RefereeMaker :: new (
128
+ referee_coin_puzzle_hash. clone ( ) ,
129
+ & their_game_start_info,
130
+ their_identity. clone ( ) ,
131
+ & my_identity. puzzle_hash ,
132
+ 1 ,
133
+ )
134
+ . expect ( "should construct" ) ;
135
+
136
+
137
+ RefereeTest {
138
+ my_identity,
139
+ their_identity,
140
+
141
+ my_referee,
142
+ their_referee,
143
+
144
+ referee_coin_puzzle,
145
+ referee_coin_puzzle_hash,
146
+ }
147
+ }
148
+ }
149
+
84
150
#[ test]
85
151
fn test_referee_smoke ( ) {
86
152
let seed: [ u8 ; 32 ] = [ 0 ; 32 ] ;
87
153
let mut rng = ChaCha8Rng :: from_seed ( seed) ;
88
154
let mut allocator = AllocEncoder :: new ( ) ;
89
155
90
- // Load up the real referee coin.
91
- let referee_coin_puzzle = read_hex_puzzle ( & mut allocator, "onchain/referee.hex" ) . expect ( "should be readable" ) ;
92
- let referee_coin_puzzle_hash: PuzzleHash = referee_coin_puzzle. sha256tree ( & mut allocator) ;
93
-
94
156
// Generate keys and puzzle hashes.
95
157
let my_private_key: PrivateKey = rng. gen ( ) ;
96
158
let my_identity = ChiaIdentity :: new ( & mut allocator, my_private_key) . expect ( "should generate" ) ;
@@ -117,7 +179,7 @@ fn test_referee_smoke() {
117
179
Node ( debug_game. my_validation_program ) . sha256tree ( & mut allocator) ;
118
180
119
181
let amount = Amount :: new ( 100 ) ;
120
- let my_game_start_info = GameStartInfo {
182
+ let game_start_info = GameStartInfo {
121
183
game_id : GameID :: from_bytes ( b"test" ) ,
122
184
amount : amount. clone ( ) ,
123
185
game_handler : debug_game. my_turn_handler ,
@@ -131,44 +193,21 @@ fn test_referee_smoke() {
131
193
initial_mover_share : Amount :: default ( ) ,
132
194
} ;
133
195
134
- let mut referee = RefereeMaker :: new (
135
- referee_coin_puzzle_hash. clone ( ) ,
136
- & my_game_start_info,
137
- my_identity. clone ( ) ,
138
- & their_identity. puzzle_hash ,
139
- 1 ,
140
- )
141
- . expect ( "should construct" ) ;
142
-
143
196
let their_validation_program_hash =
144
197
Node ( debug_game. their_validation_program ) . sha256tree ( & mut allocator) ;
145
198
146
- let their_game_start_info = GameStartInfo {
147
- game_id : GameID :: from_bytes ( b"test" ) ,
148
- amount : amount. clone ( ) ,
149
- game_handler : debug_game. their_turn_handler ,
150
- timeout : Timeout :: new ( 1000 ) ,
151
- is_my_turn : false ,
152
- initial_validation_puzzle : debug_game. their_validation_program ,
153
- initial_validation_puzzle_hash : their_validation_program_hash,
154
- initial_state : init_state,
155
- initial_move : vec ! [ 0 , 0 ] ,
156
- initial_max_move_size : 0 ,
157
- initial_mover_share : Amount :: default ( ) ,
158
- } ;
159
-
160
- let mut their_referee = RefereeMaker :: new (
161
- referee_coin_puzzle_hash,
162
- & their_game_start_info,
199
+ let mut reftest = RefereeTest :: new (
200
+ & mut allocator,
201
+ my_identity,
163
202
their_identity,
164
- & my_identity . puzzle_hash ,
165
- 1 ,
166
- )
167
- . expect ( "should construct" ) ;
203
+ debug_game . their_turn_handler ,
204
+ their_validation_program_hash ,
205
+ & game_start_info ,
206
+ ) ;
168
207
169
- referee . enable_debug_run ( true ) ;
208
+ reftest . my_referee . enable_debug_run ( true ) ;
170
209
let readable_move = assemble ( allocator. allocator ( ) , "(0 . 0)" ) . expect ( "should assemble" ) ;
171
- let my_move_wire_data = referee
210
+ let my_move_wire_data = reftest . my_referee
172
211
. my_turn_make_move (
173
212
& mut rng,
174
213
& mut allocator,
@@ -177,7 +216,7 @@ fn test_referee_smoke() {
177
216
. expect ( "should move" ) ;
178
217
179
218
assert ! ( my_move_wire_data. details. move_made. is_empty( ) ) ;
180
- let mut off_chain_slash_gives_error = referee . clone ( ) ;
219
+ let mut off_chain_slash_gives_error = reftest . my_referee . clone ( ) ;
181
220
let their_move_result = off_chain_slash_gives_error. their_turn_move_off_chain (
182
221
& mut allocator,
183
222
& GameMoveDetails {
@@ -195,31 +234,31 @@ fn test_referee_smoke() {
195
234
assert ! ( false ) ;
196
235
}
197
236
198
- let their_move_local_update = their_referee. their_turn_move_off_chain (
237
+ let their_move_local_update = reftest . their_referee . their_turn_move_off_chain (
199
238
& mut allocator,
200
239
& my_move_wire_data. details ,
201
240
) . expect ( "should move" ) ;
202
241
203
242
eprintln ! ( "their_move_wire_data {their_move_local_update:?}" ) ;
204
243
205
- let mover_puzzle = my_identity. puzzle . clone ( ) ;
244
+ let mover_puzzle = reftest . my_identity . puzzle . clone ( ) ;
206
245
207
246
let validator_move_args = ValidatorMoveArgs {
208
247
game_move : my_move_wire_data. details . clone ( ) ,
209
- mover_puzzle : my_identity. puzzle . to_program ( ) ,
210
- solution : my_identity. standard_solution (
248
+ mover_puzzle : reftest . my_identity . puzzle . to_program ( ) ,
249
+ solution : reftest . my_identity . standard_solution (
211
250
& mut allocator,
212
- & [ ( my_identity. puzzle_hash . clone ( ) , Amount :: default ( ) ) ]
251
+ & [ ( reftest . my_identity . puzzle_hash . clone ( ) , Amount :: default ( ) ) ]
213
252
) . expect ( "should create" )
214
253
} ;
215
254
216
- let validator_result = their_referee. run_validator_for_their_move (
255
+ let validator_result = reftest . their_referee . run_validator_for_their_move (
217
256
& mut allocator,
218
257
& validator_move_args
219
258
) . expect ( "should run" ) ;
220
259
221
- assert ! ( !referee . is_my_turn) ;
222
- let their_move_result = referee
260
+ assert ! ( !reftest . my_referee . is_my_turn) ;
261
+ let their_move_result = reftest . my_referee
223
262
. their_turn_move_off_chain (
224
263
& mut allocator,
225
264
& my_move_wire_data. details ,
@@ -230,5 +269,5 @@ fn test_referee_smoke() {
230
269
disassemble( allocator. allocator( ) , their_move_result. readable_move, None ) ,
231
270
"(())"
232
271
) ;
233
- assert ! ( referee . is_my_turn) ;
272
+ assert ! ( reftest . my_referee . is_my_turn) ;
234
273
}
0 commit comments