Skip to content

Commit 44f18b3

Browse files
committed
Move referee construction into RefereeTest
1 parent b5b181b commit 44f18b3

File tree

4 files changed

+90
-49
lines changed

4 files changed

+90
-49
lines changed

src/channel_handler/types.rs

+1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ pub struct PotatoSignatures {
5151
pub my_unroll_half_signature_peer: Aggsig,
5252
}
5353

54+
#[derive(Debug, Clone)]
5455
pub struct GameStartInfo {
5556
pub game_id: GameID,
5657
pub amount: Amount,

src/common/types.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,7 @@ impl Puzzle {
610610
}
611611
}
612612

613-
#[derive(Clone)]
613+
#[derive(Debug, Clone)]
614614
pub struct Timeout(u64);
615615

616616
impl Timeout {

src/tests/referee.rs

+87-48
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::channel_handler::game_handler::GameHandler;
1111
use crate::channel_handler::types::{GameStartInfo, ReadableMove};
1212
use crate::common::standard_coin::{read_hex_puzzle, ChiaIdentity};
1313
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
1515
};
1616
use crate::referee::{RefereeMaker, ValidatorMoveArgs, GameMoveDetails};
1717

@@ -81,16 +81,78 @@ fn make_debug_game_handler(
8181
}
8282
}
8383

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+
84150
#[test]
85151
fn test_referee_smoke() {
86152
let seed: [u8; 32] = [0; 32];
87153
let mut rng = ChaCha8Rng::from_seed(seed);
88154
let mut allocator = AllocEncoder::new();
89155

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-
94156
// Generate keys and puzzle hashes.
95157
let my_private_key: PrivateKey = rng.gen();
96158
let my_identity = ChiaIdentity::new(&mut allocator, my_private_key).expect("should generate");
@@ -117,7 +179,7 @@ fn test_referee_smoke() {
117179
Node(debug_game.my_validation_program).sha256tree(&mut allocator);
118180

119181
let amount = Amount::new(100);
120-
let my_game_start_info = GameStartInfo {
182+
let game_start_info = GameStartInfo {
121183
game_id: GameID::from_bytes(b"test"),
122184
amount: amount.clone(),
123185
game_handler: debug_game.my_turn_handler,
@@ -131,44 +193,21 @@ fn test_referee_smoke() {
131193
initial_mover_share: Amount::default(),
132194
};
133195

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-
143196
let their_validation_program_hash =
144197
Node(debug_game.their_validation_program).sha256tree(&mut allocator);
145198

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,
163202
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+
);
168207

169-
referee.enable_debug_run(true);
208+
reftest.my_referee.enable_debug_run(true);
170209
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
172211
.my_turn_make_move(
173212
&mut rng,
174213
&mut allocator,
@@ -177,7 +216,7 @@ fn test_referee_smoke() {
177216
.expect("should move");
178217

179218
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();
181220
let their_move_result = off_chain_slash_gives_error.their_turn_move_off_chain(
182221
&mut allocator,
183222
&GameMoveDetails {
@@ -195,31 +234,31 @@ fn test_referee_smoke() {
195234
assert!(false);
196235
}
197236

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(
199238
&mut allocator,
200239
&my_move_wire_data.details,
201240
).expect("should move");
202241

203242
eprintln!("their_move_wire_data {their_move_local_update:?}");
204243

205-
let mover_puzzle = my_identity.puzzle.clone();
244+
let mover_puzzle = reftest.my_identity.puzzle.clone();
206245

207246
let validator_move_args = ValidatorMoveArgs {
208247
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(
211250
&mut allocator,
212-
&[(my_identity.puzzle_hash.clone(), Amount::default())]
251+
&[(reftest.my_identity.puzzle_hash.clone(), Amount::default())]
213252
).expect("should create")
214253
};
215254

216-
let validator_result = their_referee.run_validator_for_their_move(
255+
let validator_result = reftest.their_referee.run_validator_for_their_move(
217256
&mut allocator,
218257
&validator_move_args
219258
).expect("should run");
220259

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
223262
.their_turn_move_off_chain(
224263
&mut allocator,
225264
&my_move_wire_data.details,
@@ -230,5 +269,5 @@ fn test_referee_smoke() {
230269
disassemble(allocator.allocator(), their_move_result.readable_move, None),
231270
"(())"
232271
);
233-
assert!(referee.is_my_turn);
272+
assert!(reftest.my_referee.is_my_turn);
234273
}

src/tests/simulator.rs

+1
Original file line numberDiff line numberDiff line change
@@ -325,4 +325,5 @@ fn test_sim() {
325325

326326
#[test]
327327
fn test_referee_can_slash_on_chain() {
328+
328329
}

0 commit comments

Comments
 (0)