A Soroban smart contract that allows "Validators" to post suspected fraudulent account IDs for on-chain reference on the Stellar network.
This contract provides a decentralized, on-chain registry for fraud detection where trusted validators can:
- Register as validators with reputation scores
- Report suspicious accounts with evidence and confidence levels
- Achieve consensus on fraudulent accounts through multiple validator reports
- Maintain a transparent, immutable record of fraud reports
Validator Registry:
- Validator registration with reputation-based access control
- Active/inactive validator management
- Reputation scoring system (0-100)
- Report tracking and accuracy metrics
Fraud Reporting System:
- Structured fraud reports with evidence and confidence levels
- Duplicate prevention (one report per validator per account)
- Timestamp and evidence hash storage
- Minimum requirements enforcement (reputation, confidence)
Consensus Mechanism:
- Configurable consensus threshold for fraud determination
- Unique validator counting to prevent sybil attacks
- Automatic fraud status determination
pub struct FraudReport {
pub account_id: Address, // Account being reported
pub validator: Address, // Who submitted the report
pub timestamp: u64, // When reported
pub reason: String, // Reason/evidence
pub confidence: u8, // Confidence level (0-100)
pub evidence_hash: Option<Bytes>, // Evidence data hash
}
pub struct Validator {
pub address: Address, // Validator's address
pub reputation: u8, // Reputation score (0-100)
pub report_count: u64, // Total reports submitted
pub accurate_reports: u64, // Verified accurate reports
pub registration_timestamp: u64, // When registered
pub is_active: bool, // Current status
}- Rust 1.70+
- Soroban CLI
- Stellar account with XLM for deployment
# Clone the repository
git clone https://github.com/Traqora/astroml.git
cd astroml
# Install Soroban CLI
cargo install soroban-cli --locked
# Build the contract
cargo build --target wasm32-unknown-unknown --release
# Optimize WASM
soroban contract optimize --wasm target/wasm32-unknown-unknown/release/fraud_registry.wasm# Deploy to Futurenet (test)
./scripts/deploy.sh <YOUR_SECRET_KEY>
# Deploy to Testnet
./scripts/deploy.sh <YOUR_SECRET_KEY> testnet
# Deploy to Mainnet
./scripts/deploy.sh <YOUR_SECRET_KEY> mainnetInitialize the contract with an admin address.
Register a new validator with an initial reputation score.
Update a validator's reputation score.
Deactivate a validator (prevent new reports).
update_config(admin: Address, min_reputation: Option<u8>, min_confidence: Option<u8>, consensus_threshold: Option<u8>)
Update contract configuration parameters.
report_fraud(validator: Address, account_id: Address, reason: String, confidence: u8, evidence_hash: Option<Bytes>)
Submit a fraud report for a suspicious account.
Get all fraud reports for a specific account.
Get validator information.
Check if an account is considered fraudulent based on consensus.
Get all currently active validators.
Get current contract configuration (min_reputation, min_confidence, consensus_threshold).
The contract is configured with three main parameters:
min_reputation: Minimum reputation required to submit reports (default: 50)min_confidence: Minimum confidence level for reports (default: 60)consensus_threshold: Number of unique validators needed for consensus (default: 3)
Run the comprehensive test suite:
# Run all tests
cargo test
# Run specific test
cargo test test_report_fraud
# Run tests with output
cargo test -- --nocapture- Contract initialization
- Validator registration and management
- Fraud reporting with validation
- Consensus mechanism
- Error handling
- Configuration updates
# 1. Deploy contract
./scripts/deploy.sh <ADMIN_SECRET_KEY>
# 2. Register validators
./scripts/examples.sh <CONTRACT_ID> <ADMIN_SECRET_KEY>
# 3. Report fraudulent accounts
soroban contract invoke \
--id <CONTRACT_ID> \
--source <VALIDATOR_SECRET_KEY> \
--network futurenet \
-- \
report_fraud \
--validator <VALIDATOR_ADDRESS> \
--account_id <SUSPICIOUS_ACCOUNT> \
--reason "Suspicious transaction patterns" \
--confidence 85
# 4. Check fraud status
soroban contract invoke \
--id <CONTRACT_ID> \
--source <ANY_ACCOUNT> \
--network futurenet \
-- \
is_fraudulent \
--account_id <SUSPICIOUS_ACCOUNT># Update configuration for stricter requirements
soroban contract invoke \
--id <CONTRACT_ID> \
--source <ADMIN_SECRET_KEY> \
--network futurenet \
-- \
update_config \
--admin <ADMIN_ADDRESS> \
--min_reputation 70 \
--min_confidence 80 \
--consensus_threshold 5- Only admin can register/deactivate validators
- Reputation-based access control prevents spam
- Active/inactive status management
- Minimum reputation requirements
- Confidence level thresholds
- Duplicate prevention per validator
- Evidence hash support for verification
- Unique validator counting prevents sybil attacks
- Configurable consensus threshold
- Transparent, immutable reporting
- Admin-only configuration changes
- Validator-only report submission
- Public read access for transparency
The contract can be integrated with off-chain systems:
- ML fraud detection pipelines
- Exchange monitoring systems
- Compliance platforms
- Risk assessment tools
- Token contracts can check fraud status
- DEX protocols can implement fraud protection
- DeFi protocols can integrate risk scoring
- Futurenet: Testing and development
- Testnet: Staging and integration testing
- Mainnet: Production deployment
MIT License - see LICENSE file for details.
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Submit a pull request
For questions and support:
- Create an issue on GitHub
- Join the Stellar Discord
- Review the Soroban documentation
Built with Soroban SDK for the Stellar Network