Skip to content

Commit

Permalink
Should be strictly better. Allow us to use the debug game program pro…
Browse files Browse the repository at this point in the history
…perly as the validation program
  • Loading branch information
prozacchiwawa committed May 15, 2024
1 parent 7d30595 commit 606b915
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 19 deletions.
1 change: 1 addition & 0 deletions onchain/referee.hex
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ff02ffff01ff02ffff03ff07ffff01ff02ffff03ffff07ff1780ffff01ff02ff3affff04ff02ffff04ff03ffff04ff07ff8080808080ffff01ff02ff36ffff04ff02ffff04ff03ffff04ff07ff808080808080ff0180ffff01ff04ffff04ff38ffff04ff2dff808080ffff04ffff03ff8217fdffff04ff24ffff04ff09ffff04ff8217fdff80808080ffff04ffff0101ff808080ffff04ffff03ffff11ff5dff8217fd80ffff04ff24ffff04ff15ffff04ffff11ff5dff8217fd80ff80808080ffff04ffff0101ff808080ff8080808080ff0180ffff04ffff01ffffffff02ffff03ff05ffff01ff04ff09ffff02ff10ffff04ff02ffff04ff0dffff04ff0bff808080808080ffff010b80ff0180ff5652ffff3301ffff02ffff03ff05ffff01ff0bffff06ffff06ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c58080ffff02ff22ffff04ff02ffff04ff09ffff04ffff02ff2cffff04ff02ffff04ff0dff80808080ff808080808080ffff01ff06ffff05ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c5808080ff0180ff0bffff05ffff06ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c58080ffff02ff22ffff04ff02ffff04ff05ffff04ffff02ff2cffff04ff02ffff04ff07ff80808080ff808080808080ffffffff0bffff0102ffff0bffff0102ffff06ffff05ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c58080ff0580ffff0bffff0102ff0bffff05ffff05ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c580808080ff02ffff03ff0bffff01ff02ffff03ffff02ff05ffff04ff13ff808080ffff0113ffff01ff02ff32ffff04ff02ffff04ff05ffff04ff1bff808080808080ff0180ffff01ff018080ff0180ffff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff2affff04ff02ffff04ff09ff80808080ffff02ff2affff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff02ff26ffff04ff02ffff04ff03ffff04ffff02ff2affff04ff02ffff04ff2bff80808080ff8080808080ffffff02ffff03ffff09ff21ffff02ff2affff04ff02ffff04ff8200b5ff8080808080ffff01ff02ffff03ffff09ff8300bff1ffff0bff0bffff02ff2affff04ff02ffff04ff25ff808080808080ffff01ff04ffff04ff34ff8080ffff02ff10ffff04ff02ffff04ffff02ff55ffff04ff0bff098080ffff04ffff02ff8200b5ff82017580ff808080808080ffff01ff088080ff0180ffff01ff088080ff0180ff02ff2effff04ff02ffff04ff03ffff04ffff02ff3cffff04ff02ffff04ffff02ff2affff04ff02ffff04ffff04ff29ffff04ff11ffff04ff59ffff04ff8200b9ffff04ff820179ffff04ff8202f9ffff04ff13ffff04ff8200bbffff04ff2bffff04ff5bffff04ff8217f9ff808080808080808080808080ff80808080ffff04ff820179ff8080808080ffff04ffff02ff82017bff8202fb80ff808080808080ffff02ffff03ff822ff1ffff01ff02ffff03ffff20ffff15ffff0dff820bf180ff8217f18080ffff01ff02ffff03ffff20ffff15ff8200b5ff8201718080ffff01ff02ffff03ffff20ffff15ff80ff8200b58080ffff01ff02ffff03ffff19ffff20ff5580ffff09ffff0120ffff0dff55808080ffff01ff02ffff03ffff09ff21ffff02ff2affff04ff02ffff04ff8202f5ff8080808080ffff01ff02ffff03ffff02ff32ffff04ff02ffff04ffff04ffff0102ffff04ffff04ffff0101ffff04ffff0102ffff04ffff04ffff0101ff3e80ffff04ffff04ffff0104ffff04ffff04ffff0101ff0280ffff04ffff0101ff80808080ff8080808080ffff04ffff04ffff0104ffff04ffff04ffff0101ffff04ff0bffff04ff820171ff80808080ffff04ffff0101ff80808080ff80808080ffff04ff17ff8080808080ffff01ff04ffff04ff34ffff04ff25ffff04ff55ffff04ff8200b5ffff04ff820175ff808080808080ffff04ffff04ff28ffff04ff8200b1ff808080ff178080ffff01ff088080ff0180ffff01ff088080ff0180ffff01ff088080ff0180ffff01ff088080ff0180ffff01ff088080ff0180ffff01ff088080ff0180ffff01ff088080ff0180ff18ffff09ff13ff2480ffff09ff2bff0980ffff09ff5bff158080ff018080
18 changes: 13 additions & 5 deletions resources/debug_game_handler.clsp
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
(ash new-move -1)
)

(defun validation_program (validation-data)
(defun validation_program (CURRIED validation-data)
(assign
cheated (logand (get-validation-move validation-data) 1)
(if cheated
Expand Down Expand Up @@ -118,8 +118,16 @@

(export
(CURRIED . args)
(if (curried_my_turn CURRIED)
(do_my_turn CURRIED &rest args)
(do_their_turn CURRIED &rest args)
)
(if
;; Validation personality
(if (not (l (f args))) (= 1337 (f args)) ())
(validation_program CURRIED &rest (r args))

;; My turn personality
(curried_my_turn CURRIED)
(do_my_turn CURRIED &rest args)

;; Their turn personality
(do_their_turn CURRIED &rest args)
)
)
2 changes: 1 addition & 1 deletion resources/debug_game_handler.hex
Original file line number Diff line number Diff line change
@@ -1 +1 @@
ff02ffff01ff02ffff03ff5dffff01ff02ff10ffff04ff02ffff04ff05ff07808080ffff01ff02ff14ffff04ff02ffff04ff05ff0780808080ff0180ffff04ffff01ffffffff02ff28ffff04ff02ffff04ff03ffff04ff0bffff04ff0bffff04ffff02ff2effff04ff02ffff04ff2fff80808080ffff04ffff04ff09ffff04ff15ffff04ff2dffff04ffff20ff5d80ffff04ff8200bdff808080808080ff8080808080808080ffff02ff38ffff04ff02ffff04ff03ffff04ffff02ff26ffff04ff02ffff04ff82009fffff04ffff02ff2effff04ff02ffff04ff5fff80808080ff8080808080ffff04ffff19ffff18ffff0101ff1b80ffff16ff13ffff01018080ff808080808080ff04ff17ffff04ffff04ffff0102ffff04ffff04ffff0101ff3e80ffff04ffff04ffff0104ffff04ffff04ffff0101ff0280ffff04ffff0101ff80808080ff80808080ffff04ffff0bff0bffff02ff2effff04ff02ffff04ff17ff8080808080ffff04ffff04ff25ff3580ffff04ffff0164ffff04ff25ffff04ffff02ff3affff04ff02ffff04ff51ffff04ff8200bdff8080808080ffff04ff80ff808080808080808080ffff02ffff03ffff18ff2fffff010180ffff01ff04ffff0102ff8200bd80ffff01ff04ff80ffff04ffff04ffff18ff2fffff010180ffff02ff2cffff04ff02ffff04ff2fff8080808080ffff04ffff02ff3affff04ff02ffff04ff15ffff04ffff04ff09ffff04ff15ffff04ff2dffff04ffff20ff5d80ffff04ff8200bdff808080808080ff8080808080ffff04ffff018c6d6573736167652064617461ff808080808080ff0180ffff16ff05ffff0181ff8082017fffffff02ffff03ff05ffff01ff04ffff0104ffff04ffff04ffff0101ff0980ffff04ffff02ff12ffff04ff02ffff04ff0dff80808080ff80808080ffff01ff010180ff0180ffff02ffff03ff05ffff01ff0bffff06ffff06ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c58080ffff02ff36ffff04ff02ffff04ff09ffff04ffff02ff2affff04ff02ffff04ff0dff80808080ff808080808080ffff01ff06ffff05ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c5808080ff0180ff04ffff0102ffff04ffff04ffff0101ff0580ffff04ffff02ff12ffff04ff02ffff04ff07ff80808080ff80808080ffffff0bffff05ffff06ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c58080ffff02ff36ffff04ff02ffff04ff05ffff04ffff02ff2affff04ff02ffff04ff07ff80808080ff808080808080ff0bffff0102ffff0bffff0102ffff06ffff05ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c58080ff0580ffff0bffff0102ff0bffff05ffff05ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c580808080ffff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff2effff04ff02ffff04ff09ff80808080ffff02ff2effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff02ffff03ffff18ffff02ff3cffff04ff02ffff04ff05ff80808080ffff010180ffff01ff08ffff019b76616c69646174696f6e2070726f6772616d206368656174696e67ff0580ffff01ff018080ff0180ff018080
ff02ffff01ff02ffff03ffff02ffff03ffff07ff0b80ffff01ff0180ffff01ff09ffff01820539ff0b8080ff0180ffff01ff02ff3effff04ff02ffff04ff05ff0f808080ffff01ff02ffff03ff5dffff01ff02ff10ffff04ff02ffff04ff05ff07808080ffff01ff02ff14ffff04ff02ffff04ff05ff0780808080ff018080ff0180ffff04ffff01ffffffff02ff28ffff04ff02ffff04ff03ffff04ff0bffff04ff0bffff04ffff02ff2effff04ff02ffff04ff2fff80808080ffff04ffff04ff09ffff04ff15ffff04ff2dffff04ffff20ff5d80ffff04ff8200bdff808080808080ff8080808080808080ffff02ff38ffff04ff02ffff04ff03ffff04ffff02ff26ffff04ff02ffff04ff82009fffff04ffff02ff2effff04ff02ffff04ff5fff80808080ff8080808080ffff04ffff19ffff18ffff0101ff1b80ffff16ff13ffff01018080ff808080808080ff04ff17ffff04ffff04ffff0102ffff04ffff04ffff0101ff3e80ffff04ffff04ffff0104ffff04ffff04ffff0101ff0280ffff04ffff0101ff80808080ff80808080ffff04ffff0bff0bffff02ff2effff04ff02ffff04ff17ff8080808080ffff04ffff04ff25ff3580ffff04ffff0164ffff04ff25ffff04ffff02ff3affff04ff02ffff04ff51ffff04ff8200bdff8080808080ffff04ff80ff808080808080808080ffff02ffff03ffff18ff2fffff010180ffff01ff04ffff0102ff8200bd80ffff01ff04ff80ffff04ffff04ffff18ff2fffff010180ffff02ff2cffff04ff02ffff04ff2fff8080808080ffff04ffff02ff3affff04ff02ffff04ff15ffff04ffff04ff09ffff04ff15ffff04ff2dffff04ffff20ff5d80ffff04ff8200bdff808080808080ff8080808080ffff04ffff018c6d6573736167652064617461ff808080808080ff0180ffff16ff05ffff0181ff8082017fffffff02ffff03ff05ffff01ff04ffff0104ffff04ffff04ffff0101ff0980ffff04ffff02ff12ffff04ff02ffff04ff0dff80808080ff80808080ffff01ff010180ff0180ffff02ffff03ff05ffff01ff0bffff06ffff06ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c58080ffff02ff36ffff04ff02ffff04ff09ffff04ffff02ff2affff04ff02ffff04ff0dff80808080ff808080808080ffff01ff06ffff05ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c5808080ff0180ff04ffff0102ffff04ffff04ffff0101ff0580ffff04ffff02ff12ffff04ff02ffff04ff07ff80808080ff80808080ffffff0bffff05ffff06ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c58080ffff02ff36ffff04ff02ffff04ff05ffff04ffff02ff2affff04ff02ffff04ff07ff80808080ff808080808080ff0bffff0102ffff0bffff0102ffff06ffff05ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c58080ff0580ffff0bffff0102ff0bffff05ffff05ffff01ffffa04bf5122f344554c53bde2ebb8cd2b7e3d1600ad631c385a5d7cce23c7785459aa09dcf97a184f32623d11a73124ceb99a5709b083721e878a16d78f596718ba7b2ffa102a12871fee210fb8619291eaea194581cbd2531e4b23759d225f6806923f63222a102a8d5dd63fba471ebcb1f3e8f7c1e1879b7152a6e7298a91ce119a63400ade7c580808080ffff02ffff03ffff07ff0580ffff01ff0bffff0102ffff02ff2effff04ff02ffff04ff09ff80808080ffff02ff2effff04ff02ffff04ff0dff8080808080ffff01ff0bffff0101ff058080ff0180ff02ffff03ffff18ffff02ff3cffff04ff02ffff04ff0bff80808080ffff010180ffff01ff08ffff019b76616c69646174696f6e2070726f6772616d206368656174696e67ff0b80ffff01ff018080ff0180ff018080
60 changes: 47 additions & 13 deletions src/tests/referee.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use clvm_tools_rs::classic::clvm_tools::binutils::{assemble, disassemble};

use crate::channel_handler::game_handler::GameHandler;
use crate::channel_handler::types::{GameStartInfo, ReadableMove};
use crate::common::standard_coin::read_hex_puzzle;
use crate::common::standard_coin::{private_to_public_key, read_hex_puzzle, puzzle_hash_for_pk};
use crate::common::types::{
Aggsig, AllocEncoder, Amount, Error, GameID, Node, PrivateKey, PuzzleHash, Sha256tree, Timeout,
};
Expand Down Expand Up @@ -45,31 +45,54 @@ fn test_referee_smoke() {
let seed: [u8; 32] = [0; 32];
let mut rng = ChaCha8Rng::from_seed(seed);
let mut allocator = AllocEncoder::new();
let referee_coin_puzzle_hash: PuzzleHash = rng.gen();
let private_key: PrivateKey = rng.gen();
let their_puzzle_hash: PuzzleHash = rng.gen();
let nil = allocator.allocator().null();
let val_hash = Node(nil).sha256tree(&mut allocator);
let init_state = assemble(allocator.allocator(), "(0 . 0)").expect("should assemble");

// Load up the real referee coin.
let referee_coin_puzzle = read_hex_puzzle(&mut allocator, "onchain/referee.hex").expect("should be readable");
let referee_coin_puzzle_hash: PuzzleHash = referee_coin_puzzle.sha256tree(&mut allocator);

// Generate keys and puzzle hashes.
let my_private_key: PrivateKey = rng.gen();
let my_public_key = private_to_public_key(&my_private_key);
let my_puzzle_hash = puzzle_hash_for_pk(&mut allocator, &my_public_key).expect("should have");

let their_private_key: PrivateKey = rng.gen();
let their_public_key = private_to_public_key(&their_private_key);
let their_puzzle_hash: PuzzleHash = puzzle_hash_for_pk(&mut allocator, &their_public_key).expect("should have");

let amount = Amount::new(100);

let debug_game_handler = make_debug_game_handler(&mut allocator, &amount);
let validation_program = CurriedProgram {
program: Node(debug_game_handler.to_nodeptr()),
args: clvm_curried_args!(1337)
}.to_clvm(&mut allocator).expect("should curry");
let init_state =
assemble(
allocator.allocator(),
"(0 . 0)"
).expect("should assemble");

let validation_program_hash = Node(validation_program).sha256tree(&mut allocator);

let amount = Amount::new(100);
let game_start_info = GameStartInfo {
game_id: GameID::from_bytes(b"test"),
amount: amount.clone(),
game_handler: make_debug_game_handler(&mut allocator, &amount),
game_handler: debug_game_handler,
timeout: Timeout::new(1000),
is_my_turn: true,
initial_validation_puzzle: nil,
initial_validation_puzzle_hash: val_hash,
initial_validation_puzzle: validation_program,
initial_validation_puzzle_hash: validation_program_hash,
initial_state: init_state,
initial_move: vec![0, 0],
initial_max_move_size: 0,
initial_mover_share: Amount::default(),
};
let mut referee = RefereeMaker::new(
&mut allocator,
referee_coin_puzzle_hash,
referee_coin_puzzle_hash.clone(),
&game_start_info,
&private_key,
&my_private_key,
&their_puzzle_hash,
1,
)
Expand Down Expand Up @@ -100,10 +123,12 @@ fn test_referee_smoke() {
assert!(false);
}

let on_chain_cheat = referee.clone();

let their_move_result = referee
.their_turn_move_off_chain(
&mut allocator,
&[0],
&[],
&my_move_result.validation_info_hash,
100,
&Amount::default(),
Expand All @@ -114,4 +139,13 @@ fn test_referee_smoke() {
disassemble(allocator.allocator(), their_move_result.readable_move, None),
"(())"
);

let mut their_referee = RefereeMaker::new(
&mut allocator,
referee_coin_puzzle_hash,
&game_start_info,
&their_private_key,
&their_puzzle_hash,
1,
);
}

0 comments on commit 606b915

Please sign in to comment.