@@ -4,6 +4,7 @@ use rand::prelude::*;
4
4
use rand:: SeedableRng ;
5
5
use rand_chacha:: ChaCha8Rng ;
6
6
7
+ use clvmr:: NodePtr ;
7
8
use clvm_tools_rs:: classic:: clvm_tools:: binutils:: { assemble, disassemble} ;
8
9
9
10
use crate :: channel_handler:: game_handler:: GameHandler ;
@@ -14,30 +15,61 @@ use crate::common::types::{
14
15
} ;
15
16
use crate :: referee:: RefereeMaker ;
16
17
17
- fn make_debug_game_handler ( allocator : & mut AllocEncoder , amount : & Amount ) -> GameHandler {
18
+ struct DebugGamePrograms {
19
+ my_validation_program : NodePtr ,
20
+ their_validation_program : NodePtr ,
21
+ my_turn_handler : GameHandler ,
22
+ their_turn_handler : GameHandler ,
23
+ }
24
+
25
+ fn make_debug_game_handler ( allocator : & mut AllocEncoder , amount : & Amount ) -> DebugGamePrograms {
18
26
let debug_game_handler =
19
27
read_hex_puzzle ( allocator, "resources/debug_game_handler.hex" ) . expect ( "should be readable" ) ;
20
28
let game_handler_mod_hash = debug_game_handler. sha256tree ( allocator) ;
21
- let aggsig = Aggsig :: default ( ) ;
22
- let curried_game_handler = CurriedProgram {
23
- program : debug_game_handler. clone ( ) ,
24
- args : clvm_curried_args ! (
25
- ( game_handler_mod_hash,
26
- ( debug_game_handler,
27
- ( amount. clone( ) ,
28
- ( true ,
29
- ( ( ( ) , ( aggsig, ( ) ) ) , ( ) ) // slash info
30
- )
31
- )
32
- )
33
- )
34
- ) ,
29
+ let make_curried_game_handler = |my_turn : bool | {
30
+ let aggsig = Aggsig :: default ( ) ;
31
+ CurriedProgram {
32
+ program : debug_game_handler. clone ( ) ,
33
+ args : clvm_curried_args ! (
34
+ ( game_handler_mod_hash. clone( ) ,
35
+ ( debug_game_handler. clone( ) ,
36
+ ( amount. clone( ) ,
37
+ ( my_turn,
38
+ ( ( ( ) , ( aggsig, ( ) ) ) , ( ) ) // slash info
39
+ )
40
+ )
41
+ )
42
+ )
43
+ ) ,
44
+ }
35
45
} ;
36
- GameHandler :: my_driver_from_nodeptr (
37
- curried_game_handler
46
+
47
+ let my_turn_handler = GameHandler :: my_driver_from_nodeptr (
48
+ make_curried_game_handler ( true )
38
49
. to_clvm ( allocator)
39
50
. expect ( "should curry" ) ,
40
- )
51
+ ) ;
52
+ let my_validation_program = CurriedProgram {
53
+ program : Node ( my_turn_handler. to_nodeptr ( ) ) ,
54
+ args : clvm_curried_args ! ( 1337 )
55
+ } . to_clvm ( allocator) . expect ( "should curry" ) ;
56
+
57
+ let their_turn_handler = GameHandler :: their_driver_from_nodeptr (
58
+ make_curried_game_handler ( false )
59
+ . to_clvm ( allocator)
60
+ . expect ( "should curry" ) ,
61
+ ) ;
62
+ let their_validation_program = CurriedProgram {
63
+ program : Node ( their_turn_handler. to_nodeptr ( ) ) ,
64
+ args : clvm_curried_args ! ( 1337 )
65
+ } . to_clvm ( allocator) . expect ( "should curry" ) ;
66
+
67
+ DebugGamePrograms {
68
+ my_validation_program,
69
+ my_turn_handler,
70
+ their_validation_program,
71
+ their_turn_handler
72
+ }
41
73
}
42
74
43
75
#[ test]
@@ -61,57 +93,84 @@ fn test_referee_smoke() {
61
93
62
94
let amount = Amount :: new ( 100 ) ;
63
95
64
- let debug_game_handler = make_debug_game_handler ( & mut allocator, & amount) ;
65
- let validation_program = CurriedProgram {
66
- program : Node ( debug_game_handler. to_nodeptr ( ) ) ,
67
- args : clvm_curried_args ! ( 1337 )
68
- } . to_clvm ( & mut allocator) . expect ( "should curry" ) ;
96
+ let debug_game = make_debug_game_handler ( & mut allocator, & amount) ;
69
97
let init_state =
70
98
assemble (
71
99
allocator. allocator ( ) ,
72
100
"(0 . 0)"
73
101
) . expect ( "should assemble" ) ;
74
102
75
- let validation_program_hash = Node ( validation_program) . sha256tree ( & mut allocator) ;
103
+ let my_validation_program_hash =
104
+ Node ( debug_game. my_validation_program ) . sha256tree ( & mut allocator) ;
76
105
77
106
let amount = Amount :: new ( 100 ) ;
78
- let game_start_info = GameStartInfo {
107
+ let my_game_start_info = GameStartInfo {
79
108
game_id : GameID :: from_bytes ( b"test" ) ,
80
109
amount : amount. clone ( ) ,
81
- game_handler : debug_game_handler ,
110
+ game_handler : debug_game . my_turn_handler ,
82
111
timeout : Timeout :: new ( 1000 ) ,
83
112
is_my_turn : true ,
84
- initial_validation_puzzle : validation_program ,
85
- initial_validation_puzzle_hash : validation_program_hash ,
113
+ initial_validation_puzzle : debug_game . my_validation_program ,
114
+ initial_validation_puzzle_hash : my_validation_program_hash ,
86
115
initial_state : init_state,
87
116
initial_move : vec ! [ 0 , 0 ] ,
88
117
initial_max_move_size : 0 ,
89
118
initial_mover_share : Amount :: default ( ) ,
90
119
} ;
120
+
91
121
let mut referee = RefereeMaker :: new (
92
122
& mut allocator,
93
123
referee_coin_puzzle_hash. clone ( ) ,
94
- & game_start_info ,
124
+ & my_game_start_info ,
95
125
& my_private_key,
96
126
& their_puzzle_hash,
97
127
1 ,
98
128
)
99
129
. expect ( "should construct" ) ;
130
+
131
+ let their_validation_program_hash =
132
+ Node ( debug_game. their_validation_program ) . sha256tree ( & mut allocator) ;
133
+
134
+ let their_game_start_info = GameStartInfo {
135
+ game_id : GameID :: from_bytes ( b"test" ) ,
136
+ amount : amount. clone ( ) ,
137
+ game_handler : debug_game. their_turn_handler ,
138
+ timeout : Timeout :: new ( 1000 ) ,
139
+ is_my_turn : false ,
140
+ initial_validation_puzzle : debug_game. their_validation_program ,
141
+ initial_validation_puzzle_hash : their_validation_program_hash,
142
+ initial_state : init_state,
143
+ initial_move : vec ! [ 0 , 0 ] ,
144
+ initial_max_move_size : 0 ,
145
+ initial_mover_share : Amount :: default ( ) ,
146
+ } ;
147
+
148
+ let mut their_referee = RefereeMaker :: new (
149
+ & mut allocator,
150
+ referee_coin_puzzle_hash,
151
+ & their_game_start_info,
152
+ & their_private_key,
153
+ & my_puzzle_hash,
154
+ 1 ,
155
+ )
156
+ . expect ( "should construct" ) ;
157
+
100
158
referee. enable_debug_run ( true ) ;
101
159
let readable_move = assemble ( allocator. allocator ( ) , "(0 . 0)" ) . expect ( "should assemble" ) ;
102
- let my_move_result = referee
160
+ let my_move_wire_data = referee
103
161
. my_turn_make_move (
104
162
& mut rng,
105
163
& mut allocator,
106
164
& ReadableMove :: from_nodeptr ( readable_move) ,
107
165
)
108
166
. expect ( "should move" ) ;
109
- assert ! ( my_move_result. move_made. is_empty( ) ) ;
167
+
168
+ assert ! ( my_move_wire_data. move_made. is_empty( ) ) ;
110
169
let mut off_chain_slash_gives_error = referee. clone ( ) ;
111
170
let their_move_result = off_chain_slash_gives_error. their_turn_move_off_chain (
112
171
& mut allocator,
113
172
& [ 1 ] ,
114
- & my_move_result . validation_info_hash ,
173
+ & my_move_wire_data . validation_info_hash ,
115
174
100 ,
116
175
& Amount :: default ( ) ,
117
176
) ;
@@ -123,13 +182,22 @@ fn test_referee_smoke() {
123
182
assert ! ( false ) ;
124
183
}
125
184
126
- let on_chain_cheat = referee. clone ( ) ;
185
+ let their_move_wire_data = their_referee. their_turn_move_off_chain (
186
+ & mut allocator,
187
+ & my_move_wire_data. move_made ,
188
+ & my_move_wire_data. validation_info_hash ,
189
+ my_move_wire_data. max_move_size ,
190
+ & my_move_wire_data. mover_share
191
+ ) . expect ( "should move" ) ;
192
+
193
+ eprintln ! ( "their_move_wire_data {their_move_wire_data:?}" ) ;
127
194
195
+ assert ! ( !referee. is_my_turn) ;
128
196
let their_move_result = referee
129
197
. their_turn_move_off_chain (
130
198
& mut allocator,
131
199
& [ ] ,
132
- & my_move_result . validation_info_hash ,
200
+ & my_move_wire_data . validation_info_hash ,
133
201
100 ,
134
202
& Amount :: default ( ) ,
135
203
)
@@ -139,13 +207,5 @@ fn test_referee_smoke() {
139
207
disassemble( allocator. allocator( ) , their_move_result. readable_move, None ) ,
140
208
"(())"
141
209
) ;
142
-
143
- let mut their_referee = RefereeMaker :: new (
144
- & mut allocator,
145
- referee_coin_puzzle_hash,
146
- & game_start_info,
147
- & their_private_key,
148
- & their_puzzle_hash,
149
- 1 ,
150
- ) ;
210
+ assert ! ( referee. is_my_turn) ;
151
211
}
0 commit comments