removeSigner

suspend fun removeSigner(contextRuleId: UInt, signerId: UInt, selectedSigners: List<SelectedSigner> = emptyList(), forceMethod: SubmissionMethod? = null): TransactionResult

Removes a signer from a context rule by its ID.

Removes the signer with the given ID from the specified context rule on the smart account contract. The signer ID is assigned by the contract when the signer is added and is available via ParsedContextRule.signerIds after fetching the context rule.

The transaction requires authorization from an existing signer on the specified context rule.

IMPORTANT: You cannot remove the last signer from a context rule unless the rule has policies that provide authorization. The contract will throw error 3004 if you attempt to remove the last signer with no policies configured.

Contract call: smart_account.remove_signer(context_rule_id, signer_id)

Return

TransactionResult indicating success or failure

Parameters

contextRuleId

The context rule ID to remove the signer from

signerId

The on-chain signer ID assigned by the contract (available from ParsedContextRule.signerIds)

selectedSigners

Optional list of signers for multi-signer authorization. When empty (default), uses single-signer auth with the connected passkey. When non-empty, coordinates signatures from all listed signers.

forceMethod

Optional submission method override. When null (default), uses the configured submission method (relayer if available, RPC otherwise).

Throws

if no wallet is connected

if simulation, signing, or submission fails

if biometric authentication fails

Example:

// Fetch the parsed context rule to get signer IDs
val rules = kit.contextRuleManager.listContextRules()
val rule = rules.first { it.id == 0u }
val signerIdToRemove = rule.signerIds.first()

val result = signerManager.removeSigner(
contextRuleId = 0u,
signerId = signerIdToRemove
)

suspend fun removeSigner(contextRuleId: UInt, signer: SmartAccountSigner, selectedSigners: List<SelectedSigner> = emptyList(), forceMethod: SubmissionMethod? = null): TransactionResult

Removes a signer from a context rule by matching the signer value.

Convenience overload that resolves the on-chain signer ID internally. Fetches the specified context rule (single RPC call), finds the matching signer by equality, and delegates to the ID-based removeSigner. Use this when you have the SmartAccountSigner object but not the numeric signer ID.

Return

TransactionResult indicating success or failure

Parameters

contextRuleId

The context rule ID to remove the signer from

signer

The signer to remove (matched by equality against the rule's signers)

selectedSigners

Optional list of SelectedSigner for multi-signer authorization.

forceMethod

Optional submission method override.

Throws

if no wallet is connected

if the signer is not found on the context rule

if simulation, signing, or submission fails

if biometric authentication fails

Example:

val result = kit.signerManager.removeSigner(
contextRuleId = 1u,
signer = DelegatedSigner(address = "GA7Q...")
)