![image](https://private-user-images.githubusercontent.com/39972641/283980039-74b3a692-3b80-4c40-90b6-44307d9a4c1e.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMzg5NzgsIm5iZiI6MTczOTAzODY3OCwicGF0aCI6Ii8zOTk3MjY0MS8yODM5ODAwMzktNzRiM2E2OTItM2I4MC00YzQwLTkwYjYtNDQzMDdkOWE0YzFlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE4MTc1OFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQ0MmQ3NTNkMTc4YmRmMGMxYjU5ODliYWMzMjIxMGJkNTI1NWM5NGJhMWUxZWYzZGVmZTZmOWQ1YWY2MzA3NzQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.UWfg5SVgaqHhT7tZtuNY2oqDnb7h0ydEXSymwRUKCEw)
More information on the Puzzle Wallet and Puzzle SDK can be found here
Note: There is additional technical functionality in the wheres_alex program for better FE UX and notification enablement that is not explained in detail below.
![image](https://private-user-images.githubusercontent.com/39972641/283749921-70ebabdf-eab9-4c5e-ad69-e5eb0fa4f462.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMzg5NzgsIm5iZiI6MTczOTAzODY3OCwicGF0aCI6Ii8zOTk3MjY0MS8yODM3NDk5MjEtNzBlYmFiZGYtZWFiOS00YzVlLWFkNjktZTVlYjBmYTRmNDYyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE4MTc1OFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE5MzM0NDljZDcxZTZkNzBlYjVlMTdmODU0NzJlZWE0YTQ1NDhiMjJiYzIwYTliZjhhZjg4M2NkNjFiOTUxZjYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.7GnJcpDBE4ST3_Slk-O7ScDrEa9rvUGc4T7yw1NbMus)
propose_game
to create a game with a friend.
This will involve creating a 2/2 multisig and staking funds to the private 2/2 multisig between the challenger and their opponent for the game (solving problem #3 mentioned above).
Function:
propose_game(
wager_record: puzzle_token.leo/Puzz.record,
amount: u64,
sender: address, // Challenger address proposing game
challenger: address,
opponent: address,
game_multisig: address,
message_1: field, //from output of useSignature
message_2: field,
message_3: field,
message_4: field,
message_5: field,
sig: signature, //from output of useSignature
//multiparty_pvp_utils data
nonce: field,
answer: field,
seed: field,
)
Example Command:
leo run propose_game "{
owner: aleo16hf8hfpwasnn9cf7k2c0dllc56nn7qt547qxgvgwu6pznw4trvqsx68kls.private,
amount: 500u64.private,
ix: 0u32.private,
_nonce: 5117772722354704202838157764917930913180509833961648133377098024993045952079group.public
}" 100u64 aleo16hf8hfpwasnn9cf7k2c0dllc56nn7qt547qxgvgwu6pznw4trvqsx68kls aleo16hf8hfpwasnn9cf7k2c0dllc56nn7qt547qxgvgwu6pznw4trvqsx68kls aleo1r4pc6ufjvw050jhzrew3vqm2lvacdxfd4a5ckulau0vjc72qvc8sr0jg2a aleo1asu88azw3uqud282sll23wh3tvmvwjdz5vhvu2jwyrdwtgqn5qgqetuvr6 8062328565641143710315198539395259864274213782537700083868207132716559019626field 646976134778083579747150617209623060175268802563807996500102649727939562470field 7738966642647861988443742254957166327730088714215632067055062293849087980027field 501202936879316583063216806269060512965140130553350448375465909870676136661field 478560413032field sign1h04lnsl0t4aau8lzp06rzcm5eqrzr9ew63ljnw43v2nr7nkmsqqcx8cksna2ajwgk80rv0s7prrndw5k56sey3nrl487552lvaukuq8xe0cgu6x809qetnn35ufm3gl6ecyvtpgaavu9y5754j27utrwq8amruqyq2x6dvqs790yqsrctwmjnh3k7thslm0r9c3hpdvjrywpzts24xr 12345field 0field 98765field
![image](https://private-user-images.githubusercontent.com/39972641/283752393-6d2b5126-7c3d-4dd4-837b-629809d428a2.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMzg5NzgsIm5iZiI6MTczOTAzODY3OCwicGF0aCI6Ii8zOTk3MjY0MS8yODM3NTIzOTMtNmQyYjUxMjYtN2MzZC00ZGQ0LTgzN2ItNjI5ODA5ZDQyOGEyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE4MTc1OFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWEzMjU5MDQyOTA4MGM5YzI2NzMzZDM4NDk5ZTdkZDFhZDhkMWMwY2Q2NTEwOGVhMmFmNGQxNDUyODJjY2U1NzcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.RwFSoANANoma01oUepfcLWAdxgy58fxW3vYVV-2pmLQ)
submit_wager
to submit your wager to the game you received from the challenger.
Function:
submit_wager(
game_address: address,
opponent: address,
wager: puzzle_token.leo/Puzz.record,
wager_amount: u64,
nonce: field,
msg: field,
sig: signature,
)
leo run submit_wager "{
owner: aleo1r4pc6ufjvw050jhzrew3vqm2lvacdxfd4a5ckulau0vjc72qvc8sr0jg2a.private,
amount: 500u64.private,
ix: 0u32.private,
_nonce: 3004940205258698961047675300612628178407977124226246568871909567528102781306group.public
}" "{
owner: aleo1r4pc6ufjvw050jhzrew3vqm2lvacdxfd4a5ckulau0vjc72qvc8sr0jg2a.private,
seed: 98765field.private,
amount: 100u64.private,
challenger: aleo16hf8hfpwasnn9cf7k2c0dllc56nn7qt547qxgvgwu6pznw4trvqsx68kls.private,
opponent: aleo1r4pc6ufjvw050jhzrew3vqm2lvacdxfd4a5ckulau0vjc72qvc8sr0jg2a.private,
game_multisig: aleo1asu88azw3uqud282sll23wh3tvmvwjdz5vhvu2jwyrdwtgqn5qgqetuvr6.private,
_nonce: 614304942627494924156540954346562345174322008762458420667361217491279792987group.public
}" "{
owner: aleo1r4pc6ufjvw050jhzrew3vqm2lvacdxfd4a5ckulau0vjc72qvc8sr0jg2a.private,
game_multisig: aleo1asu88azw3uqud282sll23wh3tvmvwjdz5vhvu2jwyrdwtgqn5qgqetuvr6.private,
game_state: 1field.private,
your_turn: true.private,
total_pot: 200u64.private,
challenger_address: aleo16hf8hfpwasnn9cf7k2c0dllc56nn7qt547qxgvgwu6pznw4trvqsx68kls.private,
opponent_address: aleo1r4pc6ufjvw050jhzrew3vqm2lvacdxfd4a5ckulau0vjc72qvc8sr0jg2a.private,
_nonce: 5007203806498158254911228558413488930295100188486359169745660062379448997833group.public
}" 4299148155668445410404796665478412871867472362428312345599969289162437917169field 251561861986387641133995513088278466362266230978294643355666629668300490271field 1152742118437172617676919179607096353215168002720611159713055309066048881777field 6965356107999508170054292104522311809055538516545196583411503498743541220125field 478560413032field sign1j0hhruukxrlddx4tzzpe8gccgy3l430el69e0jpclrzk2x3kecpq7zteu9z5qqqttk4xltyplgwzt4famkfxar5wjncz5ttssdur2qslse2uz49ljzhxz82y28gy0un45z8w2jgwk7jhdgxqh58qgcvwqpcuf9estpjsv9n9jln3x08mzl2rc8z25j6s6r4uf8rq9r7ddkxqyaahcxh
![image](https://private-user-images.githubusercontent.com/39972641/283804219-129a3503-4f50-4f05-aac0-a599e589f040.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMzg5NzgsIm5iZiI6MTczOTAzODY3OCwicGF0aCI6Ii8zOTk3MjY0MS8yODM4MDQyMTktMTI5YTM1MDMtNGY1MC00ZjA1LWFhYzAtYTU5OWU1ODlmMDQwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE4MTc1OFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdlYTcwY2FiOGI0ODEzYzg2YjAyODhiNjA5OGE0OGY2ZDJmZTUyNTMyMWQzMGRlOTRmNjMyMjk3OGUwNmY4ZjQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.Os1Z3cpaf20dxFbHCwda3TA9Xh8DWvIVmGCVvQ79AIs)
accept_game
to commit the wagers to the game and turn the game to the next step.
accept_game (
game_record: Game,
opponent_answer: field,
piece_stake_challenger: puzzle_pieces_v007.leo/PieceStake.record,
piece_claim_challenger: puzzle_pieces_v007.leo/PieceClaim.record,
piece_stake_opponent: puzzle_pieces_v007.leo/PieceStake.record,
piece_claim_opponent: puzzle_pieces_v007.leo/PieceClaim.record,
block_ht: u32,
)
![image](https://private-user-images.githubusercontent.com/39972641/283978337-288b92b5-9659-4fc7-a719-12ffb9be8f8a.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMzg5NzgsIm5iZiI6MTczOTAzODY3OCwicGF0aCI6Ii8zOTk3MjY0MS8yODM5NzgzMzctMjg4YjkyYjUtOTY1OS00ZmM3LWE3MTktMTJmZmI5YmU4ZjhhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE4MTc1OFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPThjNGJmMWM5ZWFmZjI3MGM3N2EzYTBjMzE0ZjgzMTBiMDRkNmQ0ZDZiZDkwNGQwOTlkZDg2NWMwYmFlYWQ2ZmYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.La6PxcEq7JWXltQIobYZu6m8T6GXlcrm746d8hbwtkc)
reveal_answer
to reveal answer record and whether player 1 won or lost.
Function:
reveal_answer(
reveal_answer_notification_record: RevealAnswerNotification,
answer_record: multiparty_pvp_utils_v001.leo/Answer.record,
joint_piece_state: puzzle_pieces_v007.leo/JointPieceState.record,
claim_signature: puzzle_pieces_v007.leo/ClaimSignature.record,
sig: signature
)
![image](https://private-user-images.githubusercontent.com/39972641/283978585-590e8fb4-c03f-4e5c-9a62-63608730b39b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzkwMzg5NzgsIm5iZiI6MTczOTAzODY3OCwicGF0aCI6Ii8zOTk3MjY0MS8yODM5Nzg1ODUtNTkwZThmYjQtYzAzZi00ZTVjLTlhNjItNjM2MDg3MzBiMzliLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDglMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA4VDE4MTc1OFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU4NWMyZWMyYzQ4N2E2ZTJiNTQ4NjFkNDY1ZDg2MTE2MmU3ZTJmMDFjMDAyOTY5ZTMzNTIyNzAyNjNjOWRhMzQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.6sY7kIYUCRNw3Ph-VfH_OOb6QxWvTpRh906alV6zfOw)
finish_game
to finish game
Function:
finish_game (
game_record: Game,
joint_piece_winner: puzzle_pieces_v007.leo/JointPieceWinner.record,
piece_joint_stake: puzzle_pieces_v007.leo/PieceJointStake.record,
joint_piece_time_claim: puzzle_pieces_v007.leo/JointPieceTimeClaim.record,
)
NOTE: Different function executions require different keys (player 1, player 2, multisig keys). For testing purposes, you can run the below to switch execution keys.
We also have a test.sh
script here that runs through all the flows.
echo "
NETWORK=testnet3
PRIVATE_KEY={MS_PK || P1_PK | P2_PK}
" > .env