type http_header = record { "name": text; "value": text; }; type http_request_result = record { "status": nat; "headers": vec http_header; "body": vec nat8; }; type doge_balance_details = record { "confirmed_balance": nat64; "spendable_balance": nat64; "unconfirmed_balance": int64; "final_balance": nat64; }; type doge_transfer_quote = record { "amount": nat64; "network_fee": nat64; "total_debit": nat64; }; type doge_transfer_quote_result = variant { "Ok": doge_transfer_quote; "Err": text; }; type CkBtcAccountInfo = record { "btc_deposit_address": text; "owner": text; "subaccount_hex": text; "account_text": text; }; type verified_account = record { "asset": text; "network": text; "address": text; "address_type": text; "fingerprint": text; "ownership": text; }; type wallet_account_manifest = record { "identity_principal": opt text; "authentication_method": text; "wallet_source": text; "linked_phantom_pubkey": opt text; "manifest_fingerprint": text; "icp": verified_account; "sol": verified_account; "doge": verified_account; "btc": verified_account; "ckbtc": verified_account; "ckbtc_owner": text; "ckbtc_subaccount_hex": text; }; type account_verification = record { "valid": bool; "asset": text; "network": text; "normalized_address": text; "address_type": text; "fingerprint": text; "ownership": text; "warning": text; }; type transfer_intent = record { "intent_id": text; "asset": text; "network": text; "destination": text; "destination_type": text; "destination_fingerprint": text; "amount": nat64; "amount_unit": text; "fee_note": text; "confirmation_code": text; "expires_at_ns": nat64; "safety_notice": text; }; type transfer_intent_result = variant { "Ok": transfer_intent; "Err": text; }; service : () -> { "whoami": () -> (text) query; // Link a Phantom public key to the authenticated II app principal. The // signature must cover the exact string returned by get_phantom_link_message. "get_phantom_link_message": (text) -> (text) query; "get_phantom_session_message": (text, nat64) -> (text) query; "get_linked_sol_pubkey": () -> (opt text) query; "link_sol_pubkey": (text, vec nat8) -> (text); "unlink_sol_pubkey": () -> (text); // Canonical account/recipient safety surface for browser and MCP clients. "get_account_manifest_ii": () -> (wallet_account_manifest); "get_account_manifest_phantom": (text, nat64, vec nat8) -> (wallet_account_manifest); "verify_recipient": (text, text) -> (account_verification) query; "prepare_transfer_ii": (text, text, nat64) -> (transfer_intent_result); "get_pending_transfer_ii": () -> (opt transfer_intent) query; "cancel_transfer_ii": () -> (bool); "confirm_transfer_ii": (text, text) -> (text); // Compatibility methods retain the deployed signatures but reject costly // unauthenticated reads. New Phantom clients use *_authorized below. "get_deposit_address": (text) -> (text) query; "get_balance": (text) -> (nat64); "get_doge_deposit_address": (text) -> (text); "get_doge_balance": (text) -> (nat64); "get_doge_balance_details": (text) -> (doge_balance_details); "get_nonce": (text) -> (nat64); "get_pid": (text) -> (text) query; "get_sol_deposit_address": (text) -> (text); "get_sol_balance": (text) -> (nat64); "get_balance_authorized": (text, nat64, vec nat8) -> (nat64); "get_doge_deposit_address_authorized": (text, nat64, vec nat8) -> (text); "get_doge_balance_authorized": (text, nat64, vec nat8) -> (nat64); "get_doge_balance_details_authorized": (text, nat64, vec nat8) -> (doge_balance_details); "get_sol_deposit_address_authorized": (text, nat64, vec nat8) -> (text); "get_sol_balance_authorized": (text, nat64, vec nat8) -> (nat64); // Phantom-signed transfer variants "transfer": (text, nat64, text, vec nat8, nat64) -> (text); "transfer_doge": (text, nat64, text, vec nat8, nat64) -> (text); "quote_doge_transfer": (text, nat64, text) -> (doge_transfer_quote_result); "quote_doge_transfer_authorized": (text, nat64, text, nat64, vec nat8) -> (doge_transfer_quote_result); "transfer_sol": (text, nat64, text, vec nat8, nat64) -> (text); // II read/quote variants. Backend-managed ICP/SOL/DOGE movement is exposed // only through prepare_transfer_ii + confirm_transfer_ii above. II ckBTC is // principal-owned, so clients sign official ledger/minter calls directly. "get_doge_deposit_address_ii": () -> (text); "get_doge_balance_ii": () -> (nat64); "get_doge_balance_details_ii": () -> (doge_balance_details); "get_sol_deposit_address_ii": () -> (text); "get_deposit_address_ii": () -> (text); "get_sol_balance_ii": () -> (nat64); "get_balance_ii": () -> (nat64); "get_nonce_ii": () -> (nat64); "quote_doge_transfer_ii": (text, nat64) -> (doge_transfer_quote_result); "transfer_doge_ii": (text, nat64) -> (text); "transfer_ii": (text, nat64) -> (text); "transfer_sol_ii": (text, nat64) -> (text); // ckBTC / BTC (II principal default ICRC account) "get_btc_deposit_address_ii": () -> (text); "get_ckbtc_account_ii": () -> (CkBtcAccountInfo); "get_ckbtc_balance_ii": () -> (nat64); "mint_ckbtc_from_btc_ii": () -> (text); "transfer_ckbtc_ii": (text, nat64) -> (text); "withdraw_ckbtc_to_btc_ii": (text, nat64) -> (text); // ckBTC / BTC (Phantom) "get_btc_deposit_address": (text) -> (text); "get_ckbtc_account": (text) -> (CkBtcAccountInfo); "get_ckbtc_balance": (text) -> (nat64); "mint_ckbtc_from_btc": (text) -> (text); "get_btc_deposit_address_authorized": (text, nat64, vec nat8) -> (text); "get_ckbtc_account_authorized": (text, nat64, vec nat8) -> (CkBtcAccountInfo); "get_ckbtc_balance_authorized": (text, nat64, vec nat8) -> (nat64); "mint_ckbtc_from_btc_authorized": (text, vec nat8, nat64) -> (text); "transfer_ckbtc": (text, nat64, text, vec nat8, nat64) -> (text); "withdraw_ckbtc_to_btc": (text, nat64, text, vec nat8, nat64) -> (text); "transform_blockcypher_response": (record { "response": http_request_result; "context": vec nat8; }) -> (http_request_result) query; "transform_solana_rpc_response": (record { "response": http_request_result; "context": vec nat8; }) -> (http_request_result) query; }