Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions concepts/wallets.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@ See below for specific address formats that you can currently derive on Turnkey:
| TON | ADDRESS_FORMAT_TON_V4R2 | CURVE_ED25519 | m/44'/607'/0'/0/0 |
| XRP | ADDRESS_FORMAT_XRP | CURVE_SECP256K1 | m/44'/144'/0'/0/0 |
| FLARE | ADDRESS_FORMAT_ETHEREUM | CURVE_SECP256K1 | m/44'/60'/0'/0/0 |
| Spark | ADDRESS_FORMAT_SPARK_MAINNET | CURVE_SECP256K1 | m/8797555'/0'/0' |
| Spark | ADDRESS_FORMAT_SPARK_REGTEST | CURVE_SECP256K1 | m/8797555'/0'/0' |

#### Where can I learn more?

Expand Down
1 change: 1 addition & 0 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,7 @@
]
},
"networks/bitcoin",
"networks/spark",
"networks/hyperliquid",
"networks/cosmos",
"networks/tron",
Expand Down
69 changes: 69 additions & 0 deletions networks/spark.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
---
title: "Spark support on Turnkey"
sidebarTitle: "Spark"
---

[Spark](https://www.spark.money/) is a Bitcoin Layer 2 network that uses an identity key system for on-chain addressing. Turnkey supports Spark address derivation and signing via plain [BIP-340 Schnorr](https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki) signatures.

The supported address formats are:

| Network | Address Format | HRP |
| -------- | -------------------------------- | --------- |
| Mainnet | `ADDRESS_FORMAT_SPARK_MAINNET` | `spark` |
| Regtest | `ADDRESS_FORMAT_SPARK_REGTEST` | `sparkrt` |

### BIP-32 derivation path

Spark uses a unique BIP-32 purpose number (`8797555`) rather than the standard BIP-44 coin type system. The default derivation path for the identity key is:

```
m/8797555'/{account}'/0'
```

When creating a wallet account via the Turnkey dashboard or API, select `ADDRESS_FORMAT_SPARK_MAINNET` or `ADDRESS_FORMAT_SPARK_REGTEST` and the path will be set automatically.

<Note>
Only `secp256k1` keys are supported for Spark. Attempting to use an ed25519 key will result in an error.
</Note>

## Schnorr signing

Spark transactions are signed using **plain BIP-340 Schnorr** — specifically, without the Taproot key tweak described [here](/bitcoin#schnorr-signatures-and-tweaks) that Bitcoin P2TR addresses require. This is an important distinction: passing a Spark address as the `signWith` parameter to `SIGN_RAW_PAYLOAD` triggers plain Schnorr signing, while passing a Bitcoin Taproot (P2TR) address triggers tweaked Schnorr signing per [BIP-341](https://github.com/bitcoin/bips/blob/master/bip-0341.mediawiki).

Use the [`SIGN_RAW_PAYLOAD`](/api-reference/activities/sign-raw-payload) or [`SIGN_RAW_PAYLOAD_V2`](/api-reference/activities/sign-raw-payload) activity to sign Spark payloads. The `hashFunction` field should match how the payload was prepared (e.g. `HASH_FUNCTION_NO_OP` if you are passing a pre-hashed payload).

The returned signature will always have `V = "00"` since Schnorr signatures do not use a recovery ID.

### Signing scheme selection

Turnkey automatically selects the correct signing scheme based on the address format associated with your key:

| Address type | Signing scheme |
| ------------------- | ---------------------- |
| Bitcoin P2TR | Tweaked Schnorr (BIP-341) |
| Spark Mainnet/Regtest | Plain Schnorr (BIP-340) |
| All others | ECDSA |

## Networks supported

- **Spark Mainnet** — `ADDRESS_FORMAT_SPARK_MAINNET`
- **Spark Regtest** — `ADDRESS_FORMAT_SPARK_REGTEST`

## Key features

- **secp256k1 signing**: Turnkey fully supports the secp256k1 curve used by Spark
- **Plain BIP-340 Schnorr**: Distinct from the tweaked Schnorr used for Bitcoin Taproot — no key tweak is applied
- **Bech32m addressing**: Spark identity key addresses are Bech32m-encoded canonical protobuf payloads
- **Spark-specific BIP-32 purpose**: Derivation path uses purpose `8797555` per the Spark protocol spec

## SDK Example

- [`examples/with-spark-schnorr`](https://github.com/tkhq/sdk/tree/main/examples/with-spark-schnorr): demonstrates wallet initialization, SO authentication and token minting + sending on Spark using Turnkey!

## Additional resources

- [Spark addressing specification](https://docs.spark.money/wallets/addressing)
- [Spark CLI reference](https://docs.spark.money/tools/cli)
- [BIP-340: Schnorr Signatures for secp256k1](https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki)

If you're building on Spark and have questions about integrating with Turnkey, contact us at [hello@turnkey.com](mailto:hello@turnkey.com), on [X](https://x.com/turnkeyhq/), or [on Slack](https://join.slack.com/t/clubturnkey/shared_invite/zt-3aemp2g38-zIh4V~3vNpbX5PsSmkKxcQ).
9 changes: 9 additions & 0 deletions snippets/shared/networks-links.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,15 @@
>
Bitcoin
</Card>
<Card
title="Spark"
icon="file-lines"
iconType="solid"
horizontal
href="/networks/spark"
>
Spark
</Card>
<Card
title="Hyperliquid"
icon="file-lines"
Expand Down