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

# Accounts

> One identity key, two addresses

Your Spark wallet's identity key controls a Spark address and an Execution-side EVM address. There is no separate signup, no separate funding, and no key-management surface beyond the seed you already use for Spark.

## Get the addresses

```typescript theme={null}
const execClient = new ExecutionClient(sparkWallet);
await execClient.authenticate();

const evmAddress = await execClient.getEvmAddress();
const sparkAddress = await sparkWallet.getSparkAddress();
```

`getEvmAccount()` returns the underlying viem `LocalAccount` if you need to sign arbitrary EVM transactions outside the SDK helpers.

## Under the hood

The identity key is a single secp256k1 private key derived from your Spark seed. Spark uses its own BIP32 path for the derivation, not Ethereum's `m/44'/60'/0'/0/0`. Spark uses that private key directly to sign transfers; Flashnet Execution uses it to sign EVM transactions and intents.

To produce the EVM address from the same private key, the SDK applies the standard Ethereum derivation: take the uncompressed public key, drop the leading `0x04` prefix, keccak256-hash the remaining 64 bytes, then take the last 20 bytes.

```
evm_address = keccak256(uncompressed_pubkey[1:65])[12:32]
```

Any Ethereum wallet computes the same address from this private key. One seed, two addresses, always tied together.

## Funding

There is no faucet step. The Execution side carries no native gas balance separately from your sats. Flashnet runs the EVM with `baseFeePerGas = 0` and `maxPriorityFeePerGas = 0`, so there is no base fee to charge. To get assets onto the Execution side, deposit them: see [Deposits](/products/execution/deposits).

## What gets shared

| Belongs to the identity key | Spark side                 | Execution side                     |
| --------------------------- | -------------------------- | ---------------------------------- |
| Address                     | Bech32m (`sp1...`)         | EVM (`0x...`)                      |
| Custody                     | Spark MPC + L1 fallback    | SparkGateway + native sats balance |
| Auth                        | FROST / wallet signing     | Challenge-response on the gateway  |
| Settlement                  | `send_sats` / `send_token` | EIP-1559 transactions              |

Both sides authenticate the same identity public key. The gateway recognizes any intent signed by the key that produced your Spark address; there is no separate "Execution password" or "Execution session" beyond the short-lived bearer token `authenticate()` returns.

## Multiple accounts

If you need isolated balances for different products or users, derive a fresh SparkWallet per account. Each gets its own identity key and therefore its own pair of Spark + EVM addresses. The gateway treats them as unrelated.
