Skip to content

Commit 606b915

Browse files
committed
Should be strictly better. Allow us to use the debug game program properly as the validation program
1 parent 7d30595 commit 606b915

File tree

4 files changed

+62
-19
lines changed

4 files changed

+62
-19
lines changed

onchain/referee.hex

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ff02ffff01ff02ffff03ff07ffff01ff02ffff03ffff07ff1780ffff01ff02ff3affff04ff02ffff04ff03ffff04ff07ff8080808080ffff01ff02ff36ffff04ff02ffff04ff03ffff04ff07ff808080808080ff0180ffff01ff04ffff04ff38ffff04ff2dff808080ffff04ffff03ff8217fdffff04ff24ffff04ff09ffff04ff8217fdff80808080ffff04ffff0101ff808080ffff04ffff03ffff11ff5dff8217fd80ffff04ff24ffff04ff15ffff04ffff11ff5dff8217fd80ff80808080ffff04ffff0101ff808080ff8080808080ff0180ffff04ffff01ffffffff02ffff03ff05ffff01ff04ff09ffff02ff10ffff04ff02ffff04ff0dffff04ff0bff808080808080ffff010b80ff0180ff5652ffff3301ffff02ffff03ff05ffff01ff0bffff06ffff06ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c58080ffff02ff22ffff04ff02ffff04ff09ffff04ffff02ff2cffff04ff02ffff04ff0dff80808080ff808080808080ffff01ff06ffff05ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c5808080ff0180ff0bffff05ffff06ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c58080ffff02ff22ffff04ff02ffff04ff05ffff04ffff02ff2cffff04ff02ffff04ff07ff80808080ff808080808080ffffffff0bffff0102ffff0bffff0102ffff06ffff05ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c58080ff0580ffff0bffff0102ff0bffff05ffff05ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c580808080ff02ffff03ff0bffff01ff02ffff03ffff02ff05ffff04ff13ff808080ffff0113ffff01ff02ff32ffff04ff02ffff04ff05ffff04ff1bff808080808080ff0180ffff01ff018080ff0180ffff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff2affff04ff02ffff04ff09ff80808080ffff02ff2affff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff02ff26ffff04ff02ffff04ff03ffff04ffff02ff2affff04ff02ffff04ff2bff80808080ff8080808080ffffff02ffff03ffff09ff21ffff02ff2affff04ff02ffff04ff8200b5ff8080808080ffff01ff02ffff03ffff09ff8300bff1ffff0bff0bffff02ff2affff04ff02ffff04ff25ff808080808080ffff01ff04ffff04ff34ff8080ffff02ff10ffff04ff02ffff04ffff02ff55ffff04ff0bff098080ffff04ffff02ff8200b5ff82017580ff808080808080ffff01ff088080ff0180ffff01ff088080ff0180ff02ff2effff04ff02ffff04ff03ffff04ffff02ff3cffff04ff02ffff04ffff02ff2affff04ff02ffff04ffff04ff29ffff04ff11ffff04ff59ffff04ff8200b9ffff04ff820179ffff04ff8202f9ffff04ff13ffff04ff8200bbffff04ff2bffff04ff5bffff04ff8217f9ff808080808080808080808080ff80808080ffff04ff820179ff8080808080ffff04ffff02ff82017bff8202fb80ff808080808080ffff02ffff03ff822ff1ffff01ff02ffff03ffff20ffff15ffff0dff820bf180ff8217f18080ffff01ff02ffff03ffff20ffff15ff8200b5ff8201718080ffff01ff02ffff03ffff20ffff15ff80ff8200b58080ffff01ff02ffff03ffff19ffff20ff5580ffff09ffff0120ffff0dff55808080ffff01ff02ffff03ffff09ff21ffff02ff2affff04ff02ffff04ff8202f5ff8080808080ffff01ff02ffff03ffff02ff32ffff04ff02ffff04ffff04ffff0102ffff04ffff04ffff0101ffff04ffff0102ffff04ffff04ffff0101ff3e80ffff04ffff04ffff0104ffff04ffff04ffff0101ff0280ffff04ffff0101ff80808080ff8080808080ffff04ffff04ffff0104ffff04ffff04ffff0101ffff04ff0bffff04ff820171ff80808080ffff04ffff0101ff80808080ff80808080ffff04ff17ff8080808080ffff01ff04ffff04ff34ffff04ff25ffff04ff55ffff04ff8200b5ffff04ff820175ff808080808080ffff04ffff04ff28ffff04ff8200b1ff808080ff178080ffff01ff088080ff0180ffff01ff088080ff0180ffff01ff088080ff0180ffff01ff088080ff0180ffff01ff088080ff0180ffff01ff088080ff0180ffff01ff088080ff0180ff18ffff09ff13ff2480ffff09ff2bff0980ffff09ff5bff158080ff018080

resources/debug_game_handler.clsp

+13-5
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
(ash new-move -1)
5252
)
5353

54-
(defun validation_program (validation-data)
54+
(defun validation_program (CURRIED validation-data)
5555
(assign
5656
cheated (logand (get-validation-move validation-data) 1)
5757
(if cheated
@@ -118,8 +118,16 @@
118118

119119
(export
120120
(CURRIED . args)
121-
(if (curried_my_turn CURRIED)
122-
(do_my_turn CURRIED &rest args)
123-
(do_their_turn CURRIED &rest args)
124-
)
121+
(if
122+
;; Validation personality
123+
(if (not (l (f args))) (= 1337 (f args)) ())
124+
(validation_program CURRIED &rest (r args))
125+
126+
;; My turn personality
127+
(curried_my_turn CURRIED)
128+
(do_my_turn CURRIED &rest args)
129+
130+
;; Their turn personality
131+
(do_their_turn CURRIED &rest args)
132+
)
125133
)

resources/debug_game_handler.hex

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
ff02ffff01ff02ffff03ff5dffff01ff02ff10ffff04ff02ffff04ff05ff07808080ffff01ff02ff14ffff04ff02ffff04ff05ff0780808080ff0180ffff04ffff01ffffffff02ff28ffff04ff02ffff04ff03ffff04ff0bffff04ff0bffff04ffff02ff2effff04ff02ffff04ff2fff80808080ffff04ffff04ff09ffff04ff15ffff04ff2dffff04ffff20ff5d80ffff04ff8200bdff808080808080ff8080808080808080ffff02ff38ffff04ff02ffff04ff03ffff04ffff02ff26ffff04ff02ffff04ff82009fffff04ffff02ff2effff04ff02ffff04ff5fff80808080ff8080808080ffff04ffff19ffff18ffff0101ff1b80ffff16ff13ffff01018080ff808080808080ff04ff17ffff04ffff04ffff0102ffff04ffff04ffff0101ff3e80ffff04ffff04ffff0104ffff04ffff04ffff0101ff0280ffff04ffff0101ff80808080ff80808080ffff04ffff0bff0bffff02ff2effff04ff02ffff04ff17ff8080808080ffff04ffff04ff25ff3580ffff04ffff0164ffff04ff25ffff04ffff02ff3affff04ff02ffff04ff51ffff04ff8200bdff8080808080ffff04ff80ff808080808080808080ffff02ffff03ffff18ff2fffff010180ffff01ff04ffff0102ff8200bd80ffff01ff04ff80ffff04ffff04ffff18ff2fffff010180ffff02ff2cffff04ff02ffff04ff2fff8080808080ffff04ffff02ff3affff04ff02ffff04ff15ffff04ffff04ff09ffff04ff15ffff04ff2dffff04ffff20ff5d80ffff04ff8200bdff808080808080ff8080808080ffff04ffff018c6d6573736167652064617461ff808080808080ff0180ffff16ff05ffff0181ff8082017fffffff02ffff03ff05ffff01ff04ffff0104ffff04ffff04ffff0101ff0980ffff04ffff02ff12ffff04ff02ffff04ff0dff80808080ff80808080ffff01ff010180ff0180ffff02ffff03ff05ffff01ff0bffff06ffff06ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c58080ffff02ff36ffff04ff02ffff04ff09ffff04ffff02ff2affff04ff02ffff04ff0dff80808080ff808080808080ffff01ff06ffff05ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c5808080ff0180ff04ffff0102ffff04ffff04ffff0101ff0580ffff04ffff02ff12ffff04ff02ffff04ff07ff80808080ff80808080ffffff0bffff05ffff06ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c58080ffff02ff36ffff04ff02ffff04ff05ffff04ffff02ff2affff04ff02ffff04ff07ff80808080ff808080808080ff0bffff0102ffff0bffff0102ffff06ffff05ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c58080ff0580ffff0bffff0102ff0bffff05ffff05ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c580808080ffff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff2effff04ff02ffff04ff09ff80808080ffff02ff2effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff02ffff03ffff18ffff02ff3cffff04ff02ffff04ff05ff80808080ffff010180ffff01ff08ffff019b76616c69646174696f6e2070726f6772616d206368656174696e67ff0580ffff01ff018080ff0180ff018080
1+
ff02ffff01ff02ffff03ffff02ffff03ffff07ff0b80ffff01ff0180ffff01ff09ffff01820539ff0b8080ff0180ffff01ff02ff3effff04ff02ffff04ff05ff0f808080ffff01ff02ffff03ff5dffff01ff02ff10ffff04ff02ffff04ff05ff07808080ffff01ff02ff14ffff04ff02ffff04ff05ff0780808080ff018080ff0180ffff04ffff01ffffffff02ff28ffff04ff02ffff04ff03ffff04ff0bffff04ff0bffff04ffff02ff2effff04ff02ffff04ff2fff80808080ffff04ffff04ff09ffff04ff15ffff04ff2dffff04ffff20ff5d80ffff04ff8200bdff808080808080ff8080808080808080ffff02ff38ffff04ff02ffff04ff03ffff04ffff02ff26ffff04ff02ffff04ff82009fffff04ffff02ff2effff04ff02ffff04ff5fff80808080ff8080808080ffff04ffff19ffff18ffff0101ff1b80ffff16ff13ffff01018080ff808080808080ff04ff17ffff04ffff04ffff0102ffff04ffff04ffff0101ff3e80ffff04ffff04ffff0104ffff04ffff04ffff0101ff0280ffff04ffff0101ff80808080ff80808080ffff04ffff0bff0bffff02ff2effff04ff02ffff04ff17ff8080808080ffff04ffff04ff25ff3580ffff04ffff0164ffff04ff25ffff04ffff02ff3affff04ff02ffff04ff51ffff04ff8200bdff8080808080ffff04ff80ff808080808080808080ffff02ffff03ffff18ff2fffff010180ffff01ff04ffff0102ff8200bd80ffff01ff04ff80ffff04ffff04ffff18ff2fffff010180ffff02ff2cffff04ff02ffff04ff2fff8080808080ffff04ffff02ff3affff04ff02ffff04ff15ffff04ffff04ff09ffff04ff15ffff04ff2dffff04ffff20ff5d80ffff04ff8200bdff808080808080ff8080808080ffff04ffff018c6d6573736167652064617461ff808080808080ff0180ffff16ff05ffff0181ff8082017fffffff02ffff03ff05ffff01ff04ffff0104ffff04ffff04ffff0101ff0980ffff04ffff02ff12ffff04ff02ffff04ff0dff80808080ff80808080ffff01ff010180ff0180ffff02ffff03ff05ffff01ff0bffff06ffff06ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c58080ffff02ff36ffff04ff02ffff04ff09ffff04ffff02ff2affff04ff02ffff04ff0dff80808080ff808080808080ffff01ff06ffff05ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c5808080ff0180ff04ffff0102ffff04ffff04ffff0101ff0580ffff04ffff02ff12ffff04ff02ffff04ff07ff80808080ff80808080ffffff0bffff05ffff06ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c58080ffff02ff36ffff04ff02ffff04ff05ffff04ffff02ff2affff04ff02ffff04ff07ff80808080ff808080808080ff0bffff0102ffff0bffff0102ffff06ffff05ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c58080ff0580ffff0bffff0102ff0bffff05ffff05ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c580808080ffff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff2effff04ff02ffff04ff09ff80808080ffff02ff2effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff02ffff03ffff18ffff02ff3cffff04ff02ffff04ff0bff80808080ffff010180ffff01ff08ffff019b76616c69646174696f6e2070726f6772616d206368656174696e67ff0b80ffff01ff018080ff0180ff018080

src/tests/referee.rs

+47-13
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use clvm_tools_rs::classic::clvm_tools::binutils::{assemble, disassemble};
88

99
use crate::channel_handler::game_handler::GameHandler;
1010
use crate::channel_handler::types::{GameStartInfo, ReadableMove};
11-
use crate::common::standard_coin::read_hex_puzzle;
11+
use crate::common::standard_coin::{private_to_public_key, read_hex_puzzle, puzzle_hash_for_pk};
1212
use crate::common::types::{
1313
Aggsig, AllocEncoder, Amount, Error, GameID, Node, PrivateKey, PuzzleHash, Sha256tree, Timeout,
1414
};
@@ -45,31 +45,54 @@ fn test_referee_smoke() {
4545
let seed: [u8; 32] = [0; 32];
4646
let mut rng = ChaCha8Rng::from_seed(seed);
4747
let mut allocator = AllocEncoder::new();
48-
let referee_coin_puzzle_hash: PuzzleHash = rng.gen();
49-
let private_key: PrivateKey = rng.gen();
50-
let their_puzzle_hash: PuzzleHash = rng.gen();
51-
let nil = allocator.allocator().null();
52-
let val_hash = Node(nil).sha256tree(&mut allocator);
53-
let init_state = assemble(allocator.allocator(), "(0 . 0)").expect("should assemble");
48+
49+
// Load up the real referee coin.
50+
let referee_coin_puzzle = read_hex_puzzle(&mut allocator, "onchain/referee.hex").expect("should be readable");
51+
let referee_coin_puzzle_hash: PuzzleHash = referee_coin_puzzle.sha256tree(&mut allocator);
52+
53+
// Generate keys and puzzle hashes.
54+
let my_private_key: PrivateKey = rng.gen();
55+
let my_public_key = private_to_public_key(&my_private_key);
56+
let my_puzzle_hash = puzzle_hash_for_pk(&mut allocator, &my_public_key).expect("should have");
57+
58+
let their_private_key: PrivateKey = rng.gen();
59+
let their_public_key = private_to_public_key(&their_private_key);
60+
let their_puzzle_hash: PuzzleHash = puzzle_hash_for_pk(&mut allocator, &their_public_key).expect("should have");
61+
62+
let amount = Amount::new(100);
63+
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");
69+
let init_state =
70+
assemble(
71+
allocator.allocator(),
72+
"(0 . 0)"
73+
).expect("should assemble");
74+
75+
let validation_program_hash = Node(validation_program).sha256tree(&mut allocator);
76+
5477
let amount = Amount::new(100);
5578
let game_start_info = GameStartInfo {
5679
game_id: GameID::from_bytes(b"test"),
5780
amount: amount.clone(),
58-
game_handler: make_debug_game_handler(&mut allocator, &amount),
81+
game_handler: debug_game_handler,
5982
timeout: Timeout::new(1000),
6083
is_my_turn: true,
61-
initial_validation_puzzle: nil,
62-
initial_validation_puzzle_hash: val_hash,
84+
initial_validation_puzzle: validation_program,
85+
initial_validation_puzzle_hash: validation_program_hash,
6386
initial_state: init_state,
6487
initial_move: vec![0, 0],
6588
initial_max_move_size: 0,
6689
initial_mover_share: Amount::default(),
6790
};
6891
let mut referee = RefereeMaker::new(
6992
&mut allocator,
70-
referee_coin_puzzle_hash,
93+
referee_coin_puzzle_hash.clone(),
7194
&game_start_info,
72-
&private_key,
95+
&my_private_key,
7396
&their_puzzle_hash,
7497
1,
7598
)
@@ -100,10 +123,12 @@ fn test_referee_smoke() {
100123
assert!(false);
101124
}
102125

126+
let on_chain_cheat = referee.clone();
127+
103128
let their_move_result = referee
104129
.their_turn_move_off_chain(
105130
&mut allocator,
106-
&[0],
131+
&[],
107132
&my_move_result.validation_info_hash,
108133
100,
109134
&Amount::default(),
@@ -114,4 +139,13 @@ fn test_referee_smoke() {
114139
disassemble(allocator.allocator(), their_move_result.readable_move, None),
115140
"(())"
116141
);
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+
);
117151
}

0 commit comments

Comments
 (0)