GIA HẠN TTL cho ví nằm im — cron ví phí gọi (be/src/jobs/ttl-keeper.ts).
Không đòi auth: gia hạn không đổi được gì, chỉ tốn phí người gọi.
Đọc config bên trong nên chính nó đã gia hạn; gọi cả instance của
registry để bản thân registry không archive.
fn extend_ttl(env: soroban_sdk::Env, wallet: soroban_sdk::Address)
fn add_guardian(
env: soroban_sdk::Env,
wallet: soroban_sdk::Address,
new_guardian: soroban_sdk::Address,
)
fn is_registered(env: soroban_sdk::Env, wallet: soroban_sdk::Address) -> bool
VETO — chính ví ký (khoá còn sống nào cũng chặn được, qua __check_auth).
fn cancel_recovery(env: soroban_sdk::Env, wallet: soroban_sdk::Address)
Ví TỰ đăng ký (passkey ký qua __check_auth). Chống lockout từ gốc: threshold ∈ [1, số guardian], guardian không trùng, không phải chính ví.
fn register_wallet(
env: soroban_sdk::Env,
wallet: soroban_sdk::Address,
guardians: soroban_sdk::Vec,
threshold: u32,
timelock_secs: u64,
)
CHỐNG LOCKOUT: không cho rớt xuống dưới threshold (đổi threshold trước đã).
fn remove_guardian(
env: soroban_sdk::Env,
wallet: soroban_sdk::Address,
guardian: soroban_sdk::Address,
)
fn approve_recovery(
env: soroban_sdk::Env,
wallet: soroban_sdk::Address,
guardian: soroban_sdk::Address,
)
Ai crank cũng được SAU timelock (không đòi auth người dùng) — timelock on-chain là người gác. XOAY KHOÁ THẬT trên smart account rồi mới Finalized.
fn finalize_recovery(env: soroban_sdk::Env, wallet: soroban_sdk::Address)
fn get_wallet_config(
env: soroban_sdk::Env,
wallet: soroban_sdk::Address,
) -> WalletConfig
Guardian mở khôi phục, CHỞ KHOÁ MỚI thật (phiếu = phê duyệt đúng khoá này). Initiator được đếm là phiếu đầu tiên.
fn initiate_recovery(
env: soroban_sdk::Env,
wallet: soroban_sdk::Address,
new_signer: Signer,
initiator: soroban_sdk::Address,
)
0 = hết timelock (finalize được nếu đủ phiếu). Panic nếu không có request.
fn timelock_remaining(env: soroban_sdk::Env, wallet: soroban_sdk::Address) -> u64
fn get_recovery_status(
env: soroban_sdk::Env,
wallet: soroban_sdk::Address,
) -> RecoveryRequest
VETO ĐỔI REGISTRY — người thân chặn việc ví bị trỏ sang registry khác.
Vì sao đường này phải đi qua registry chứ không gọi thẳng vào ví: ví
không giữ danh sách guardian (registry giữ), nên ví không tự biết ai có
quyền chặn. Registry kiểm tư cách rồi gọi vào ví với tư cách INVOKER —
cùng khuôn auth đã chứng minh ở recovery_rotate.
Đây là đòn đỡ cho kịch bản: passkey chủ ví bị chiếm → kẻ tấn công xin đổi registry để cắt đứt đường cứu. Timelock cho người thân thấy, hàm này cho họ chặn.
fn veto_registry_change(
env: soroban_sdk::Env,
wallet: soroban_sdk::Address,
guardian: soroban_sdk::Address,
)