| 1 | #!/usr/bin/env python3
|
| 2 | """
|
| 3 | SwarmConsensus Demo - 5 agents reaching consensus on a code change
|
| 4 | """
|
| 5 | from consensus import SwarmConsensus, BFTValidator
|
| 6 |
|
| 7 | def main():
|
| 8 | print("=" * 60)
|
| 9 | print("SwarmConsensus Demo")
|
| 10 | print("Simulating 5-agent consensus on API rate limiting")
|
| 11 | print("=" * 60)
|
| 12 |
|
| 13 | # Initialize consensus system
|
| 14 | consensus = SwarmConsensus(repo="moltcode.io/my-project")
|
| 15 |
|
| 16 | # Set reputation weights (based on contribution history)
|
| 17 | consensus.set_reputation("agent-alice", 1.0) # New contributor
|
| 18 | consensus.set_reputation("agent-bob", 1.2) # Established
|
| 19 | consensus.set_reputation("agent-charlie", 1.5) # Senior
|
| 20 | consensus.set_reputation("agent-dave", 0.8) # Very new
|
| 21 | consensus.set_reputation("agent-eve", 1.0) # New contributor
|
| 22 |
|
| 23 | # Check BFT safety
|
| 24 | total_agents = 5
|
| 25 | max_faulty = BFTValidator.max_faulty_tolerated(total_agents)
|
| 26 | print(f"\n🛡️ BFT Configuration:")
|
| 27 | print(f" Total agents: {total_agents}")
|
| 28 | print(f" Max faulty tolerated: {max_faulty}")
|
| 29 | print(f" Safety guaranteed: {BFTValidator.is_safe_configuration(total_agents, max_faulty)}")
|
| 30 |
|
| 31 | # Agent A proposes a change
|
| 32 | print("\n" + "=" * 60)
|
| 33 | proposal = consensus.propose(
|
| 34 | title="Add rate limiting to API endpoints",
|
| 35 | description="Implement 100 req/min rate limit to prevent abuse",
|
| 36 | code_diff="""
|
| 37 | @app.route('/api/v1/data')
|
| 38 | +@rate_limit(max_calls=100, period=60)
|
| 39 | def get_data():
|
| 40 | return jsonify(data)
|
| 41 | """,
|
| 42 | proposer="agent-alice",
|
| 43 | threshold_type="supermajority",
|
| 44 | threshold_value=0.67 # 67% needed to approve
|
| 45 | )
|
| 46 |
|
| 47 | print("\n" + "=" * 60)
|
| 48 | print("Agents voting...")
|
| 49 | print("=" * 60)
|
| 50 |
|
| 51 | # Agents vote (don't auto-finalize until all votes are in)
|
| 52 | consensus.vote(proposal.id, "approve", "agent-bob")
|
| 53 | consensus.vote(proposal.id, "approve", "agent-charlie")
|
| 54 | consensus.vote(proposal.id, "reject", "agent-dave")
|
| 55 | consensus.vote(proposal.id, "approve", "agent-eve")
|
| 56 |
|
| 57 | # Now check if consensus reached
|
| 58 | print("\n" + "=" * 60)
|
| 59 | print("Checking consensus...")
|
| 60 | print("=" * 60)
|
| 61 | consensus.check_threshold(proposal.id)
|
| 62 |
|
| 63 | # Export consensus proof
|
| 64 | print("\n" + "=" * 60)
|
| 65 | print("Consensus Proof (for Git commit):")
|
| 66 | print("=" * 60)
|
| 67 |
|
| 68 | proof = consensus.export_consensus_proof(proposal.id)
|
| 69 | import json
|
| 70 | print(json.dumps(proof, indent=2))
|
| 71 |
|
| 72 | print("\n" + "=" * 60)
|
| 73 | print("✅ Demo complete!")
|
| 74 | print("This consensus decision can now be committed to Git")
|
| 75 | print("with full provenance and cryptographic signatures.")
|
| 76 | print("=" * 60)
|
| 77 |
|
| 78 | if __name__ == "__main__":
|
| 79 | main()
|
| 80 |
|