Point dao at the address authorised to call DAO-gated functions.
Must match the executor execute_multisig_tx passes through (protocol
multi-sig G-address) or, after a DAO upgrade, the DAO contract itself.
fn set_dao(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
dao: soroban_sdk::Address,
)
Replace this contract's Wasm in place. Instance and persistent storage are preserved. Authorised by the stored DAO address.
fn upgrade(
env: soroban_sdk::Env,
dao: soroban_sdk::Address,
new_wasm_hash: soroban_sdk::BytesN<32>,
)
fn initialize(
env: soroban_sdk::Env,
admin: soroban_sdk::Address,
dao: soroban_sdk::Address,
usdc: soroban_sdk::Address,
engine: soroban_sdk::Address,
earnings: soroban_sdk::Address,
)
Check if an address is a registered active partner.
fn is_partner(env: soroban_sdk::Env, addr: soroban_sdk::Address) -> bool
Get full partner record by ID.
fn get_partner(env: soroban_sdk::Env, id: u32) -> Option
Partner claims their accumulated revenue. Only the partner's registered owner wallet can call this.
partner_owner — must match the partner's registered ownerfn claim_revenue(env: soroban_sdk::Env, partner_owner: soroban_sdk::Address) -> i128
Total number of registered partners.
fn partner_count(env: soroban_sdk::Env) -> u32
Self-serve registration — partner pays a fee in USDC. DAO must enable this first via set_open_registration(true).
fn self_register(
env: soroban_sdk::Env,
owner: soroban_sdk::Address,
name: soroban_sdk::String,
) -> u32
Get partner ID for a given owner address.
fn get_partner_id(env: soroban_sdk::Env, owner: soroban_sdk::Address) -> Option
Kept for ABI compatibility. KYC bypass was removed — all users go through ComplianceRegistry regardless of partner.
fn has_kyc_bypass(env: soroban_sdk::Env, partner_id: u32) -> bool
Register a new partner — called by DAO to approve an integrator. All partners have the same rights: referral swaps, 50% fee share, and the ability to submit assets for DAO activation.
fn register_partner(
env: soroban_sdk::Env,
dao: soroban_sdk::Address,
owner: soroban_sdk::Address,
name: soroban_sdk::String,
) -> u32
Revenue earned by a partner in a specific epoch.
fn get_epoch_revenue(env: soroban_sdk::Env, partner_id: u32, epoch: u64) -> i128
Get a partner asset record.
fn get_partner_asset(
env: soroban_sdk::Env,
symbol: soroban_sdk::Symbol,
) -> Option
Owner wallet for a partner id (None if unknown).
fn get_partner_owner(
env: soroban_sdk::Env,
partner_id: u32,
) -> Option
Revenue share in bps for an active partner (0 if missing/inactive).
fn get_revenue_share(env: soroban_sdk::Env, partner_id: u32) -> i128
Update a partner's revenue share (DAO only). Use to reward high-volume partners or penalise bad actors.
fn set_partner_share(
env: soroban_sdk::Env,
dao: soroban_sdk::Address,
partner_id: u32,
new_share: i128,
)
Deactivate a partner (DAO only). Blocks future revenue crediting but does NOT touch already-accumulated pending_revenue — the partner can still claim what they've already earned.
fn deactivate_partner(
env: soroban_sdk::Env,
dao: soroban_sdk::Address,
partner_id: u32,
)
Get all asset symbols deployed by a partner.
fn get_partner_assets(
env: soroban_sdk::Env,
partner_id: u32,
) -> soroban_sdk::Vec
Reactivate a previously deactivated partner.
fn reactivate_partner(
env: soroban_sdk::Env,
dao: soroban_sdk::Address,
partner_id: u32,
)
Alias for register_partner used by DAO call-data execution.
fn dao_register_partner(
env: soroban_sdk::Env,
dao: soroban_sdk::Address,
owner: soroban_sdk::Address,
name: soroban_sdk::String,
) -> u32
Whether wallets may call self_register without a DAO proposal.
fn is_open_registration(env: soroban_sdk::Env) -> bool
Enable or disable self-serve partner registration.
fn set_open_registration(env: soroban_sdk::Env, dao: soroban_sdk::Address, open: bool)
DAO activates a partner asset on the SyntheticEngine. This is the final step before users can mint the asset.
dao — DAO addresssymbol — asset symbol registered by the partnerfn activate_partner_asset(
env: soroban_sdk::Env,
dao: soroban_sdk::Address,
symbol: soroban_sdk::Symbol,
)
Called by EarningsDistributor every epoch with the revenue attributable to a specific partner (based on their referral tag).
earnings_contract — must be the registered earnings addresspartner_id — which partner generated this revenueamount — partner's share in USDC (7dp)epoch — epoch number for record-keepingfn credit_partner_revenue(
env: soroban_sdk::Env,
earnings_contract: soroban_sdk::Address,
partner_id: u32,
amount: i128,
epoch: u64,
)
Deploy a new synthetic asset under the partner's namespace. The asset will be registered on the SyntheticEngine with the partner as the deployer.
Symbol naming rule: must start with "P" to distinguish partner assets from core protocol assets. Examples: "PSGOLD" (partner synth gold), "PSTSLA"
partner_owner — must be the partner's registered owner walletsymbol — unique synth symbol (max 9 chars, starts with "P")token — pre-deployed SEP-41 contract addressoracle_symbol — price feed symbol (e.g. "GOLDUSD")min_cr — minimum collateral ratio in bps (e.g. 15_000 = 150%)liq_cr — liquidation CR in bpsliq_penalty — liquidation bonus in bpsstab_fee_bps — annual stability fee in bpsdebt_ceiling — max outstanding synth (7dp); cannot exceed global limitfn register_partner_asset(
env: soroban_sdk::Env,
partner_owner: soroban_sdk::Address,
symbol: soroban_sdk::Symbol,
token: soroban_sdk::Address,
oracle_symbol: soroban_sdk::Symbol,
coll_oracle: soroban_sdk::Symbol,
min_cr: i128,
liq_cr: i128,
liq_penalty: i128,
stab_fee_bps: i128,
debt_ceiling: i128,
)