[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 1.95.0-beta.7 for beta-1.95-4
[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 1.95.0-beta.7
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+1.95.0-beta.7" "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" "+1.95.0-beta.7" "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] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded solana-vote-interface v2.2.6
[INFO] [stderr]   Downloaded redox_syscall v0.5.15
[INFO] [stderr]   Downloaded anchor-derive-serde v0.31.1
[INFO] [stderr]   Downloaded anchor-derive-space v0.31.1
[INFO] [stderr]   Downloaded bytemuck_derive v1.10.0
[INFO] [stderr]   Downloaded anchor-derive-accounts v0.31.1
[INFO] [stderr]   Downloaded anchor-attribute-constant v0.31.1
[INFO] [stderr]   Downloaded anchor-attribute-error v0.31.1
[INFO] [stderr]   Downloaded anchor-attribute-program v0.31.1
[INFO] [stderr]   Downloaded anchor-attribute-event v0.31.1
[INFO] [stderr]   Downloaded anchor-attribute-access-control v0.31.1
[INFO] [stderr]   Downloaded anchor-attribute-account v0.31.1
[INFO] [stderr]   Downloaded anchor-syn v0.31.1
[INFO] [stderr]   Downloaded cc v1.2.30
[INFO] [stderr]   Downloaded anchor-lang v0.31.1
[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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.95.0-beta.7" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 59131ff61eb0222a928d16c19a50680555708ad2a251b24b973d87016d9c333e
[INFO] running `Command { std: "docker" "start" "-a" "59131ff61eb0222a928d16c19a50680555708ad2a251b24b973d87016d9c333e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "59131ff61eb0222a928d16c19a50680555708ad2a251b24b973d87016d9c333e", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "59131ff61eb0222a928d16c19a50680555708ad2a251b24b973d87016d9c333e", kill_on_drop: false }`
[INFO] [stdout] 59131ff61eb0222a928d16c19a50680555708ad2a251b24b973d87016d9c333e
[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=warn" "-e" "RUSTDOCFLAGS=--cap-lints=warn" "-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:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+1.95.0-beta.7" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] e8343a22011ab9d8531e4cfb9ea2541ad59cf025593c4dbcfff193ab84ddd2e4
[INFO] running `Command { std: "docker" "start" "-a" "e8343a22011ab9d8531e4cfb9ea2541ad59cf025593c4dbcfff193ab84ddd2e4", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.95
[INFO] [stderr]     Checking cfg-if v1.0.1
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]    Compiling libc v0.2.174
[INFO] [stderr]    Compiling zerocopy v0.8.26
[INFO] [stderr]     Checking subtle v2.6.1
[INFO] [stderr]    Compiling hashbrown v0.15.4
[INFO] [stderr]    Compiling winnow v0.7.12
[INFO] [stderr]    Compiling toml_datetime v0.6.11
[INFO] [stderr]    Compiling borsh v1.5.7
[INFO] [stderr]    Compiling once_cell v1.21.3
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]     Checking five8_core v0.1.2
[INFO] [stderr]    Compiling semver v1.0.26
[INFO] [stderr]    Compiling ahash v0.8.12
[INFO] [stderr]     Checking solana-atomic-u64 v2.2.1
[INFO] [stderr]     Checking solana-sanitize v2.2.1
[INFO] [stderr]     Checking five8 v0.2.1
[INFO] [stderr]     Checking bytemuck v1.23.1
[INFO] [stderr]     Checking digest v0.10.7
[INFO] [stderr]     Checking zeroize v1.8.1
[INFO] [stderr]     Checking five8_const v0.1.4
[INFO] [stderr]    Compiling typenum v1.18.0
[INFO] [stderr]    Compiling bs58 v0.5.1
[INFO] [stderr]    Compiling anyhow v1.0.98
[INFO] [stderr]    Compiling serde_json v1.0.141
[INFO] [stderr]    Compiling crunchy v0.2.4
[INFO] [stderr]    Compiling itoa v1.0.15
[INFO] [stderr]    Compiling cpufeatures v0.2.17
[INFO] [stderr]    Compiling memchr v2.7.5
[INFO] [stderr]     Checking solana-msg v2.2.1
[INFO] [stderr]     Checking sha2 v0.10.9
[INFO] [stderr]    Compiling ryu v1.0.20
[INFO] [stderr]    Compiling heck v0.3.3
[INFO] [stderr]     Checking solana-program-memory v2.3.1
[INFO] [stderr]    Compiling cc v1.2.30
[INFO] [stderr]    Compiling rustc_version v0.4.1
[INFO] [stderr]     Checking digest v0.9.0
[INFO] [stderr]    Compiling indexmap v2.10.0
[INFO] [stderr]     Checking log v0.4.27
[INFO] [stderr]     Checking constant_time_eq v0.3.1
[INFO] [stderr]     Checking block-buffer v0.9.0
[INFO] [stderr]     Checking opaque-debug v0.3.1
[INFO] [stderr]     Checking keccak v0.1.5
[INFO] [stderr]     Checking libsecp256k1-core v0.2.2
[INFO] [stderr]    Compiling memoffset v0.9.1
[INFO] [stderr]     Checking bitflags v2.9.1
[INFO] [stderr]     Checking solana-native-token v2.3.0
[INFO] [stderr]     Checking sha2 v0.9.9
[INFO] [stderr]    Compiling curve25519-dalek v4.1.3
[INFO] [stderr]    Compiling quote v1.0.40
[INFO] [stderr]     Checking sha3 v0.10.8
[INFO] [stderr]    Compiling syn v2.0.104
[INFO] [stderr]     Checking solana-decode-error v2.3.0
[INFO] [stderr]    Compiling generic-array v0.14.7
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]     Checking getrandom v0.2.16
[INFO] [stderr]     Checking getrandom v0.1.16
[INFO] [stderr]     Checking solana-program-option v2.2.1
[INFO] [stderr]     Checking base64 v0.21.7
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]     Checking num-bigint v0.4.6
[INFO] [stderr]     Checking rand_core v0.5.1
[INFO] [stderr]    Compiling blake3 v1.8.2
[INFO] [stderr]    Compiling crypto-common v0.1.6
[INFO] [stderr]    Compiling block-buffer v0.10.4
[INFO] [stderr]    Compiling toml_edit v0.22.27
[INFO] [stderr]     Checking ppv-lite86 v0.2.21
[INFO] [stderr]     Checking solana-big-mod-exp v2.2.1
[INFO] [stderr]     Checking hashbrown v0.13.2
[INFO] [stderr]    Compiling libsecp256k1-gen-ecmult v0.2.1
[INFO] [stderr]    Compiling libsecp256k1-gen-genmult v0.2.1
[INFO] [stderr]     Checking rand_chacha v0.2.2
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]     Checking rand v0.7.3
[INFO] [stderr]    Compiling libsecp256k1 v0.6.0
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]    Compiling proc-macro-crate v3.3.0
[INFO] [stderr]    Compiling borsh-derive-internal v0.10.4
[INFO] [stderr]    Compiling borsh-schema-derive-internal v0.10.4
[INFO] [stderr]    Compiling serde_derive v1.0.219
[INFO] [stderr]    Compiling bytemuck_derive v1.10.0
[INFO] [stderr]    Compiling curve25519-dalek-derive v0.1.1
[INFO] [stderr]    Compiling solana-sdk-macro v2.2.1
[INFO] [stderr]    Compiling thiserror-impl v1.0.69
[INFO] [stderr]    Compiling thiserror-impl v2.0.12
[INFO] [stderr]    Compiling num-derive v0.4.2
[INFO] [stderr]    Compiling borsh-derive v1.5.7
[INFO] [stderr]    Compiling anchor-derive-space v0.31.1
[INFO] [stderr]    Compiling thiserror v1.0.69
[INFO] [stderr]     Checking thiserror v2.0.12
[INFO] [stderr]    Compiling serde v1.0.219
[INFO] [stderr]     Checking solana-hash v2.3.0
[INFO] [stderr]     Checking bincode v1.3.3
[INFO] [stderr]     Checking solana-fee-calculator v2.2.1
[INFO] [stderr]     Checking serde_bytes v0.11.17
[INFO] [stderr]     Checking solana-short-vec v2.2.1
[INFO] [stderr]     Checking bv v0.11.1
[INFO] [stderr]     Checking solana-serde-varint v2.2.2
[INFO] [stderr]     Checking solana-sha256-hasher v2.2.1
[INFO] [stderr]     Checking solana-keccak-hasher v2.2.1
[INFO] [stderr]     Checking solana-blake3-hasher v2.2.1
[INFO] [stderr]    Compiling toml v0.5.11
[INFO] [stderr]    Compiling anchor-lang-idl-spec v0.1.0
[INFO] [stderr]    Compiling anchor-syn v0.31.1
[INFO] [stderr]    Compiling proc-macro-crate v0.1.5
[INFO] [stderr]    Compiling anchor-lang-idl v0.1.2
[INFO] [stderr]    Compiling borsh-derive v0.10.4
[INFO] [stderr]     Checking borsh v0.10.4
[INFO] [stderr]     Checking solana-pubkey v2.4.0
[INFO] [stderr]     Checking solana-borsh v2.2.1
[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-epoch-rewards 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-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-instructions-sysvar v2.2.2
[INFO] [stderr]     Checking solana-program-entrypoint v2.3.0
[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-vote-interface v2.2.6
[INFO] [stderr]     Checking solana-loader-v3-interface v5.0.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-example-mocks v2.2.1
[INFO] [stderr]     Checking solana-secp256k1-recover v2.2.1
[INFO] [stderr]     Checking solana-sysvar v2.2.2
[INFO] [stderr]     Checking solana-program v2.3.0
[INFO] [stderr]    Compiling anchor-attribute-account v0.31.1
[INFO] [stderr]    Compiling anchor-attribute-access-control v0.31.1
[INFO] [stderr]    Compiling anchor-attribute-constant v0.31.1
[INFO] [stderr]    Compiling anchor-derive-serde v0.31.1
[INFO] [stderr]    Compiling anchor-derive-accounts v0.31.1
[INFO] [stderr]    Compiling anchor-attribute-error v0.31.1
[INFO] [stderr]    Compiling anchor-attribute-event v0.31.1
[INFO] [stderr]    Compiling anchor-attribute-program v0.31.1
[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 <https://github.com/rust-lang/rust/issues/15701> for more information
[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 <https://github.com/rust-lang/rust/issues/15701> for more information
[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/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/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/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/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/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/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/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/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: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: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/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: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] 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] [stderr] error: could not compile `anchor-dice` (lib test) due to 1 previous error; 48 warnings emitted
[INFO] [stderr] warning: build failed, waiting for other jobs to finish...
[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] running `Command { std: "docker" "inspect" "e8343a22011ab9d8531e4cfb9ea2541ad59cf025593c4dbcfff193ab84ddd2e4", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "e8343a22011ab9d8531e4cfb9ea2541ad59cf025593c4dbcfff193ab84ddd2e4", kill_on_drop: false }`
[INFO] [stdout] e8343a22011ab9d8531e4cfb9ea2541ad59cf025593c4dbcfff193ab84ddd2e4
