"""US-006 tests: Solana contract boundary for stake, payment, and settlement.""" from meshnet_contracts import LocalSolanaContracts def test_node_stake_is_reflected_in_registry(): """A node can submit stake and read the updated registry balance.""" contracts = LocalSolanaContracts() receipt = contracts.registry.submit_stake("node-wallet-a", 500) assert receipt["cluster"] == "local-test-validator" assert contracts.registry.get_wallet("node-wallet-a").stake_balance == 500 assert contracts.registry.has_minimum_stake("node-wallet-a", minimum_stake=100) def test_client_can_fund_api_key_with_testnet_sol(): """A client can fund an API key account and read the available balance.""" contracts = LocalSolanaContracts() receipt = contracts.payment.fund_api_key("api-key-a", lamports=2_000) assert receipt["cluster"] == "local-test-validator" assert contracts.payment.get_balance("api-key-a").lamports == 3_000 def test_epoch_settlement_debits_clients_and_rewards_nodes_and_validator(): """Settlement distributes native token rewards according to recorded work.""" contracts = LocalSolanaContracts(cost_per_layer_token_lamport=2) contracts.payment.fund_api_key("api-key-a", lamports=1_000) contracts.payment.record_attribution( session_id="session-a", api_key="api-key-a", node_wallet="node-wallet-a", layer_start=0, layer_end=15, tokens=10, ) contracts.payment.record_attribution( session_id="session-a", api_key="api-key-a", node_wallet="node-wallet-b", layer_start=16, layer_end=31, tokens=10, speed_score=2.0, ) result = contracts.settlement.settle_epoch( epoch=1, validator_wallet="validator-wallet", validator_reward_share_bps=1_000, ) assert result.client_debits == {"api-key-a": 640} assert result.node_rewards == {"node-wallet-a": 96, "node-wallet-b": 192} assert result.validator_rewards == {"validator-wallet": 32} assert contracts.payment.get_balance("api-key-a").lamports == 1_360 assert contracts.settlement.get_token_balance("node-wallet-a") == 96 assert contracts.settlement.get_token_balance("node-wallet-b") == 192 assert contracts.settlement.get_token_balance("validator-wallet") == 32