// Initialize contract
contract.initialize(&admin, &usdc_token, &250);
// Register agent
contract.register_agent(&agent);// Approve user KYC (admin only)
let expiry = env.ledger().timestamp() + (365 * 24 * 60 * 60); // 1 year
contract.set_kyc_approved(&user, &true, &expiry)?;// Execute complete transaction
let record = contract.execute_transaction(
&user,
&agent,
&1000, // amount
&None // expiry (optional)
)?;
// Check result
println!("Transaction ID: {:?}", record.remittance_id);
println!("State: {:?}", record.state);let status = contract.get_transaction_status(&remittance_id)?;
println!("Current state: {:?}", status.state);let record = contract.retry_transaction(&remittance_id)?;// Admin only
contract.set_user_blacklisted(&user, &true)?;if contract.is_kyc_approved(&user) {
// User can transact
}match contract.execute_transaction(&user, &agent, &1000, &None) {
Ok(record) => {
println!("Success! TX ID: {:?}", record.remittance_id);
}
Err(ContractError::KycNotApproved) => {
println!("User needs KYC approval");
}
Err(ContractError::UserBlacklisted) => {
println!("User is blacklisted");
}
Err(e) => {
println!("Transaction failed: {:?}", e);
}
}✅ Automatic Validation - Blacklist and KYC checks
✅ Automatic Rollback - Refunds on failure
✅ Retry Logic - Up to 3 automatic retries
✅ Audit Trail - Complete transaction history
✅ Security - Admin controls and authorization
- API Reference:
TRANSACTION_CONTROLLER.md - Implementation Details:
TRANSACTION_CONTROLLER_IMPLEMENTATION.md - Tests:
src/test.rs(search for "Transaction Controller Tests")
| Error | Solution |
|---|---|
KycNotApproved |
Admin must approve user KYC |
UserBlacklisted |
Admin must remove from blacklist |
KycExpired |
Admin must renew KYC with new expiry |
AgentNotRegistered |
Admin must register agent |
Branch: feature/transaction-controller
PR Link: https://github.com/zeekman/SwiftRemit/pull/new/feature/transaction-controller
Ready to use! 🎉