Skip to content

Commit 835b424

Browse files
committed
feat(identity-oracle): implement initialize and register_issuer
1 parent 58a5893 commit 835b424

1 file changed

Lines changed: 30 additions & 7 deletions

File tree

  • contracts/identity-oracle/src

contracts/identity-oracle/src/lib.rs

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,21 @@ pub struct IdentityOracle;
3434

3535
#[contractimpl]
3636
impl IdentityOracle {
37-
pub fn initialize(_env: Env, _admin: Address) {
38-
// TODO: store admin in instance storage
39-
panic!("not yet implemented")
37+
pub fn initialize(env: Env, admin: Address) {
38+
if env.storage().instance().has(&DataKey::Admin) {
39+
panic!("already initialized");
40+
}
41+
admin.require_auth();
42+
env.storage().instance().set(&DataKey::Admin, &admin);
4043
}
4144

42-
pub fn register_issuer(_env: Env, _admin: Address, _issuer: Address) {
43-
// TODO: require admin auth, store issuer as trusted
44-
panic!("not yet implemented")
45+
pub fn register_issuer(env: Env, admin: Address, issuer: Address) {
46+
let stored_admin: Address = env.storage().instance().get(&DataKey::Admin).expect("not initialized");
47+
if admin != stored_admin {
48+
panic!("not authorized");
49+
}
50+
admin.require_auth();
51+
env.storage().persistent().set(&DataKey::TrustedIssuer(issuer), &true);
4552
}
4653

4754
pub fn anchor_did(_env: Env, _subject: Address, _did_doc_cid: String) {
@@ -74,4 +81,20 @@ impl IdentityOracle {
7481
}
7582

7683
#[cfg(test)]
77-
mod tests {}
84+
mod tests {
85+
use super::*;
86+
use soroban_sdk::{testutils::Address as _, Env};
87+
88+
#[test]
89+
fn test_initialize_sets_admin() {
90+
let env = Env::default();
91+
env.mock_all_auths();
92+
let contract_id = env.register_contract(None, IdentityOracle);
93+
let client = IdentityOracleClient::new(&env, &contract_id);
94+
let admin = Address::generate(&env);
95+
client.initialize(&admin);
96+
// verify by calling register_issuer as admin (should not panic)
97+
let issuer = Address::generate(&env);
98+
client.register_issuer(&admin, &issuer);
99+
}
100+
}

0 commit comments

Comments
 (0)