[INFO] cloning repository https://github.com/tothemoon023/Q3_Solana_Anchor-dice [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/tothemoon023/Q3_Solana_Anchor-dice" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ftothemoon023%2FQ3_Solana_Anchor-dice", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ftothemoon023%2FQ3_Solana_Anchor-dice'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] c0f1aae85dc636e9e06ca54c5a83aa0a147bc2eb [INFO] checking tothemoon023/Q3_Solana_Anchor-dice against try#51de2e90f91fdec6cf64ff542a4e15b9c177a797 for pr-147294 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ftothemoon023%2FQ3_Solana_Anchor-dice" "/workspace/builds/worker-4-tc2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc2/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/tothemoon023/Q3_Solana_Anchor-dice [INFO] finished tweaking git repo https://github.com/tothemoon023/Q3_Solana_Anchor-dice [INFO] tweaked toml for git repo https://github.com/tothemoon023/Q3_Solana_Anchor-dice written to /workspace/builds/worker-4-tc2/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/tothemoon023/Q3_Solana_Anchor-dice on toolchain 51de2e90f91fdec6cf64ff542a4e15b9c177a797 [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+51de2e90f91fdec6cf64ff542a4e15b9c177a797" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/tothemoon023/Q3_Solana_Anchor-dice already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+51de2e90f91fdec6cf64ff542a4e15b9c177a797" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Updating git repository `https://github.com/ShrinathNR/anchor-instruction-sysvar.git` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+51de2e90f91fdec6cf64ff542a4e15b9c177a797" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 23719d0122bc8803b1c3d6811b50b78ecc5da7a1a94b95c23e4e200cc4d6bc23 [INFO] running `Command { std: "docker" "start" "-a" "23719d0122bc8803b1c3d6811b50b78ecc5da7a1a94b95c23e4e200cc4d6bc23", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "23719d0122bc8803b1c3d6811b50b78ecc5da7a1a94b95c23e4e200cc4d6bc23", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "23719d0122bc8803b1c3d6811b50b78ecc5da7a1a94b95c23e4e200cc4d6bc23", kill_on_drop: false }` [INFO] [stdout] 23719d0122bc8803b1c3d6811b50b78ecc5da7a1a94b95c23e4e200cc4d6bc23 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:e90291280db7d1fac5b66fc6dad9f9662629e7365a55743daf9bdf73ebc4ea79" "/opt/rustwide/cargo-home/bin/cargo" "+51de2e90f91fdec6cf64ff542a4e15b9c177a797" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] f0afda10d90501b97f16255f2913c03a4d81e11770d337d8414f74f1ca9cd834 [INFO] running `Command { std: "docker" "start" "-a" "f0afda10d90501b97f16255f2913c03a4d81e11770d337d8414f74f1ca9cd834", kill_on_drop: false }` [INFO] [stderr] Checking solana-sha256-hasher v2.2.1 [INFO] [stderr] Checking solana-pubkey v2.4.0 [INFO] [stderr] Checking solana-instruction v2.3.0 [INFO] [stderr] Checking solana-sdk-ids v2.2.1 [INFO] [stderr] Checking solana-nonce v2.2.1 [INFO] [stderr] Checking solana-sysvar-id v2.2.1 [INFO] [stderr] Checking solana-clock v2.2.2 [INFO] [stderr] Checking solana-rent v2.2.1 [INFO] [stderr] Checking solana-slot-hashes v2.2.1 [INFO] [stderr] Checking solana-epoch-schedule v2.2.1 [INFO] [stderr] Checking solana-last-restart-slot v2.2.1 [INFO] [stderr] Checking solana-slot-history v2.2.1 [INFO] [stderr] Checking solana-epoch-rewards v2.2.1 [INFO] [stderr] Checking solana-program-error v2.2.2 [INFO] [stderr] Checking solana-system-interface v1.0.0 [INFO] [stderr] Checking solana-serialize-utils v2.2.1 [INFO] [stderr] Checking solana-bincode v2.2.1 [INFO] [stderr] Checking solana-transaction-error v2.2.1 [INFO] [stderr] Checking solana-loader-v2-interface v2.2.1 [INFO] [stderr] Checking solana-stable-layout v2.2.1 [INFO] [stderr] Checking solana-address-lookup-table-interface v2.2.2 [INFO] [stderr] Checking solana-account-info v2.3.0 [INFO] [stderr] Checking solana-program-pack v2.2.1 [INFO] [stderr] Checking solana-cpi v2.2.1 [INFO] [stderr] Checking solana-program-entrypoint v2.3.0 [INFO] [stderr] Checking solana-instructions-sysvar v2.2.2 [INFO] [stderr] Checking solana-account v2.2.1 [INFO] [stderr] Checking solana-stake-interface v1.2.1 [INFO] [stderr] Checking solana-message v2.4.0 [INFO] [stderr] Checking solana-loader-v4-interface v2.2.1 [INFO] [stderr] Checking solana-feature-gate-interface v2.2.2 [INFO] [stderr] Checking solana-vote-interface v2.2.6 [INFO] [stderr] Checking solana-loader-v3-interface v5.0.0 [INFO] [stderr] Checking solana-example-mocks v2.2.1 [INFO] [stderr] Checking solana-sysvar v2.2.2 [INFO] [stderr] Checking solana-program v2.3.0 [INFO] [stderr] Checking anchor-lang v0.31.1 [INFO] [stderr] Checking anchor-instruction-sysvar v0.1.0 (https://github.com/ShrinathNR/anchor-instruction-sysvar.git?branch=version-upgrade#f552a304) [INFO] [stderr] Checking anchor-dice v0.1.0 (/opt/rustwide/workdir/programs/anchor-dice) [INFO] [stdout] error[E0658]: attributes on expressions are experimental [INFO] [stdout] --> programs/anchor-dice/src/instructions/refund_bet.rs:585:9 [INFO] [stdout] | [INFO] [stdout] 585 | /// Mark bet as resolved to prevent future operations [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: see issue #15701 for more information [INFO] [stdout] = help: add `#![feature(stmt_expr_attributes)]` to the crate attributes to enable [INFO] [stdout] = note: this compiler was built on 2025-10-03; consider upgrading it if it is out of date [INFO] [stdout] = help: `///` is used for outer documentation comments; for a plain comment, use `//` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0658]: attributes on expressions are experimental [INFO] [stdout] --> programs/anchor-dice/src/instructions/refund_bet.rs:585:9 [INFO] [stdout] | [INFO] [stdout] 585 | /// Mark bet as resolved to prevent future operations [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: see issue #15701 for more information [INFO] [stdout] = help: add `#![feature(stmt_expr_attributes)]` to the crate attributes to enable [INFO] [stdout] = note: this compiler was built on 2025-10-03; consider upgrading it if it is out of date [INFO] [stdout] = help: `///` is used for outer documentation comments; for a plain comment, use `//` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/initialize.rs:227:9 [INFO] [stdout] | [INFO] [stdout] 227 | / /// Transfer instruction accounts [INFO] [stdout] 228 | | /// [INFO] [stdout] 229 | | /// ## Account Roles [INFO] [stdout] 230 | | /// - `from`: Source account (house authority) that will lose SOL [INFO] [stdout] ... | [INFO] [stdout] 234 | | /// Both accounts must be marked as mutable in their respective [INFO] [stdout] 235 | | /// instruction contexts since their lamport balances will change. [INFO] [stdout] | |__________________________________________________________________________^ [INFO] [stdout] 236 | / let cpi_accounts = Transfer { [INFO] [stdout] 237 | | from: self.house.to_account_info(), // House authority pays [INFO] [stdout] 238 | | to: self.vault.to_account_info(), // Vault receives funds [INFO] [stdout] 239 | | }; [INFO] [stdout] | |__________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] = note: `#[warn(unused_doc_comments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/initialize.rs:247:9 [INFO] [stdout] | [INFO] [stdout] 247 | / /// CPI context for system program transfer [INFO] [stdout] 248 | | /// [INFO] [stdout] 249 | | /// ## Components [INFO] [stdout] 250 | | /// - Program: Reference to the system program [INFO] [stdout] ... | [INFO] [stdout] 254 | | /// Anchor validates that the system program reference is legitimate [INFO] [stdout] 255 | | /// and that the accounts match the expected Transfer instruction format. [INFO] [stdout] | |_________________________________________________________________________________^ [INFO] [stdout] 256 | / let ctx = CpiContext::new( [INFO] [stdout] 257 | | self.system_program.to_account_info(), // System program reference [INFO] [stdout] 258 | | cpi_accounts // Transfer accounts [INFO] [stdout] 259 | | ); [INFO] [stdout] | |__________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/initialize.rs:267:9 [INFO] [stdout] | [INFO] [stdout] 267 | / /// Execute the SOL transfer [INFO] [stdout] 268 | | /// [INFO] [stdout] 269 | | /// ## Transfer Details [INFO] [stdout] 270 | | /// - Amount: Specified by the house authority [INFO] [stdout] ... | [INFO] [stdout] 281 | | /// instruction fails and no state changes are persisted. [INFO] [stdout] 282 | | /// The `?` operator propagates the error up to the caller. [INFO] [stdout] | |___________________________________________________________________^ [INFO] [stdout] 283 | transfer(ctx, amount)?; [INFO] [stdout] | ---------------------- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:357:9 [INFO] [stdout] | [INFO] [stdout] 357 | / /// Minimum bet validation [INFO] [stdout] 358 | | /// [INFO] [stdout] 359 | | /// ## Purpose [INFO] [stdout] 360 | | /// Prevents spam bets with dust amounts that would: [INFO] [stdout] ... | [INFO] [stdout] 367 | | /// - House edge needs meaningful amounts to generate sustainable profit [INFO] [stdout] 368 | | /// - Players should have "skin in the game" with meaningful wagers [INFO] [stdout] | |___________________________________________________________________________^ [INFO] [stdout] 369 | / if amount < MIN_BET_LAMPORTS { [INFO] [stdout] 370 | | return Err(DiceError::MinimumBet.into()); [INFO] [stdout] 371 | | } [INFO] [stdout] | |_________- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:373:9 [INFO] [stdout] | [INFO] [stdout] 373 | / /// Maximum bet validation [INFO] [stdout] 374 | | /// [INFO] [stdout] 375 | | /// ## Purpose [INFO] [stdout] 376 | | /// Protects house from excessive exposure that could: [INFO] [stdout] ... | [INFO] [stdout] 384 | | /// - House must maintain vault balance significantly above max payout [INFO] [stdout] 385 | | /// - Limits help ensure long-term game sustainability [INFO] [stdout] | |______________________________________________________________^ [INFO] [stdout] 386 | / if amount > MAX_BET_LAMPORTS { [INFO] [stdout] 387 | | return Err(DiceError::MaximumBet.into()); [INFO] [stdout] 388 | | } [INFO] [stdout] | |_________- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:395:9 [INFO] [stdout] | [INFO] [stdout] 395 | / /// Minimum roll validation [INFO] [stdout] 396 | | /// [INFO] [stdout] 397 | | /// ## Game Logic Requirements [INFO] [stdout] 398 | | /// - Player wins if random_roll < roll_prediction [INFO] [stdout] ... | [INFO] [stdout] 404 | | /// - Creates highest risk/highest reward betting option [INFO] [stdout] 405 | | /// - Maintains mathematical integrity of the game [INFO] [stdout] | |__________________________________________________________^ [INFO] [stdout] 406 | / if roll < MIN_ROLL { [INFO] [stdout] 407 | | return Err(DiceError::MinimumRoll.into()); [INFO] [stdout] 408 | | } [INFO] [stdout] | |_________- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:410:9 [INFO] [stdout] | [INFO] [stdout] 410 | / /// Maximum roll validation [INFO] [stdout] 411 | | /// [INFO] [stdout] 412 | | /// ## Game Balance Requirements [INFO] [stdout] 413 | | /// - Maximum prediction of 96 means 95% win chance (random_roll = 1-95) [INFO] [stdout] ... | [INFO] [stdout] 419 | | /// - Maintains sustainable profit margins for house operations [INFO] [stdout] 420 | | /// - Creates lowest risk/lowest reward betting option [INFO] [stdout] | |______________________________________________________________^ [INFO] [stdout] 421 | / if roll > MAX_ROLL { [INFO] [stdout] 422 | | return Err(DiceError::MaximumRoll.into()); [INFO] [stdout] 423 | | } [INFO] [stdout] | |_________- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:430:9 [INFO] [stdout] | [INFO] [stdout] 430 | / /// Existing bet account validation [INFO] [stdout] 431 | | /// [INFO] [stdout] 432 | | /// ## Why This Check is Needed [INFO] [stdout] 433 | | /// Without this validation, a new bet could overwrite an existing [INFO] [stdout] ... | [INFO] [stdout] 451 | | /// - Wait for existing bet to be resolved or refunded [INFO] [stdout] 452 | | /// - Check bet status before attempting new placement [INFO] [stdout] | |______________________________________________________________^ [INFO] [stdout] 453 | / if self.bet.is_resolved == false [INFO] [stdout] 454 | | && self.bet.commit_slot != 0 [INFO] [stdout] 455 | | && self.bet.key() != Pubkey::default() [INFO] [stdout] ... | [INFO] [stdout] 458 | | } [INFO] [stdout] | |_________- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:465:9 [INFO] [stdout] | [INFO] [stdout] 465 | / /// Fund transfer setup [INFO] [stdout] 466 | | /// [INFO] [stdout] 467 | | /// ## Transfer Details [INFO] [stdout] 468 | | /// - From: Player account (must have sufficient balance) [INFO] [stdout] ... | [INFO] [stdout] 474 | | /// - Player must have authorized the transaction through signature [INFO] [stdout] 475 | | /// - Vault PDA ensures funds can only be controlled by program logic [INFO] [stdout] | |_____________________________________________________________________________^ [INFO] [stdout] 476 | / let accounts = Transfer { [INFO] [stdout] 477 | | from: self.player.to_account_info(), // Player pays the bet [INFO] [stdout] 478 | | to: self.vault.to_account_info(), // Vault receives the bet [INFO] [stdout] 479 | | }; [INFO] [stdout] | |__________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:481:9 [INFO] [stdout] | [INFO] [stdout] 481 | / /// CPI context for system program transfer [INFO] [stdout] 482 | | /// [INFO] [stdout] 483 | | /// ## Cross-Program Invocation [INFO] [stdout] 484 | | /// This creates the context for calling the system program's [INFO] [stdout] 485 | | /// transfer instruction to move SOL from player to vault. [INFO] [stdout] | |__________________________________________________________________^ [INFO] [stdout] 486 | let ctx = CpiContext::new(self.system_program.to_account_info(), accounts); [INFO] [stdout] | --------------------------------------------------------------------------- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:488:9 [INFO] [stdout] | [INFO] [stdout] 488 | / /// Execute the bet amount transfer [INFO] [stdout] 489 | | /// [INFO] [stdout] 490 | | /// ## Financial Transaction [INFO] [stdout] 491 | | /// This is the core financial operation where: [INFO] [stdout] ... | [INFO] [stdout] 499 | | /// - System program encounters issues [INFO] [stdout] 500 | | /// - Network conditions prevent completion [INFO] [stdout] | |___________________________________________________^ [INFO] [stdout] 501 | transfer(ctx, amount)?; [INFO] [stdout] | ---------------------- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:508:9 [INFO] [stdout] | [INFO] [stdout] 508 | / /// Initialize bet account data [INFO] [stdout] 509 | | /// [INFO] [stdout] 510 | | /// ## Data Structure Setup [INFO] [stdout] 511 | | /// The bet account stores all information needed for: [INFO] [stdout] ... | [INFO] [stdout] 518 | | /// ## Field-by-Field Explanation [INFO] [stdout] 519 | | /// Each field serves a specific purpose in the bet lifecycle: [INFO] [stdout] | |______________________________________________________________________^ [INFO] [stdout] 520 | / self.bet.set_inner(Bet { [INFO] [stdout] 521 | | /// Financial Data [INFO] [stdout] 522 | | amount, // Bet amount for payout calculations [INFO] [stdout] ... | [INFO] [stdout] 544 | | is_resolved: false, // Bet is active, awaiting resolution [INFO] [stdout] 545 | | }); [INFO] [stdout] | |__________- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:521:13 [INFO] [stdout] | [INFO] [stdout] 521 | /// Financial Data [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 522 | amount, // Bet amount for payout calculations [INFO] [stdout] | ------ rustdoc does not generate documentation for expression fields [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:524:13 [INFO] [stdout] | [INFO] [stdout] 524 | /// Identity and Ownership [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 525 | player: self.player.key(), // Player who owns this bet [INFO] [stdout] | ------------------------- rustdoc does not generate documentation for expression fields [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:527:13 [INFO] [stdout] | [INFO] [stdout] 527 | /// Timing and Sequence [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 528 | slot: Clock::get()?.slot, // When bet was placed (for ordering) [INFO] [stdout] | ------------------------ rustdoc does not generate documentation for expression fields [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:531:13 [INFO] [stdout] | [INFO] [stdout] 531 | /// Uniqueness and Concurrency [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 532 | seed, // Unique seed for this bet [INFO] [stdout] | ---- rustdoc does not generate documentation for expression fields [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:534:13 [INFO] [stdout] | [INFO] [stdout] 534 | /// Game Logic [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 535 | roll, // Player's roll prediction [INFO] [stdout] | ---- rustdoc does not generate documentation for expression fields [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:537:13 [INFO] [stdout] | [INFO] [stdout] 537 | /// PDA Management [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 538 | bump: bumps.bet, // PDA bump for future operations [INFO] [stdout] | --------------- rustdoc does not generate documentation for expression fields [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:540:13 [INFO] [stdout] | [INFO] [stdout] 540 | /// Randomness and Verification [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 541 | randomness_account, // Oracle for future resolution [INFO] [stdout] | ------------------ rustdoc does not generate documentation for expression fields [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:543:13 [INFO] [stdout] | [INFO] [stdout] 543 | /// State Management [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 544 | is_resolved: false, // Bet is active, awaiting resolution [INFO] [stdout] | ------------------ rustdoc does not generate documentation for expression fields [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:552:9 [INFO] [stdout] | [INFO] [stdout] 552 | / /// Bet placement completion [INFO] [stdout] 553 | | /// [INFO] [stdout] 554 | | /// ## What Has Been Accomplished [INFO] [stdout] 555 | | /// - All validations passed [INFO] [stdout] ... | [INFO] [stdout] 562 | | /// - Player can claim refund after timeout if house doesn't resolve [INFO] [stdout] 563 | | /// - Bet account tracks all necessary data for these operations [INFO] [stdout] | |________________________________________________________________________^ [INFO] [stdout] 564 | Ok(()) [INFO] [stdout] | ------ rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:379:9 [INFO] [stdout] | [INFO] [stdout] 379 | / /// Verify instruction is addressed to Ed25519 program [INFO] [stdout] 380 | | /// [INFO] [stdout] 381 | | /// ## Security Requirement [INFO] [stdout] 382 | | /// The preceding instruction must be an Ed25519 verification instruction, [INFO] [stdout] ... | [INFO] [stdout] 394 | | /// - Manipulate randomness generation process [INFO] [stdout] 395 | | /// - Compromise the provably fair system [INFO] [stdout] | |_________----------------------------------------^ [INFO] [stdout] | | [INFO] [stdout] | rustdoc does not generate documentation for macro invocations [INFO] [stdout] | [INFO] [stdout] = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:402:9 [INFO] [stdout] | [INFO] [stdout] 402 | / /// Verify Ed25519 instruction has no accounts [INFO] [stdout] 403 | | /// [INFO] [stdout] 404 | | /// ## Purity Requirement [INFO] [stdout] 405 | | /// Ed25519 verification instructions should be "pure" operations that: [INFO] [stdout] ... | [INFO] [stdout] 420 | | /// - Signature data in instruction data field [INFO] [stdout] 421 | | /// - No external state dependencies [INFO] [stdout] | |_________-----------------------------------^ [INFO] [stdout] | | [INFO] [stdout] | rustdoc does not generate documentation for macro invocations [INFO] [stdout] | [INFO] [stdout] = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:456:9 [INFO] [stdout] | [INFO] [stdout] 456 | / /// Ensure exactly one signature is provided [INFO] [stdout] 457 | | /// [INFO] [stdout] 458 | | /// ## Single Signature Requirement [INFO] [stdout] 459 | | /// Our bet resolution process requires exactly one signature because: [INFO] [stdout] ... | [INFO] [stdout] 468 | | /// - Maintains straightforward verification process [INFO] [stdout] 469 | | /// - Reduces complexity and potential bugs [INFO] [stdout] | |_________------------------------------------------^ [INFO] [stdout] | | [INFO] [stdout] | rustdoc does not generate documentation for macro invocations [INFO] [stdout] | [INFO] [stdout] = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:477:9 [INFO] [stdout] | [INFO] [stdout] 477 | / /// Verify signature contains all required components [INFO] [stdout] 478 | | /// [INFO] [stdout] 479 | | /// ## Verifiability Requirements [INFO] [stdout] 480 | | /// A signature is "verifiable" if it contains: [INFO] [stdout] ... | [INFO] [stdout] 492 | | /// Prevents processing of incomplete or malformed signatures that [INFO] [stdout] 493 | | /// could lead to undefined behavior or security vulnerabilities. [INFO] [stdout] | |_________----------------------------------------------------------------^ [INFO] [stdout] | | [INFO] [stdout] | rustdoc does not generate documentation for macro invocations [INFO] [stdout] | [INFO] [stdout] = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:500:9 [INFO] [stdout] | [INFO] [stdout] 500 | / /// Verify signature was generated by house authority [INFO] [stdout] 501 | | /// [INFO] [stdout] 502 | | /// ## Authority Verification Process [INFO] [stdout] 503 | | /// 1. Extract public key from Ed25519 signature data [INFO] [stdout] ... | [INFO] [stdout] 518 | | /// - Compromise the fairness of the entire system [INFO] [stdout] 519 | | /// - Create predictable or biased results [INFO] [stdout] | |_________-----------------------------------------^ [INFO] [stdout] | | [INFO] [stdout] | rustdoc does not generate documentation for macro invocations [INFO] [stdout] | [INFO] [stdout] = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/initialize.rs:227:9 [INFO] [stdout] | [INFO] [stdout] 227 | / /// Transfer instruction accounts [INFO] [stdout] 228 | | /// [INFO] [stdout] 229 | | /// ## Account Roles [INFO] [stdout] 230 | | /// - `from`: Source account (house authority) that will lose SOL [INFO] [stdout] ... | [INFO] [stdout] 234 | | /// Both accounts must be marked as mutable in their respective [INFO] [stdout] 235 | | /// instruction contexts since their lamport balances will change. [INFO] [stdout] | |__________________________________________________________________________^ [INFO] [stdout] 236 | / let cpi_accounts = Transfer { [INFO] [stdout] 237 | | from: self.house.to_account_info(), // House authority pays [INFO] [stdout] 238 | | to: self.vault.to_account_info(), // Vault receives funds [INFO] [stdout] 239 | | }; [INFO] [stdout] | |__________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] = note: `#[warn(unused_doc_comments)]` (part of `#[warn(unused)]`) on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:526:9 [INFO] [stdout] | [INFO] [stdout] 526 | / /// Verify provided signature matches Ed25519 instruction signature [INFO] [stdout] 527 | | /// [INFO] [stdout] 528 | | /// ## Signature Consistency Check [INFO] [stdout] 529 | | /// This ensures the signature provided to this instruction matches [INFO] [stdout] ... | [INFO] [stdout] 544 | | /// Even if an attacker could somehow manipulate the instruction [INFO] [stdout] 545 | | /// sequence, they cannot change the signature without detection. [INFO] [stdout] | |_________----------------------------------------------------------------^ [INFO] [stdout] | | [INFO] [stdout] | rustdoc does not generate documentation for macro invocations [INFO] [stdout] | [INFO] [stdout] = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/initialize.rs:247:9 [INFO] [stdout] | [INFO] [stdout] 247 | / /// CPI context for system program transfer [INFO] [stdout] 248 | | /// [INFO] [stdout] 249 | | /// ## Components [INFO] [stdout] 250 | | /// - Program: Reference to the system program [INFO] [stdout] ... | [INFO] [stdout] 254 | | /// Anchor validates that the system program reference is legitimate [INFO] [stdout] 255 | | /// and that the accounts match the expected Transfer instruction format. [INFO] [stdout] | |_________________________________________________________________________________^ [INFO] [stdout] 256 | / let ctx = CpiContext::new( [INFO] [stdout] 257 | | self.system_program.to_account_info(), // System program reference [INFO] [stdout] 258 | | cpi_accounts // Transfer accounts [INFO] [stdout] 259 | | ); [INFO] [stdout] | |__________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/initialize.rs:267:9 [INFO] [stdout] | [INFO] [stdout] 267 | / /// Execute the SOL transfer [INFO] [stdout] 268 | | /// [INFO] [stdout] 269 | | /// ## Transfer Details [INFO] [stdout] 270 | | /// - Amount: Specified by the house authority [INFO] [stdout] ... | [INFO] [stdout] 281 | | /// instruction fails and no state changes are persisted. [INFO] [stdout] 282 | | /// The `?` operator propagates the error up to the caller. [INFO] [stdout] | |___________________________________________________________________^ [INFO] [stdout] 283 | transfer(ctx, amount)?; [INFO] [stdout] | ---------------------- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:552:9 [INFO] [stdout] | [INFO] [stdout] 552 | / /// Verify signature was generated for current bet data [INFO] [stdout] 553 | | /// [INFO] [stdout] 554 | | /// ## Replay Attack Prevention [INFO] [stdout] 555 | | /// This is the critical check that prevents signature replay attacks: [INFO] [stdout] ... | [INFO] [stdout] 583 | | /// - **Cross-bet contamination**: Mixing up signatures between bets [INFO] [stdout] 584 | | /// - **Temporal attacks**: Using signatures from different bet states [INFO] [stdout] | |_________---------------------------------------------------------------------^ [INFO] [stdout] | | [INFO] [stdout] | rustdoc does not generate documentation for macro invocations [INFO] [stdout] | [INFO] [stdout] = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:357:9 [INFO] [stdout] | [INFO] [stdout] 357 | / /// Minimum bet validation [INFO] [stdout] 358 | | /// [INFO] [stdout] 359 | | /// ## Purpose [INFO] [stdout] 360 | | /// Prevents spam bets with dust amounts that would: [INFO] [stdout] ... | [INFO] [stdout] 367 | | /// - House edge needs meaningful amounts to generate sustainable profit [INFO] [stdout] 368 | | /// - Players should have "skin in the game" with meaningful wagers [INFO] [stdout] | |___________________________________________________________________________^ [INFO] [stdout] 369 | / if amount < MIN_BET_LAMPORTS { [INFO] [stdout] 370 | | return Err(DiceError::MinimumBet.into()); [INFO] [stdout] 371 | | } [INFO] [stdout] | |_________- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:352:9 [INFO] [stdout] | [INFO] [stdout] 352 | / /// Load the preceding Ed25519 verification instruction [INFO] [stdout] 353 | | /// [INFO] [stdout] 354 | | /// ## Instruction Sequence Requirement [INFO] [stdout] 355 | | /// Bet resolution requires a two-instruction sequence: [INFO] [stdout] ... | [INFO] [stdout] 368 | | /// - Instruction index is invalid [INFO] [stdout] 369 | | /// - Instruction data is malformed [INFO] [stdout] | |___________________________________________^ [INFO] [stdout] 370 | / let ix = load_instruction_at_checked( [INFO] [stdout] 371 | | 0, // Previous instruction index [INFO] [stdout] 372 | | &self.instruction_sysvar.to_account_info() // Instruction sysvar access [INFO] [stdout] 373 | | )?; [INFO] [stdout] | |___________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:373:9 [INFO] [stdout] | [INFO] [stdout] 373 | / /// Maximum bet validation [INFO] [stdout] 374 | | /// [INFO] [stdout] 375 | | /// ## Purpose [INFO] [stdout] 376 | | /// Protects house from excessive exposure that could: [INFO] [stdout] ... | [INFO] [stdout] 384 | | /// - House must maintain vault balance significantly above max payout [INFO] [stdout] 385 | | /// - Limits help ensure long-term game sustainability [INFO] [stdout] | |______________________________________________________________^ [INFO] [stdout] 386 | / if amount > MAX_BET_LAMPORTS { [INFO] [stdout] 387 | | return Err(DiceError::MaximumBet.into()); [INFO] [stdout] 388 | | } [INFO] [stdout] | |_________- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:428:9 [INFO] [stdout] | [INFO] [stdout] 428 | / /// Parse Ed25519 instruction data to extract signatures [INFO] [stdout] 429 | | /// [INFO] [stdout] 430 | | /// ## Data Structure [INFO] [stdout] 431 | | /// Ed25519 instruction data contains: [INFO] [stdout] ... | [INFO] [stdout] 448 | | /// - Format doesn't match Ed25519 specification [INFO] [stdout] 449 | | /// - Required fields are missing [INFO] [stdout] | |_________________________________________^ [INFO] [stdout] 450 | let signatures = Ed25519InstructionSignatures::unpack(&ix.data)?.0; [INFO] [stdout] | ------------------------------------------------------------------- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:395:9 [INFO] [stdout] | [INFO] [stdout] 395 | / /// Minimum roll validation [INFO] [stdout] 396 | | /// [INFO] [stdout] 397 | | /// ## Game Logic Requirements [INFO] [stdout] 398 | | /// - Player wins if random_roll < roll_prediction [INFO] [stdout] ... | [INFO] [stdout] 404 | | /// - Creates highest risk/highest reward betting option [INFO] [stdout] 405 | | /// - Maintains mathematical integrity of the game [INFO] [stdout] | |__________________________________________________________^ [INFO] [stdout] 406 | / if roll < MIN_ROLL { [INFO] [stdout] 407 | | return Err(DiceError::MinimumRoll.into()); [INFO] [stdout] 408 | | } [INFO] [stdout] | |_________- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:638:9 [INFO] [stdout] | [INFO] [stdout] 638 | / /// Hash the signature to create uniform entropy [INFO] [stdout] 639 | | /// [INFO] [stdout] 640 | | /// ## Cryptographic Hashing Process [INFO] [stdout] 641 | | /// The signature bytes are processed through SHA-256 hashing to: [INFO] [stdout] ... | [INFO] [stdout] 658 | | /// - Cannot be predicted or manipulated by either party [INFO] [stdout] 659 | | /// - Signature generation includes randomness from private key operations [INFO] [stdout] | |__________________________________________________________________________________^ [INFO] [stdout] 660 | let hash = hash(sig).to_bytes(); [INFO] [stdout] | -------------------------------- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:410:9 [INFO] [stdout] | [INFO] [stdout] 410 | / /// Maximum roll validation [INFO] [stdout] 411 | | /// [INFO] [stdout] 412 | | /// ## Game Balance Requirements [INFO] [stdout] 413 | | /// - Maximum prediction of 96 means 95% win chance (random_roll = 1-95) [INFO] [stdout] ... | [INFO] [stdout] 419 | | /// - Maintains sustainable profit margins for house operations [INFO] [stdout] 420 | | /// - Creates lowest risk/lowest reward betting option [INFO] [stdout] | |______________________________________________________________^ [INFO] [stdout] 421 | / if roll > MAX_ROLL { [INFO] [stdout] 422 | | return Err(DiceError::MaximumRoll.into()); [INFO] [stdout] 423 | | } [INFO] [stdout] | |_________- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:662:9 [INFO] [stdout] | [INFO] [stdout] 662 | / /// Convert hash to random number through careful processing [INFO] [stdout] 663 | | /// [INFO] [stdout] 664 | | /// ## Two-Stage Conversion Process [INFO] [stdout] 665 | | /// We split the 32-byte hash into two 16-byte chunks to: [INFO] [stdout] ... | [INFO] [stdout] 670 | | /// [INFO] [stdout] 671 | | /// ## First 16-byte chunk processing [INFO] [stdout] | |_____________________________________________^ [INFO] [stdout] 672 | let mut hash_16: [u8; 16] = [0; 16]; [INFO] [stdout] | ------------------------------------ rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:676:9 [INFO] [stdout] | [INFO] [stdout] 676 | /// Second 16-byte chunk processing [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 677 | hash_16.copy_from_slice(&hash[16..32]); [INFO] [stdout] | -------------------------------------- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:430:9 [INFO] [stdout] | [INFO] [stdout] 430 | / /// Existing bet account validation [INFO] [stdout] 431 | | /// [INFO] [stdout] 432 | | /// ## Why This Check is Needed [INFO] [stdout] 433 | | /// Without this validation, a new bet could overwrite an existing [INFO] [stdout] ... | [INFO] [stdout] 451 | | /// - Wait for existing bet to be resolved or refunded [INFO] [stdout] 452 | | /// - Check bet status before attempting new placement [INFO] [stdout] | |______________________________________________________________^ [INFO] [stdout] 453 | / if self.bet.is_resolved == false [INFO] [stdout] 454 | | && self.bet.commit_slot != 0 [INFO] [stdout] 455 | | && self.bet.key() != Pubkey::default() [INFO] [stdout] ... | [INFO] [stdout] 458 | | } [INFO] [stdout] | |_________- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:680:9 [INFO] [stdout] | [INFO] [stdout] 680 | / /// Combine chunks and generate final dice roll [INFO] [stdout] 681 | | /// [INFO] [stdout] 682 | | /// ## Statistical Combination [INFO] [stdout] 683 | | /// Adding the two u128 values: [INFO] [stdout] ... | [INFO] [stdout] 697 | | /// - Bias effect: < 1 in 3.4 * 10^36 [INFO] [stdout] 698 | | /// - Practically zero impact on fairness [INFO] [stdout] | |_________________________________________________^ [INFO] [stdout] 699 | / let roll = lower [INFO] [stdout] 700 | | .wrapping_add(upper) // Combine entropy sources [INFO] [stdout] 701 | | .wrapping_rem(100) as u8 + 1; // Convert to dice range 1-100 [INFO] [stdout] | |_________________________________________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:465:9 [INFO] [stdout] | [INFO] [stdout] 465 | / /// Fund transfer setup [INFO] [stdout] 466 | | /// [INFO] [stdout] 467 | | /// ## Transfer Details [INFO] [stdout] 468 | | /// - From: Player account (must have sufficient balance) [INFO] [stdout] ... | [INFO] [stdout] 474 | | /// - Player must have authorized the transaction through signature [INFO] [stdout] 475 | | /// - Vault PDA ensures funds can only be controlled by program logic [INFO] [stdout] | |_____________________________________________________________________________^ [INFO] [stdout] 476 | / let accounts = Transfer { [INFO] [stdout] 477 | | from: self.player.to_account_info(), // Player pays the bet [INFO] [stdout] 478 | | to: self.vault.to_account_info(), // Vault receives the bet [INFO] [stdout] 479 | | }; [INFO] [stdout] | |__________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:481:9 [INFO] [stdout] | [INFO] [stdout] 481 | / /// CPI context for system program transfer [INFO] [stdout] 482 | | /// [INFO] [stdout] 483 | | /// ## Cross-Program Invocation [INFO] [stdout] 484 | | /// This creates the context for calling the system program's [INFO] [stdout] 485 | | /// transfer instruction to move SOL from player to vault. [INFO] [stdout] | |__________________________________________________________________^ [INFO] [stdout] 486 | let ctx = CpiContext::new(self.system_program.to_account_info(), accounts); [INFO] [stdout] | --------------------------------------------------------------------------- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:708:9 [INFO] [stdout] | [INFO] [stdout] 708 | / /// Player wins if their prediction is HIGHER than the random roll [INFO] [stdout] 709 | | /// [INFO] [stdout] 710 | | /// ## Game Logic Explanation [INFO] [stdout] 711 | | /// - Player predicts a number from 2-96 [INFO] [stdout] ... | [INFO] [stdout] 724 | | /// Higher predictions = Higher win chance = Lower payout multiplier [INFO] [stdout] 725 | | /// This creates intuitive risk/reward relationship for players. [INFO] [stdout] | |________________________________________________________________________^ [INFO] [stdout] 726 | / if self.bet.roll > roll { [INFO] [stdout] ... | [INFO] [stdout] 845 | | transfer(ctx, payout)?; [INFO] [stdout] 846 | | } [INFO] [stdout] | |_________- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:732:13 [INFO] [stdout] | [INFO] [stdout] 732 | / /// Calculate payout with house edge and odds-based multiplier [INFO] [stdout] 733 | | /// [INFO] [stdout] 734 | | /// ## Payout Formula Breakdown [INFO] [stdout] 735 | | /// ``` [INFO] [stdout] ... | [INFO] [stdout] 766 | | /// - payout = (1B * 9850) / 1 / 100 = ~98.5B lamports = ~98.5 SOL [INFO] [stdout] 767 | | /// - Effective multiplier: ~98.5x (fair would be 100.0x) [INFO] [stdout] | |_____________________________________________________________________^ [INFO] [stdout] 768 | / let payout = (self.bet.amount as u128) [INFO] [stdout] 769 | | .checked_mul(10000 - HOUSE_EDGE as u128).ok_or(DiceError::Overflow)? // Apply house edge [INFO] [stdout] 770 | | .checked_div(self.bet.roll as u128 - 1).ok_or(DiceError::Overflow)? // Odds multiplier [INFO] [stdout] 771 | | .checked_div(100).ok_or(DiceError::Overflow)? as u64; // Basis point conversion [INFO] [stdout] | |_____________________________________________________________________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:778:13 [INFO] [stdout] | [INFO] [stdout] 778 | / /// Setup transfer from vault to player [INFO] [stdout] 779 | | /// [INFO] [stdout] 780 | | /// ## Transfer Security Model [INFO] [stdout] 781 | | /// - From: House vault (PDA controlled by program) [INFO] [stdout] ... | [INFO] [stdout] 790 | | /// - Vault balance decreasing by payout amount [INFO] [stdout] 791 | | /// - Completion of bet financial lifecycle [INFO] [stdout] | |_______________________________________________________^ [INFO] [stdout] 792 | / let accounts = Transfer { [INFO] [stdout] 793 | | from: self.vault.to_account_info(), // Vault pays out [INFO] [stdout] 794 | | to: self.player.to_account_info() // Player receives winnings [INFO] [stdout] 795 | | }; [INFO] [stdout] | |______________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:797:13 [INFO] [stdout] | [INFO] [stdout] 797 | / /// Generate PDA signing authority for vault [INFO] [stdout] 798 | | /// [INFO] [stdout] 799 | | /// ## PDA Signing Process [INFO] [stdout] 800 | | /// Since the vault is a PDA, it cannot sign transactions directly. [INFO] [stdout] ... | [INFO] [stdout] 812 | | /// - All vault operations must go through program logic [INFO] [stdout] 813 | | /// - Prevents unauthorized fund withdrawal [INFO] [stdout] | |_______________________________________________________^ [INFO] [stdout] 814 | let house_key = self.house.key(); [INFO] [stdout] | --------------------------------- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:818:13 [INFO] [stdout] | [INFO] [stdout] 818 | / /// Execute payout transfer with PDA signing [INFO] [stdout] 819 | | /// [INFO] [stdout] 820 | | /// ## Cross-Program Invocation with Signer [INFO] [stdout] 821 | | /// This CPI call: [INFO] [stdout] ... | [INFO] [stdout] 838 | | /// - Transaction is permanently recorded on-chain [INFO] [stdout] 839 | | /// - House edge is properly applied and retained [INFO] [stdout] | |_____________________________________________________________^ [INFO] [stdout] 840 | / let ctx = CpiContext::new_with_signer( [INFO] [stdout] 841 | | self.system_program.to_account_info(), [INFO] [stdout] 842 | | accounts, [INFO] [stdout] 843 | | signer_seeds [INFO] [stdout] 844 | | ); [INFO] [stdout] | |______________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:852:9 [INFO] [stdout] | [INFO] [stdout] 852 | / /// Losing bet processing [INFO] [stdout] 853 | | /// [INFO] [stdout] 854 | | /// ## What Happens on Loss [INFO] [stdout] 855 | | /// When player loses (roll >= prediction): [INFO] [stdout] ... | [INFO] [stdout] 905 | | /// - Disputed (cryptographic proof prevents manipulation) [INFO] [stdout] 906 | | /// - Reversed (blockchain immutability ensures permanence) [INFO] [stdout] | |___________________________________________________________________^ [INFO] [stdout] 907 | Ok(()) [INFO] [stdout] | ------ rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/refund_bet.rs:363:9 [INFO] [stdout] | [INFO] [stdout] 363 | / /// [INFO] [stdout] 364 | | /// ## Why This Check Is Critical [INFO] [stdout] 365 | | /// This prevents several problematic scenarios: [INFO] [stdout] 366 | | /// - **Double-Refund**: Player getting both payout and refund [INFO] [stdout] ... | [INFO] [stdout] 384 | | /// - Verify they haven't already received payout or refund [INFO] [stdout] 385 | | /// - Understand that resolved bets cannot be refunded [INFO] [stdout] | |______________________________________________________________^ [INFO] [stdout] 386 | / if bet.is_resolved == true { [INFO] [stdout] 387 | | return Err(DiceError::BetAlreadyResolved.into()); [INFO] [stdout] 388 | | } [INFO] [stdout] | |_________- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/refund_bet.rs:394:9 [INFO] [stdout] | [INFO] [stdout] 394 | / /// Calculate elapsed time and verify timeout period has passed [INFO] [stdout] 395 | | /// [INFO] [stdout] 396 | | /// ## Timeout Calculation Process [INFO] [stdout] 397 | | /// 1. Get current slot from blockchain clock [INFO] [stdout] ... | [INFO] [stdout] 420 | | /// - Balance between operational efficiency and player protection [INFO] [stdout] 421 | | /// - Clear expectations for both parties [INFO] [stdout] | |_________________________________________________^ [INFO] [stdout] 422 | let slots_passed = clock.slot.saturating_sub(bet.commit_slot); [INFO] [stdout] | -------------------------------------------------------------- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:488:9 [INFO] [stdout] | [INFO] [stdout] 488 | / /// Execute the bet amount transfer [INFO] [stdout] 489 | | /// [INFO] [stdout] 490 | | /// ## Financial Transaction [INFO] [stdout] 491 | | /// This is the core financial operation where: [INFO] [stdout] ... | [INFO] [stdout] 499 | | /// - System program encounters issues [INFO] [stdout] 500 | | /// - Network conditions prevent completion [INFO] [stdout] | |___________________________________________________^ [INFO] [stdout] 501 | transfer(ctx, amount)?; [INFO] [stdout] | ---------------------- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/refund_bet.rs:431:9 [INFO] [stdout] | [INFO] [stdout] 431 | / /// Ensure vault has sufficient funds to honor the refund [INFO] [stdout] 432 | | /// [INFO] [stdout] 433 | | /// ## Financial Validation Purpose [INFO] [stdout] 434 | | /// This check prevents: [INFO] [stdout] ... | [INFO] [stdout] 470 | | /// - Planning for worst-case refund scenarios [INFO] [stdout] 471 | | /// - Regular vault balance assessments [INFO] [stdout] | |_______________________________________________^ [INFO] [stdout] 472 | / if bet.amount > self.vault.to_account_info().lamports() { [INFO] [stdout] 473 | | return Err(DiceError::InsufficientFunds.into()); [INFO] [stdout] 474 | | } [INFO] [stdout] | |_________- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:508:9 [INFO] [stdout] | [INFO] [stdout] 508 | / /// Initialize bet account data [INFO] [stdout] 509 | | /// [INFO] [stdout] 510 | | /// ## Data Structure Setup [INFO] [stdout] 511 | | /// The bet account stores all information needed for: [INFO] [stdout] ... | [INFO] [stdout] 518 | | /// ## Field-by-Field Explanation [INFO] [stdout] 519 | | /// Each field serves a specific purpose in the bet lifecycle: [INFO] [stdout] | |______________________________________________________________________^ [INFO] [stdout] 520 | / self.bet.set_inner(Bet { [INFO] [stdout] 521 | | /// Financial Data [INFO] [stdout] 522 | | amount, // Bet amount for payout calculations [INFO] [stdout] ... | [INFO] [stdout] 544 | | is_resolved: false, // Bet is active, awaiting resolution [INFO] [stdout] 545 | | }); [INFO] [stdout] | |__________- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:521:13 [INFO] [stdout] | [INFO] [stdout] 521 | /// Financial Data [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 522 | amount, // Bet amount for payout calculations [INFO] [stdout] | ------ rustdoc does not generate documentation for expression fields [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/refund_bet.rs:480:9 [INFO] [stdout] | [INFO] [stdout] 480 | / /// Generate vault PDA signing authority for refund transfer [INFO] [stdout] 481 | | /// [INFO] [stdout] 482 | | /// ## PDA Signing Requirements [INFO] [stdout] 483 | | /// Since vault is a Program Derived Address (PDA): [INFO] [stdout] ... | [INFO] [stdout] 507 | | /// - Bump must be valid for the derived address [INFO] [stdout] 508 | | /// - System program validates signing authority [INFO] [stdout] | |________________________________________________________^ [INFO] [stdout] 509 | let house_key = self.house.key(); [INFO] [stdout] | --------------------------------- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:524:13 [INFO] [stdout] | [INFO] [stdout] 524 | /// Identity and Ownership [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 525 | player: self.player.key(), // Player who owns this bet [INFO] [stdout] | ------------------------- rustdoc does not generate documentation for expression fields [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:527:13 [INFO] [stdout] | [INFO] [stdout] 527 | /// Timing and Sequence [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 528 | slot: Clock::get()?.slot, // When bet was placed (for ordering) [INFO] [stdout] | ------------------------ rustdoc does not generate documentation for expression fields [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/refund_bet.rs:517:9 [INFO] [stdout] | [INFO] [stdout] 517 | / /// Execute the refund transfer from vault to player [INFO] [stdout] 518 | | /// [INFO] [stdout] 519 | | /// ## Transfer Setup [INFO] [stdout] 520 | | /// The refund transfer: [INFO] [stdout] ... | [INFO] [stdout] 537 | | /// - No deduction of house edge or fees [INFO] [stdout] 538 | | /// - Simple 1:1 restoration of original bet [INFO] [stdout] | |____________________________________________________^ [INFO] [stdout] 539 | / let accounts = Transfer { [INFO] [stdout] 540 | | from: self.vault.to_account_info(), // Vault provides refund [INFO] [stdout] 541 | | to: self.player.to_account_info(), // Player receives refund [INFO] [stdout] 542 | | }; [INFO] [stdout] | |__________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:531:13 [INFO] [stdout] | [INFO] [stdout] 531 | /// Uniqueness and Concurrency [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 532 | seed, // Unique seed for this bet [INFO] [stdout] | ---- rustdoc does not generate documentation for expression fields [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:534:13 [INFO] [stdout] | [INFO] [stdout] 534 | /// Game Logic [INFO] [stdout] | ^^^^^^^^^^^^^^ [INFO] [stdout] 535 | roll, // Player's roll prediction [INFO] [stdout] | ---- rustdoc does not generate documentation for expression fields [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:537:13 [INFO] [stdout] | [INFO] [stdout] 537 | /// PDA Management [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 538 | bump: bumps.bet, // PDA bump for future operations [INFO] [stdout] | --------------- rustdoc does not generate documentation for expression fields [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/refund_bet.rs:544:9 [INFO] [stdout] | [INFO] [stdout] 544 | / /// Execute Cross-Program Invocation with PDA signing [INFO] [stdout] 545 | | /// [INFO] [stdout] 546 | | /// ## CPI Security Model [INFO] [stdout] 547 | | /// This CPI call: [INFO] [stdout] ... | [INFO] [stdout] 571 | | /// - Player can retry when conditions improve [INFO] [stdout] 572 | | /// - No partial or inconsistent states possible [INFO] [stdout] | |________________________________________________________^ [INFO] [stdout] 573 | / let ctx = CpiContext::new_with_signer( [INFO] [stdout] 574 | | self.system_program.to_account_info(), [INFO] [stdout] 575 | | accounts, [INFO] [stdout] 576 | | signer, [INFO] [stdout] 577 | | ); [INFO] [stdout] | |__________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:540:13 [INFO] [stdout] | [INFO] [stdout] 540 | /// Randomness and Verification [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 541 | randomness_account, // Oracle for future resolution [INFO] [stdout] | ------------------ rustdoc does not generate documentation for expression fields [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:543:13 [INFO] [stdout] | [INFO] [stdout] 543 | /// State Management [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 544 | is_resolved: false, // Bet is active, awaiting resolution [INFO] [stdout] | ------------------ rustdoc does not generate documentation for expression fields [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/place_bet.rs:552:9 [INFO] [stdout] | [INFO] [stdout] 552 | / /// Bet placement completion [INFO] [stdout] 553 | | /// [INFO] [stdout] 554 | | /// ## What Has Been Accomplished [INFO] [stdout] 555 | | /// - All validations passed [INFO] [stdout] ... | [INFO] [stdout] 562 | | /// - Player can claim refund after timeout if house doesn't resolve [INFO] [stdout] 563 | | /// - Bet account tracks all necessary data for these operations [INFO] [stdout] | |________________________________________________________________________^ [INFO] [stdout] 564 | Ok(()) [INFO] [stdout] | ------ rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:379:9 [INFO] [stdout] | [INFO] [stdout] 379 | / /// Verify instruction is addressed to Ed25519 program [INFO] [stdout] 380 | | /// [INFO] [stdout] 381 | | /// ## Security Requirement [INFO] [stdout] 382 | | /// The preceding instruction must be an Ed25519 verification instruction, [INFO] [stdout] ... | [INFO] [stdout] 394 | | /// - Manipulate randomness generation process [INFO] [stdout] 395 | | /// - Compromise the provably fair system [INFO] [stdout] | |_________----------------------------------------^ [INFO] [stdout] | | [INFO] [stdout] | rustdoc does not generate documentation for macro invocations [INFO] [stdout] | [INFO] [stdout] = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:402:9 [INFO] [stdout] | [INFO] [stdout] 402 | / /// Verify Ed25519 instruction has no accounts [INFO] [stdout] 403 | | /// [INFO] [stdout] 404 | | /// ## Purity Requirement [INFO] [stdout] 405 | | /// Ed25519 verification instructions should be "pure" operations that: [INFO] [stdout] ... | [INFO] [stdout] 420 | | /// - Signature data in instruction data field [INFO] [stdout] 421 | | /// - No external state dependencies [INFO] [stdout] | |_________-----------------------------------^ [INFO] [stdout] | | [INFO] [stdout] | rustdoc does not generate documentation for macro invocations [INFO] [stdout] | [INFO] [stdout] = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/refund_bet.rs:585:9 [INFO] [stdout] | [INFO] [stdout] 585 | / /// Mark bet as resolved to prevent future operations [INFO] [stdout] 586 | | /// [INFO] [stdout] 587 | | /// ## State Transition Purpose [INFO] [stdout] 588 | | /// Setting `is_resolved = true` ensures: [INFO] [stdout] ... | [INFO] [stdout] 613 | | /// - Only state flag changes (other data preserved) [INFO] [stdout] 614 | | /// - Refund transaction provides the financial settlement [INFO] [stdout] | |__________________________________________________________________^ [INFO] [stdout] 615 | bet.is_resolved = true; [INFO] [stdout] | --------------- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:456:9 [INFO] [stdout] | [INFO] [stdout] 456 | / /// Ensure exactly one signature is provided [INFO] [stdout] 457 | | /// [INFO] [stdout] 458 | | /// ## Single Signature Requirement [INFO] [stdout] 459 | | /// Our bet resolution process requires exactly one signature because: [INFO] [stdout] ... | [INFO] [stdout] 468 | | /// - Maintains straightforward verification process [INFO] [stdout] 469 | | /// - Reduces complexity and potential bugs [INFO] [stdout] | |_________------------------------------------------^ [INFO] [stdout] | | [INFO] [stdout] | rustdoc does not generate documentation for macro invocations [INFO] [stdout] | [INFO] [stdout] = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/refund_bet.rs:621:9 [INFO] [stdout] | [INFO] [stdout] 621 | / /// Refund processing completed successfully [INFO] [stdout] 622 | | /// [INFO] [stdout] 623 | | /// ## What Has Been Accomplished [INFO] [stdout] 624 | | /// At this point: [INFO] [stdout] ... | [INFO] [stdout] 653 | | /// - Refunded bet account serves as historical record [INFO] [stdout] 654 | | /// - All parties can verify refund occurred correctly [INFO] [stdout] | |______________________________________________________________^ [INFO] [stdout] 655 | Ok(()) [INFO] [stdout] | ------ rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:477:9 [INFO] [stdout] | [INFO] [stdout] 477 | / /// Verify signature contains all required components [INFO] [stdout] 478 | | /// [INFO] [stdout] 479 | | /// ## Verifiability Requirements [INFO] [stdout] 480 | | /// A signature is "verifiable" if it contains: [INFO] [stdout] ... | [INFO] [stdout] 492 | | /// Prevents processing of incomplete or malformed signatures that [INFO] [stdout] 493 | | /// could lead to undefined behavior or security vulnerabilities. [INFO] [stdout] | |_________----------------------------------------------------------------^ [INFO] [stdout] | | [INFO] [stdout] | rustdoc does not generate documentation for macro invocations [INFO] [stdout] | [INFO] [stdout] = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:500:9 [INFO] [stdout] | [INFO] [stdout] 500 | / /// Verify signature was generated by house authority [INFO] [stdout] 501 | | /// [INFO] [stdout] 502 | | /// ## Authority Verification Process [INFO] [stdout] 503 | | /// 1. Extract public key from Ed25519 signature data [INFO] [stdout] ... | [INFO] [stdout] 518 | | /// - Compromise the fairness of the entire system [INFO] [stdout] 519 | | /// - Create predictable or biased results [INFO] [stdout] | |_________-----------------------------------------^ [INFO] [stdout] | | [INFO] [stdout] | rustdoc does not generate documentation for macro invocations [INFO] [stdout] | [INFO] [stdout] = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:526:9 [INFO] [stdout] | [INFO] [stdout] 526 | / /// Verify provided signature matches Ed25519 instruction signature [INFO] [stdout] 527 | | /// [INFO] [stdout] 528 | | /// ## Signature Consistency Check [INFO] [stdout] 529 | | /// This ensures the signature provided to this instruction matches [INFO] [stdout] ... | [INFO] [stdout] 544 | | /// Even if an attacker could somehow manipulate the instruction [INFO] [stdout] 545 | | /// sequence, they cannot change the signature without detection. [INFO] [stdout] | |_________----------------------------------------------------------------^ [INFO] [stdout] | | [INFO] [stdout] | rustdoc does not generate documentation for macro invocations [INFO] [stdout] | [INFO] [stdout] = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:552:9 [INFO] [stdout] | [INFO] [stdout] 552 | / /// Verify signature was generated for current bet data [INFO] [stdout] 553 | | /// [INFO] [stdout] 554 | | /// ## Replay Attack Prevention [INFO] [stdout] 555 | | /// This is the critical check that prevents signature replay attacks: [INFO] [stdout] ... | [INFO] [stdout] 583 | | /// - **Cross-bet contamination**: Mixing up signatures between bets [INFO] [stdout] 584 | | /// - **Temporal attacks**: Using signatures from different bet states [INFO] [stdout] | |_________---------------------------------------------------------------------^ [INFO] [stdout] | | [INFO] [stdout] | rustdoc does not generate documentation for macro invocations [INFO] [stdout] | [INFO] [stdout] = help: to document an item produced by a macro, the macro must produce the documentation as part of its expansion [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:352:9 [INFO] [stdout] | [INFO] [stdout] 352 | / /// Load the preceding Ed25519 verification instruction [INFO] [stdout] 353 | | /// [INFO] [stdout] 354 | | /// ## Instruction Sequence Requirement [INFO] [stdout] 355 | | /// Bet resolution requires a two-instruction sequence: [INFO] [stdout] ... | [INFO] [stdout] 368 | | /// - Instruction index is invalid [INFO] [stdout] 369 | | /// - Instruction data is malformed [INFO] [stdout] | |___________________________________________^ [INFO] [stdout] 370 | / let ix = load_instruction_at_checked( [INFO] [stdout] 371 | | 0, // Previous instruction index [INFO] [stdout] 372 | | &self.instruction_sysvar.to_account_info() // Instruction sysvar access [INFO] [stdout] 373 | | )?; [INFO] [stdout] | |___________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:428:9 [INFO] [stdout] | [INFO] [stdout] 428 | / /// Parse Ed25519 instruction data to extract signatures [INFO] [stdout] 429 | | /// [INFO] [stdout] 430 | | /// ## Data Structure [INFO] [stdout] 431 | | /// Ed25519 instruction data contains: [INFO] [stdout] ... | [INFO] [stdout] 448 | | /// - Format doesn't match Ed25519 specification [INFO] [stdout] 449 | | /// - Required fields are missing [INFO] [stdout] | |_________________________________________^ [INFO] [stdout] 450 | let signatures = Ed25519InstructionSignatures::unpack(&ix.data)?.0; [INFO] [stdout] | ------------------------------------------------------------------- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:638:9 [INFO] [stdout] | [INFO] [stdout] 638 | / /// Hash the signature to create uniform entropy [INFO] [stdout] 639 | | /// [INFO] [stdout] 640 | | /// ## Cryptographic Hashing Process [INFO] [stdout] 641 | | /// The signature bytes are processed through SHA-256 hashing to: [INFO] [stdout] ... | [INFO] [stdout] 658 | | /// - Cannot be predicted or manipulated by either party [INFO] [stdout] 659 | | /// - Signature generation includes randomness from private key operations [INFO] [stdout] | |__________________________________________________________________________________^ [INFO] [stdout] 660 | let hash = hash(sig).to_bytes(); [INFO] [stdout] | -------------------------------- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:662:9 [INFO] [stdout] | [INFO] [stdout] 662 | / /// Convert hash to random number through careful processing [INFO] [stdout] 663 | | /// [INFO] [stdout] 664 | | /// ## Two-Stage Conversion Process [INFO] [stdout] 665 | | /// We split the 32-byte hash into two 16-byte chunks to: [INFO] [stdout] ... | [INFO] [stdout] 670 | | /// [INFO] [stdout] 671 | | /// ## First 16-byte chunk processing [INFO] [stdout] | |_____________________________________________^ [INFO] [stdout] 672 | let mut hash_16: [u8; 16] = [0; 16]; [INFO] [stdout] | ------------------------------------ rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:676:9 [INFO] [stdout] | [INFO] [stdout] 676 | /// Second 16-byte chunk processing [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] 677 | hash_16.copy_from_slice(&hash[16..32]); [INFO] [stdout] | -------------------------------------- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:680:9 [INFO] [stdout] | [INFO] [stdout] 680 | / /// Combine chunks and generate final dice roll [INFO] [stdout] 681 | | /// [INFO] [stdout] 682 | | /// ## Statistical Combination [INFO] [stdout] 683 | | /// Adding the two u128 values: [INFO] [stdout] ... | [INFO] [stdout] 697 | | /// - Bias effect: < 1 in 3.4 * 10^36 [INFO] [stdout] 698 | | /// - Practically zero impact on fairness [INFO] [stdout] | |_________________________________________________^ [INFO] [stdout] 699 | / let roll = lower [INFO] [stdout] 700 | | .wrapping_add(upper) // Combine entropy sources [INFO] [stdout] 701 | | .wrapping_rem(100) as u8 + 1; // Convert to dice range 1-100 [INFO] [stdout] | |_________________________________________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:708:9 [INFO] [stdout] | [INFO] [stdout] 708 | / /// Player wins if their prediction is HIGHER than the random roll [INFO] [stdout] 709 | | /// [INFO] [stdout] 710 | | /// ## Game Logic Explanation [INFO] [stdout] 711 | | /// - Player predicts a number from 2-96 [INFO] [stdout] ... | [INFO] [stdout] 724 | | /// Higher predictions = Higher win chance = Lower payout multiplier [INFO] [stdout] 725 | | /// This creates intuitive risk/reward relationship for players. [INFO] [stdout] | |________________________________________________________________________^ [INFO] [stdout] 726 | / if self.bet.roll > roll { [INFO] [stdout] ... | [INFO] [stdout] 845 | | transfer(ctx, payout)?; [INFO] [stdout] 846 | | } [INFO] [stdout] | |_________- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:732:13 [INFO] [stdout] | [INFO] [stdout] 732 | / /// Calculate payout with house edge and odds-based multiplier [INFO] [stdout] 733 | | /// [INFO] [stdout] 734 | | /// ## Payout Formula Breakdown [INFO] [stdout] 735 | | /// ``` [INFO] [stdout] ... | [INFO] [stdout] 766 | | /// - payout = (1B * 9850) / 1 / 100 = ~98.5B lamports = ~98.5 SOL [INFO] [stdout] 767 | | /// - Effective multiplier: ~98.5x (fair would be 100.0x) [INFO] [stdout] | |_____________________________________________________________________^ [INFO] [stdout] 768 | / let payout = (self.bet.amount as u128) [INFO] [stdout] 769 | | .checked_mul(10000 - HOUSE_EDGE as u128).ok_or(DiceError::Overflow)? // Apply house edge [INFO] [stdout] 770 | | .checked_div(self.bet.roll as u128 - 1).ok_or(DiceError::Overflow)? // Odds multiplier [INFO] [stdout] 771 | | .checked_div(100).ok_or(DiceError::Overflow)? as u64; // Basis point conversion [INFO] [stdout] | |_____________________________________________________________________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:778:13 [INFO] [stdout] | [INFO] [stdout] 778 | / /// Setup transfer from vault to player [INFO] [stdout] 779 | | /// [INFO] [stdout] 780 | | /// ## Transfer Security Model [INFO] [stdout] 781 | | /// - From: House vault (PDA controlled by program) [INFO] [stdout] ... | [INFO] [stdout] 790 | | /// - Vault balance decreasing by payout amount [INFO] [stdout] 791 | | /// - Completion of bet financial lifecycle [INFO] [stdout] | |_______________________________________________________^ [INFO] [stdout] 792 | / let accounts = Transfer { [INFO] [stdout] 793 | | from: self.vault.to_account_info(), // Vault pays out [INFO] [stdout] 794 | | to: self.player.to_account_info() // Player receives winnings [INFO] [stdout] 795 | | }; [INFO] [stdout] | |______________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:797:13 [INFO] [stdout] | [INFO] [stdout] 797 | / /// Generate PDA signing authority for vault [INFO] [stdout] 798 | | /// [INFO] [stdout] 799 | | /// ## PDA Signing Process [INFO] [stdout] 800 | | /// Since the vault is a PDA, it cannot sign transactions directly. [INFO] [stdout] ... | [INFO] [stdout] 812 | | /// - All vault operations must go through program logic [INFO] [stdout] 813 | | /// - Prevents unauthorized fund withdrawal [INFO] [stdout] | |_______________________________________________________^ [INFO] [stdout] 814 | let house_key = self.house.key(); [INFO] [stdout] | --------------------------------- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:818:13 [INFO] [stdout] | [INFO] [stdout] 818 | / /// Execute payout transfer with PDA signing [INFO] [stdout] 819 | | /// [INFO] [stdout] 820 | | /// ## Cross-Program Invocation with Signer [INFO] [stdout] 821 | | /// This CPI call: [INFO] [stdout] ... | [INFO] [stdout] 838 | | /// - Transaction is permanently recorded on-chain [INFO] [stdout] 839 | | /// - House edge is properly applied and retained [INFO] [stdout] | |_____________________________________________________________^ [INFO] [stdout] 840 | / let ctx = CpiContext::new_with_signer( [INFO] [stdout] 841 | | self.system_program.to_account_info(), [INFO] [stdout] 842 | | accounts, [INFO] [stdout] 843 | | signer_seeds [INFO] [stdout] 844 | | ); [INFO] [stdout] | |______________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/resolve_bet.rs:852:9 [INFO] [stdout] | [INFO] [stdout] 852 | / /// Losing bet processing [INFO] [stdout] 853 | | /// [INFO] [stdout] 854 | | /// ## What Happens on Loss [INFO] [stdout] 855 | | /// When player loses (roll >= prediction): [INFO] [stdout] ... | [INFO] [stdout] 905 | | /// - Disputed (cryptographic proof prevents manipulation) [INFO] [stdout] 906 | | /// - Reversed (blockchain immutability ensures permanence) [INFO] [stdout] | |___________________________________________________________________^ [INFO] [stdout] 907 | Ok(()) [INFO] [stdout] | ------ rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/refund_bet.rs:363:9 [INFO] [stdout] | [INFO] [stdout] 363 | / /// [INFO] [stdout] 364 | | /// ## Why This Check Is Critical [INFO] [stdout] 365 | | /// This prevents several problematic scenarios: [INFO] [stdout] 366 | | /// - **Double-Refund**: Player getting both payout and refund [INFO] [stdout] ... | [INFO] [stdout] 384 | | /// - Verify they haven't already received payout or refund [INFO] [stdout] 385 | | /// - Understand that resolved bets cannot be refunded [INFO] [stdout] | |______________________________________________________________^ [INFO] [stdout] 386 | / if bet.is_resolved == true { [INFO] [stdout] 387 | | return Err(DiceError::BetAlreadyResolved.into()); [INFO] [stdout] 388 | | } [INFO] [stdout] | |_________- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/refund_bet.rs:394:9 [INFO] [stdout] | [INFO] [stdout] 394 | / /// Calculate elapsed time and verify timeout period has passed [INFO] [stdout] 395 | | /// [INFO] [stdout] 396 | | /// ## Timeout Calculation Process [INFO] [stdout] 397 | | /// 1. Get current slot from blockchain clock [INFO] [stdout] ... | [INFO] [stdout] 420 | | /// - Balance between operational efficiency and player protection [INFO] [stdout] 421 | | /// - Clear expectations for both parties [INFO] [stdout] | |_________________________________________________^ [INFO] [stdout] 422 | let slots_passed = clock.slot.saturating_sub(bet.commit_slot); [INFO] [stdout] | -------------------------------------------------------------- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/refund_bet.rs:431:9 [INFO] [stdout] | [INFO] [stdout] 431 | / /// Ensure vault has sufficient funds to honor the refund [INFO] [stdout] 432 | | /// [INFO] [stdout] 433 | | /// ## Financial Validation Purpose [INFO] [stdout] 434 | | /// This check prevents: [INFO] [stdout] ... | [INFO] [stdout] 470 | | /// - Planning for worst-case refund scenarios [INFO] [stdout] 471 | | /// - Regular vault balance assessments [INFO] [stdout] | |_______________________________________________^ [INFO] [stdout] 472 | / if bet.amount > self.vault.to_account_info().lamports() { [INFO] [stdout] 473 | | return Err(DiceError::InsufficientFunds.into()); [INFO] [stdout] 474 | | } [INFO] [stdout] | |_________- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/refund_bet.rs:480:9 [INFO] [stdout] | [INFO] [stdout] 480 | / /// Generate vault PDA signing authority for refund transfer [INFO] [stdout] 481 | | /// [INFO] [stdout] 482 | | /// ## PDA Signing Requirements [INFO] [stdout] 483 | | /// Since vault is a Program Derived Address (PDA): [INFO] [stdout] ... | [INFO] [stdout] 507 | | /// - Bump must be valid for the derived address [INFO] [stdout] 508 | | /// - System program validates signing authority [INFO] [stdout] | |________________________________________________________^ [INFO] [stdout] 509 | let house_key = self.house.key(); [INFO] [stdout] | --------------------------------- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/refund_bet.rs:517:9 [INFO] [stdout] | [INFO] [stdout] 517 | / /// Execute the refund transfer from vault to player [INFO] [stdout] 518 | | /// [INFO] [stdout] 519 | | /// ## Transfer Setup [INFO] [stdout] 520 | | /// The refund transfer: [INFO] [stdout] ... | [INFO] [stdout] 537 | | /// - No deduction of house edge or fees [INFO] [stdout] 538 | | /// - Simple 1:1 restoration of original bet [INFO] [stdout] | |____________________________________________________^ [INFO] [stdout] 539 | / let accounts = Transfer { [INFO] [stdout] 540 | | from: self.vault.to_account_info(), // Vault provides refund [INFO] [stdout] 541 | | to: self.player.to_account_info(), // Player receives refund [INFO] [stdout] 542 | | }; [INFO] [stdout] | |__________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/refund_bet.rs:544:9 [INFO] [stdout] | [INFO] [stdout] 544 | / /// Execute Cross-Program Invocation with PDA signing [INFO] [stdout] 545 | | /// [INFO] [stdout] 546 | | /// ## CPI Security Model [INFO] [stdout] 547 | | /// This CPI call: [INFO] [stdout] ... | [INFO] [stdout] 571 | | /// - Player can retry when conditions improve [INFO] [stdout] 572 | | /// - No partial or inconsistent states possible [INFO] [stdout] | |________________________________________________________^ [INFO] [stdout] 573 | / let ctx = CpiContext::new_with_signer( [INFO] [stdout] 574 | | self.system_program.to_account_info(), [INFO] [stdout] 575 | | accounts, [INFO] [stdout] 576 | | signer, [INFO] [stdout] 577 | | ); [INFO] [stdout] | |__________- rustdoc does not generate documentation for statements [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/refund_bet.rs:585:9 [INFO] [stdout] | [INFO] [stdout] 585 | / /// Mark bet as resolved to prevent future operations [INFO] [stdout] 586 | | /// [INFO] [stdout] 587 | | /// ## State Transition Purpose [INFO] [stdout] 588 | | /// Setting `is_resolved = true` ensures: [INFO] [stdout] ... | [INFO] [stdout] 613 | | /// - Only state flag changes (other data preserved) [INFO] [stdout] 614 | | /// - Refund transaction provides the financial settlement [INFO] [stdout] | |__________________________________________________________________^ [INFO] [stdout] 615 | bet.is_resolved = true; [INFO] [stdout] | --------------- rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused doc comment [INFO] [stdout] --> programs/anchor-dice/src/instructions/refund_bet.rs:621:9 [INFO] [stdout] | [INFO] [stdout] 621 | / /// Refund processing completed successfully [INFO] [stdout] 622 | | /// [INFO] [stdout] 623 | | /// ## What Has Been Accomplished [INFO] [stdout] 624 | | /// At this point: [INFO] [stdout] ... | [INFO] [stdout] 653 | | /// - Refunded bet account serves as historical record [INFO] [stdout] 654 | | /// - All parties can verify refund occurred correctly [INFO] [stdout] | |______________________________________________________________^ [INFO] [stdout] 655 | Ok(()) [INFO] [stdout] | ------ rustdoc does not generate documentation for expressions [INFO] [stdout] | [INFO] [stdout] = help: use `//` for a plain comment [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] For more information about this error, try `rustc --explain E0658`. [INFO] [stdout] [INFO] [stdout] For more information about this error, try `rustc --explain E0658`. [INFO] [stdout] [INFO] [stderr] error: could not compile `anchor-dice` (lib) due to 1 previous error; 48 warnings emitted [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: could not compile `anchor-dice` (lib test) due to 1 previous error; 48 warnings emitted [INFO] running `Command { std: "docker" "inspect" "f0afda10d90501b97f16255f2913c03a4d81e11770d337d8414f74f1ca9cd834", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "f0afda10d90501b97f16255f2913c03a4d81e11770d337d8414f74f1ca9cd834", kill_on_drop: false }` [INFO] [stdout] f0afda10d90501b97f16255f2913c03a4d81e11770d337d8414f74f1ca9cd834