Skip to main content

Documentation Index

Fetch the complete documentation index at: https://flashnet-build.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

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.

Derivation

The identity key is a secp256k1 scalar. Spark derives it from the seed using its own BIP32 path, not Ethereum’s m/44'/60'/0'/0/0. Spark uses the resulting key directly for transfers and FROST signing. To produce the EVM address, Execution applies the standard Ethereum address-from-pubkey transformation to that same identity key:
evm_address = keccak256(uncompressed_pubkey[1:65])[12:32]
So the BIP32 path to the key is Flashnet-specific, but the way the EVM address is extracted from the key is exactly what every Ethereum wallet does. One identity key, one Spark address, one EVM address — they always move together.

Get the EVM address

const execClient = new ExecutionClient(sparkWallet, { gatewayUrl, rpcUrl });
await execClient.authenticate();

const evmAddress = await execClient.getEvmAddress();
console.log(evmAddress); // 0x...
getEvmAccount() returns the underlying viem LocalAccount if you need to sign arbitrary EVM transactions outside the SDK helpers.

Funding

There is no faucet step. The Execution side carries no native gas balance separately from your sats. The sequencer pays the base fee for every intent and bills nothing back. To get assets onto the Execution side, deposit them: see Deposits.

What gets shared

Belongs to the identity keySpark sideExecution side
AddressBech32m (sp1...)EVM (0x...)
CustodySpark MPC + L1 fallbackSparkGateway + native sats balance
AuthFROST / wallet signingChallenge-response on the gateway
Settlementsend_sats / send_tokenEIP-1559 transactions
The two sides agree on signatures: any intent the gateway admits has been signed by the same key the Spark wallet uses. There is no separate “Execution password” or “Execution session” beyond the gateway access token returned by authenticate().

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.