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

# Bridged EVM donations

> Use familiar donation calls on an entry chain, with USDC settlement on Base

An enabled bridged entry accepts `IDonationRelay` donations on its source chain and delivers
USDC into the normal Base donation pipeline asynchronously. Your integration does not request
Relay quotes or submit a second bridge transaction. Existing local settlement routes continue
to work as before.

Discover donation contracts with `GET /api/v1/chains`; an API key is optional.
Robinhood is an ordinary EVM chain with ID `4663`. When its sender is configured, its
`donationRelay` supplies the contract `address`, `settlementChainId: 8453`,
and `bridge` policy. A chain may be listed without a configured
donation relay; only offer donation entry when `donationRelay` is present.

## Submit a deposit

Create your usual donation config, with beneficiaries that resolve on Base. Call the discovered
sender using exactly these signatures:

```solidity theme={null}
function donateNative(
  bytes32 configId, uint256 tipBps, address creditedTo, bytes calldata message
) external payable;

function donateToken(
  bytes32 configId, address token, uint256 total, uint256 tipBps,
  address creditedTo, bytes calldata message
) external;

struct Permit { uint256 deadline; uint8 v; bytes32 r; bytes32 s; }

function donateTokenWithPermit(
  bytes32 configId, address token, uint256 amountIn, uint256 tipBps,
  address creditedTo, Permit calldata permit, bytes calldata message
) external;
```

Send ETH with `donateNative`. For a standard ERC20, approve the sender for the amount and call
`donateToken`. For an EIP-2612 token, sign a permit with the funding caller as owner, the sender
contract as spender and the exact donation amount as value, then call `donateTokenWithPermit`.
It approves and deposits in the same transaction. The token must support EIP-2612; ordinary
approval remains available. Preserve your usual config ID, credit address and message encoding;
messages are limited to 256 bytes.

`msg.sender` is the funding caller and refund destination. It can differ from `creditedTo`.
If your integration calls through a contract, that contract must be able to receive returned
ETH/tokens and return them to its users. Crediting an end user does not make that user the payer.

## Amounts, fees and completion

At least **1 USDC** must arrive on Base before Daas fees and tip. New Relay quotes request
**3% swap tolerance**. Fixed gas and Relay fees are separate from that tolerance; there is no
percentage cap on total costs. Fees and tip use the USDC actually received. ETH, direct standard
ERC20 routes, WETH unwrap and standard token source swaps through Relay's 0x/Kyber routes are
supported. Routing depends on available liquidity; nonstandard tokens and unrecognized swap
programs are not automatically executed.

Successful source deposits appear as pending transfer activity. Funding can begin after verified
successful inclusion and an escrow check; it does not wait for source finality. Relay delivers
USDC and calls the Base receiver, which forwards the actual output into `donateToken` atomically.
Any extra USDC delivered becomes part of the donation. A verified Base donation creates its
pending receipt without waiting for Base finality. Epoch distribution still requires finalized,
reconciled membership, and final accounting waits for the settlement transaction to finalize.
Provider outages or recovery can extend completion.

The ordinary donation receipt identifies your original source token, amount, transaction and time.
Its settled fields describe the actual settlement proceeds. Internal Base epoch accounting does not
replace the original donation input.

## Track a transfer

```bash theme={null}
curl 'https://www.donate.gg/api/v1/donation-transfers?chainId=4663&transactionHash=SOURCE_TX_HASH'
```

This public read does not require an API key. Supplied keys are validated under the standard v1 policy.

The response contains one item per discovered deposit. You can also query with `?sourceId=...`.
An empty array means the transaction has not been indexed; do not interpret it as permission
to send again. Keep the source transaction link. A reverted source transaction created no deposit.

| Progress    | Meaning                                                                                            |
| ----------- | -------------------------------------------------------------------------------------------------- |
| `pending`   | Waiting for a suitable route and configuration                                                     |
| `executing` | Source transaction has been signed/submitted and awaits resolution                                 |
| `bridged`   | Source escrow was spent into Relay                                                                 |
| `arrived`   | Base arrival observed; waiting for donation ingestion                                              |
| `donated`   | Base donation receipt recorded; normal settlement continues                                        |
| `claimable` | Unbridged escrow has reached its reclaim deadline                                                  |
| `reclaimed` | Source escrow returned by a claim                                                                  |
| `refunded`  | Finalized Relay refund to the original funding caller has been verified                            |
| `refunding` | Historical refund execution awaiting reconciliation; no new Daas source-refund payment is prepared |
| `manual`    | Recovery needs assistance                                                                          |

Progress includes the source identity, funding caller, source token and atomic amount, reclaim
deadline and resulting Base transaction/receipt when available. These are separate from the
existing donation settlement statuses. The [transfer page](https://www.donate.gg/donation-transfers)
also accepts a source transaction hash and shows progress and reclaim controls.

## Reclaim unbridged funds

After 24 hours, anyone can call the source sender:

```solidity theme={null}
function claim(uint256 depositId, address recipient) external;
```

Use the deposit ID returned by status lookup and set `recipient` to the recorded funding caller.
Only that caller can redirect its own claim. A reverted transfer remains claimable. Below-minimum
or unsupported deposits stay in the sender until claimed; Daas does not need to authorize this.

Once funds have been deposited with Relay, the 24-hour sender claim no longer applies. Ordinary
source refunds go directly from Relay to the funding caller, in the currency and amount actually
returned, which can differ from the input (for example ETH after WETH unwrap, or USDG after a token swap). If USDC instead
lands at the Base receiver, Daas can complete the donation after verifying the payment and original
terms, including the saved executable quote minimum. Ambiguous or insufficient Base payments, unexpected assets and rejecting caller contracts
need manual recovery. Relay support may be necessary if automatic recovery fails. Contact Donate
support with your source transaction and transfer identity.
