> ## Documentation Index
> Fetch the complete documentation index at: https://docs.portalhq.io/llms.txt
> Use this file to discover all available pages before exploring further.

# delegations.revokeAndSubmit

> Revoke a token delegation, then sign and broadcast it in one call.

## Function Signature

```dart theme={null}
Future<List<String>> revokeAndSubmit({
  required String chain,
  required String token,
  required String delegateAddress,
  void Function(DelegationSubmitProgress)? onProgress,
})
```

## Description

Builds the revocation transaction(s), then signs and broadcasts each one in order and returns the resulting hashes. The wallet's signer is wired up for you, and EVM and Solana chains are routed to `eth_sendTransaction` and `sol_signAndSendTransaction` respectively.

<Warning>
  This method returns as soon as each transaction is accepted by the network. It **does not wait for on-chain confirmation** — a returned hash means the transaction was submitted, not that it succeeded. Poll [`delegations.getStatus`](./delegations-getstatus) if you need to confirm the delegation is gone.
</Warning>

Use [`delegations.revoke`](./delegations-revoke) instead when you need to inspect, modify, or sign the transaction yourself.

## Parameters

| Parameter         | Type                                       | Required | Description                                                                                                     |
| ----------------- | ------------------------------------------ | -------- | --------------------------------------------------------------------------------------------------------------- |
| `chain`           | `String`                                   | Yes      | CAIP-2 chain ID (e.g., `"eip155:11155111"` for Sepolia, `"solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1"` for Solana) |
| `token`           | `String`                                   | Yes      | Token symbol or address (e.g., `"USDC"`)                                                                        |
| `delegateAddress` | `String`                                   | Yes      | The address to revoke delegation from                                                                           |
| `onProgress`      | `void Function(DelegationSubmitProgress)?` | No       | Called as each transaction is signed and submitted                                                              |

See [`delegations.approveAndSubmit`](./delegations-approveandsubmit#delegationsubmitprogress) for the `DelegationSubmitProgress` fields.

## Returns

**`List<String>`** — One transaction hash per broadcast transaction, in submission order. Most delegation flows produce a single transaction, so the list usually has one element.

## Example

### EVM

```dart theme={null}
import 'package:portal_flutter/portal_flutter.dart';

final portal = Portal();

final hashes = await portal.delegations.revokeAndSubmit(
  chain: 'eip155:11155111',
  token: 'USDC',
  delegateAddress: '0x1234...',
);

print('Tx hashes: $hashes');
```

### Solana

```dart theme={null}
final hashes = await portal.delegations.revokeAndSubmit(
  chain: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1',
  token: 'USDC',
  delegateAddress: '7smgSuU5mjP7QY5yWGdaTfgKn8hUWwvQgfvgcZB3HmJi',
);

print('Tx signatures: $hashes');
```

## Errors

All failures throw a `PortalException`.

| Code                                 | Description                                                                                                               |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------- |
| `NOT_INITIALIZED`                    | Portal was not initialized                                                                                                |
| `DELEGATION_REVOKE_AND_SUBMIT_ERROR` | Building, signing, or broadcasting failed. The `message` carries the reason — usually the API, or Native SDK's own error. |

## Related

* [Manage Token Delegations guide](../guide/delegations)
* [delegations.revoke](./delegations-revoke)
* [delegations.approveAndSubmit](./delegations-approveandsubmit)
* [delegations.transferAndSubmit](./delegations-transferandsubmit)
