One line to check eligibility
The user proves once with
identity_verifier.attest or
attest_identity. Your contract
calls
verify_identity_for(account,
policy_id) and continues only if that account still holds
a live approval for your policy. Always pin the policy —
a bare passport approval must not satisfy a gate that expects
age or country checks.
use soroban_sdk::{contractclient, contracttype, Address, Env};
#[derive(Clone)]
#[contracttype]
pub struct Attestation {
pub policy_id: u32,
pub issuer_id: u32,
pub valid_until: u64,
}
#[contractclient(name = "IdentityVerifierPeerClient")]
pub trait IdentityVerifierPeer {
fn verify_identity_for(env: Env, account: Address, policy_id: u32);
fn attestation_of(env: Env, account: Address) -> Option<Attestation>;
}
fn require_anchorshield_identity(
env: &Env,
identity_verifier: &Address,
account: &Address,
policy_id: u32,
issuer_id: u32,
) {
let identity = IdentityVerifierPeerClient::new(env, identity_verifier);
identity.verify_identity_for(account, &policy_id);
let attestation = identity.attestation_of(account).unwrap();
assert!(attestation.issuer_id == issuer_id);
}
// in your action
account.require_auth();
require_anchorshield_identity(&env, &identity_verifier, &account, MY_POLICY, MY_ISSUER);
- Work in your contractone peer call
- Expired or missing approvalaction reverts
- Account ↔ approval link on the blockchainuntil expiry