Whitepaper · v1.0 · 2026

SatoshiFi.
Bitcoin without intermediaries.

Decentralized mining pools, federations and confederations for BTC, DOGE, BCH and LTC. FROST threshold signatures, on-chain SPV verification, and CrossCurve integration for native BTC yield.

TechnologyFROST · DKG · SPV
NetworksBTC · DOGE · BCH · LTC
LayerEthereum / EVM
LicenseMIT
Contents
Chapter 01 · Introduction

Introduction and project overview

SatoshiFi is a system of decentralized mining pools and BTC federations built on smart contracts deployed to Ethereum (or compatible EVM networks). The project combines two layers: local mining pools (MiningPoolDAO) governed by a DAO of operators and miners, and global coordination through MultiPoolDAO for each native network (Bitcoin, Dogecoin, Bitcoin Cash, Litecoin).

All critical processes — reward distribution, UTXO verification, signature formation — happen on-chain. No single point of failure, no custodial model in the traditional sense: native BTC remains on federation addresses secured by threshold signatures, while ERC-20 wrappers (mpToken and sToken) circulate freely in DeFi.

What the protocol delivers

Layer · DAO

Decentralization

Each pool is an independent DAO, unified through MultiPoolDAO for global coordination. Governance is enforced through NFT/SBT roles.

Layer · SPV

Transparency

On-chain verification of every UTXO and block header. Reward distribution through open calculators: PPS, FPPS, PPLNS, Score.

Layer · Crypto

Cryptographic guarantees

FROST threshold signatures (Schnorr/BIP340), Distributed Key Generation on-chain, staking and slashing for oracles.

Layer · Multi-chain

Multi-network support

BTC (SimpleSPVContract), Dogecoin (SPVContractDogecoin), BCH, LTC — each network with its own sToken (SBTC, SDOGE, SBCH, SLTC).

Target audience

4
Supported networks
t-of-n
FROST signature threshold
100
Confirmations for maturity
71
Critical tests passing
Chapter 02 · Architecture

System architecture

The system is built as a modular stack of contracts on Ethereum. Each layer addresses a specific concern and exposes an interface to the next. Separating local pool management (MiningPoolDAO) from global coordination (MultiPoolDAO) is the principal architectural decision that allows the system to scale across networks and pools.

Architecture layers

LayerResponsibility
Bitcoin / SPVBlock header validation, coinbase maturity, Merkle inclusion, and pool UTXO registry
PoolBTC reward registration, MP token minting, redemption escrow and refund
MultiPoolMP token aggregation, share token issuance, per-pool balance tracking
FederationDKG, FROST authorization, pool management, governance
ConfederationFederation aggregation plus custodian threshold
FeesWrap/unwrap fee calculation, NFT discounts, fee distribution among participants

Key components

Core

BitcoinHash, BlockHeader, TargetsHelper

Parsing and verification of Bitcoin structures: blocks, headers, target calculations, Merkle proofs.

Factory

MiningPoolFactory, FederationFactory

Single-call deployment of pools, mpToken, sToken, FROST multisigs and MultiPool contracts.

Tokens

PoolMpToken, PoolSToken

ERC-20 tokens with 1:1 backing to the native asset. Access gated by PoolMembershipNFT.

Calculators

PPS · FPPS · PPLNS · Score

Implementations of IDistributionScheme tracked by a single CalculatorRegistry with whitelisting.

Oracles

StratumData Aggregator / Validator

Share-data collection and validation from Stratum providers, with staking and slashing to enforce honest behavior.

FROST

FROSTCoordinator, FROSTVerifier

Coordination of Schnorr/BIP340 threshold signatures. Bootstrapped via cryptographic FROST after DKG.

Data flow: Reward → mpToken → sToken → redemption

  1. Bitcoin reward transaction A miner finds a block; a coinbase transaction is formed in the native network.
  2. SPV maturity + merkle proof SimpleSPVContract verifies block maturity (≥ 100 confirmations) and Merkle inclusion of the transaction.
  3. Pool registers UTXO MiningPoolDAO records the confirmed coinbase UTXO in its internal registry.
  4. Distribute reward The calculator (PPS/FPPS/PPLNS/Score) computes worker shares. PoolMpToken.mint issues mpTokens.
  5. Deposit mpToken to MultiPool The miner calls depositMpToken. SafeERC20 transfers tokens, with an optional wrap fee withheld.
  6. Share token minted sTokens (SBTC/SDOGE/SBCH/SLTC) are minted; the per-pool user balance is updated.
  7. Request withdrawal Withdrawal request: balance check, pending lock creation, operation hash derivation.
  8. FROST approval Threshold signature from federation participants. For confederations, additional custodian threshold is required.
  9. BTC redemption broadcast constructRedemptionTx builds a Bitcoin transaction; an off-chain MPC signer broadcasts it on the native network.
  10. verifyBurnViaSPV Raw txid/source/output checks. Escrow is burned, reserved/spent UTXO accounting updated, request closed.
Chapter 03 · Smart Contracts

Smart contract layer

All contracts are written in Solidity ^0.8.19 using OpenZeppelin libraries (AccessControl, ReentrancyGuard, Pausable, SafeERC20). Below is a summary of the key contracts and their public APIs.

MiningPoolDAO

Local pool management: share intake, SPV block verification, reward distribution through calculators, mpToken issuance, and interaction with MultiPoolDAO for sToken conversion.

Key data structures:

Primary functions:

initialize(address frostAddress, bytes groupPub, uint64 redemptionTimeout, address slashRecv)
setNetwork(uint8 networkId, address spvAddr, address sToken, bool active)
registerPool(bytes32 poolId, uint8 networkId, bytes payoutScript, address operator)
receiveReward(bytes32 poolId, bytes blockHeaderRaw, bytes txRaw, uint32 vout,
              bytes32[] merkleProof, uint8[] directions)
mintSTokenWithProof(bytes32 poolId, bytes blockHeaderRaw, bytes txRaw, uint32 vout,
                    bytes32[] merkleProof, uint8[] directions, uint256 amount, address recipient)
burnAndRedeem(uint8 networkId, uint256 amount, bytes powScript)
withdrawFees(uint8 networkId, address to, uint256 amount)

SimpleSPVContract

Stores block headers, tracks the mainchain by cumulative work, and verifies transaction inclusion through Merkle proofs. It also owns the pool UTXO registry. Admin functions are restricted to spvAdmin; test helpers can be permanently disabled via disableTestHelpers().

function addBlockHeader(bytes calldata rawHeader) public
function disableTestHelpers() external
function setPoolContract(address poolContract) external
function transferSPVAdmin(address newAdmin) external
function isMature(bytes32 blockHash) external view returns (bool)
function isMatureWithDepth(bytes32 blockHash, uint32 confirmationDepth) external view returns (bool)
function checkTxInclusion(bytes32 blockHash, bytes32 txid, bytes32[] calldata siblings, uint256 index)
    external view returns (bool)
function registerPoolUTXO(bytes32 txid, uint32 vout) external
function markPoolUTXOSpent(bytes32 txid, uint32 vout) external

SimpleFROSTMultisig

The authorization adapter for federation and confederation contracts. It operates in two modes: legacy counter mode (for compatibility and tests) and strict cryptographic mode (production). Once cryptographic FROST is bootstrapped, legacy counter approvals are permanently disabled.

function bootstrapCryptographicFROST(
    address verifier,
    bytes calldata groupPubkey,
    string calldata signatureType
) external

function approveOperationWithAggregateSignature(
    bytes32 operationHash,
    address target,
    bytes calldata aggregateSignature
) external

Target-bound operation hash

All privileged operations use target-bound hashes that include the domain, chainid, FROST contract address, target contract, function selector, parameter hash, and nonce.

function hashOperation(
    address target,
    bytes4 selector,
    bytes32 paramsHash,
    uint256 nonce
) external view returns (bytes32)

Target contracts expose helper functions: getAddPoolOperationHash, getSetFeeManagerOperationHash, getProcessWithdrawalOperationHash, and others. Callers should always use these helpers instead of constructing hashes by hand.

Chapter 04 · User Flows

User scenarios

The system supports six primary interaction scenarios for two base roles: miners and pool operators. Additional flows cover oracles and FROST participants.

Scenario 1 — Mining → mpToken

  1. The miner produces a block and receives the coinbase UTXO.
  2. Share data is sent via Stratum to StratumDataAggregator.
  3. The aggregator forwards data to MiningPoolDAO.
  4. SPVContract verifies Merkle proof and block maturity (≥ 100 confirmations).
  5. A calculator from CalculatorRegistry distributes shares across WorkerData/MemberData.
  6. PoolMpToken.mint issues mpToken to recipients.

Scenario 2 — Convert mpToken → sToken

The miner can keep mpToken in an ERC-20 wallet for unrestricted transfer, use them in DeFi, or convert them to sToken via MultiPoolDAO.depositMpToken. Conversion involves a re-verification of the underlying UTXO through SPV and burns the mpToken.

Scenario 3 — Redeem sToken to native assets

  1. The user calls burnAndRedeem(networkId, amount, powScript).
  2. PoolSToken.burnFrom burns the sTokens and moves mpToken into escrow.
  3. An operation hash is built; a FROST session is initiated.
  4. t-of-n federation participants (plus custodian threshold for confederations) approve the operation.
  5. constructRedemptionTx builds a BTC transaction with explicit miner fee and an RBF-compatible sequence.
  6. An off-chain MPC signer broadcasts the transaction on the native network.
  7. verifyBurnViaSPV confirms inclusion; escrow is burned and reserves settled.

Scenario 4 — Pool setup by an operator

The operator calls MiningPoolFactory.createPool and receives a deployed clone of MiningPoolDAO together with a mpToken. The pool is then registered in MultiPoolDAO, a calculator is selected through CalculatorRegistry, and a payout policy is configured.

Scenarios 5–6 — Stratum oracles and FROST

Oracles register with StratumOracleRegistry, receive ORACLE_ROLE, and submit data validated by StratumDataValidator. FROST sessions are created for each redemption operation and finalized with an aggregated Schnorr signature, verified through FROSTVerifier.

Chapter 05 · Tokenomics

Tokenomics and distribution models

Token economics revolve around two token types: mpToken (Mining Pool Token) and sToken (SBTC, SDOGE, SBCH, SLTC). Both are ERC-20 and both are backed 1:1 by their native assets.

mpToken — local pool token

Issued by PoolMpToken for a specific pool. It is a wrapped version of the native asset (1 mpBTC = 1 BTC). It is minted after SPV verification of the coinbase and execution of the calculator. mpToken can be held in any ERC-20 wallet, transferred between addresses, used in DeFi, or burned during conversion to sToken.

sToken — global network token

Issued by MultiPoolDAO after a second UTXO verification. SBTC for BTC, SDOGE for Dogecoin, and so on. Used for redemption to native assets through FROST or for DeFi. Backed by pool reserves (Backing.available).

Reward distribution models

ModelContractKey parameterStrengthTrade-off
PPSPPSCalculatorbaseRateSimplicity, predictabilityDoes not account for fees
FPPSFPPSCalculatorbaseRate, feeBonusIncludes tx feesMore expensive to compute
PPLNSPPLNSCalculatorwindowSizeAnti pool-hoppingLess predictable payouts
ScoreScoreCalculatordecayFactorEncourages loyaltyMore configuration to tune

Economic incentives

· · ·
Chapter 06 · Threshold Cryptography

FROST, DKG, and BIP340

FROST (Flexible Round-Optimized Schnorr Threshold Signatures) is the foundation of the federation's cryptographic guarantees. The private key never exists in whole form: each participant holds a share, and signing requires collecting a threshold (t-of-n) of partial signatures.

Why FROST

Distributed Key Generation (DKG)

DKG in SatoshiFi does not generate secrets on-chain. The DKGCoordinator contract coordinates the protocol: collecting VSS commitments, share hashes, public key shares, and threshold attestations for the final group public key.

  1. VSS commitment hashes — participants publish commitments.
  2. Encrypted share hashes — per-recipient encrypted shares.
  3. Public key shares submission — per-share public keys.
  4. Group public key approval — threshold attestations for the final key.
  5. completeDKG — finalization after secp256k1 validation and even-Y check.
  6. deployFederationWithCryptographicFROST — deployment with immediate bootstrap.
The safe path is finalizeDKG(uint256, bytes calldata groupPubkey) with externally generated group key material. The argumentless finalizeDKG(uint256) is deliberately disabled with an explicit revert because it generated secrets on-chain.

FROSTVerifier — supported formats

Group public key:

Signatures:

Schnorr verification rejects odd-Y group keys and odd-Y R points for the BIP340 path.

Strict cryptographic mode vs. legacy counter

After bootstrapCryptographicFROST or configureCryptographicFROST is called, the counterApprovalsEnabled flag becomes permanently false. All subsequent approvals must go through approveOperationWithAggregateSignature with a real aggregate signature, checked by cryptographicVerifier.verify.

Legacy counter mode remains in the contracts for tests and backward compatibility but is not the production security boundary. Production deployments always use the strict path deployFederationWithCryptographicFROST(...) or deployConfederationWithCryptographicFROST(...).

Chapter 07 · Bitcoin Integration

SPV verification and UTXO handling

Simplified Payment Verification is a deliberate trade-off between completeness and efficiency. SatoshiFi does not run a full Bitcoin node on-chain; instead it verifies transaction inclusion through block headers and Merkle paths.

SimpleSPVContract: what gets verified

Maturity and reorgs

The standard maturity depth is 100 confirmations (Bitcoin coinbase maturity). In production this parameter should be raised above the demo constant. isMatureWithDepth allows the depth to be set explicitly. Chain reorganizations of up to 10 blocks (BTC) are supported; Dogecoin uses a chain-length heuristic due to its high block rate.

Pool UTXO registry

The SPV contract also owns the pool UTXO registry. Pool contracts are registered through setPoolContract (only spvAdmin) and then register their UTXOs via registerPoolUTXO(txid, vout). Test helpers (addBlockWithHash, setBlockMerkleRoot) must be permanently disabled in production through disableTestHelpers().

Reserve accounting in SimpleMiningPoolWithCalculator

Finality per network

NetworkCoinbase maturityStandard tx confirmationsTime to finality
Bitcoin (BTC)100 blocks6 confirmations≈ 1 hour
Bitcoin Cash (BCH)100 blocks6 confirmations≈ 1 hour
Litecoin (LTC)240 blocks6 confirmations≈ 15 min
Dogecoin (DOGE)600 blocks6 confirmations≈ 6 min
Chapter 08 · Federation

Federation and confederation

A federation is a group of participants that jointly hold shares of the BTC address key through DKG. A confederation extends a federation with institutional custodians: critical operations require both a FROST threshold and a custodian threshold.

FederationFactory — deployment

The strict production path deployFederationWithCryptographicFROST(...) atomically deploys and initializes:

ConfederationFactory — adds custodian validator

deployConfederationWithCryptographicFROST(...) additionally deploys CustodianValidator. All MultiPool operations in a confederation require two independent approvals: a FROST threshold for the target-bound operation hash and a custodian threshold for the same hash. The custodian set is managed inside CustodianValidator, not only in a governance wrapper.

MultiPool accounting

SimpleMultiPool and ConfederationMultiPool track per-user and per-MP-token balances:

Withdrawals lock shares in pending accounting first and burn them only when the withdrawal is processed. A user can cancel after WITHDRAWAL_CANCEL_DELAY, and an approved reject path can release pending shares. This model prevents the use of S-tokens from one MP pool to withdraw from another MP pool.

Federation addresses and key rotation

Addresses are generated through DKG in FROSTCoordinator. The public key (xpub) is created on-chain; derivation follows BIP-32 (HD wallets) adapted for P2WSH (BTC, BCH, LTC) or Scrypt-compatible addresses (DOGE). The address list is stored in BridgeInbox and exposed via AddressGenerated events.

Key rotation is initiated by DAO vote or on schedule (≈ 6 months, ≈ 262,800 blocks for BTC). A new DKG runs, old keys are invalidated, and funds are moved to the new address through a multisig transaction. The rotation is confirmed on-chain through SPV.

Proof-of-Reserves

Chapter 09 · Custodians

Custodians, deposits, and slashing

A custodian is a trusted participant from MultiPoolDAO who holds a share of the cryptographic key through FROST and guarantees that every pool member can withdraw their share independently. Misbehavior is punished by slashing the custodian's deposit.

Pure MiningPoolDAO vs. pool with custodian

Mode A · Pure DAO

Without custodian

Redemption requires a collective FROST signature from DAO members (t-of-n). Pro: low fees, full intra-pool decentralization. Con: redemption depends on majority cooperation; refusal to sign can delay payouts.

Mode B · Custodian-backed

With custodian

Each member can initiate a withdrawal of their own share independently. The custodian verifies the request and provides their signature share. Pro: independent withdrawal, slashing as economic guarantee. Con: additional custodian fee.

Slashing-deposit mechanics

The custodian posts a deposit in the network's native currency (ETH, BTC, USDC) or in a dedicated DAO token. The deposit is locked for the entire participation period and slashed on proven violations: signing an invalid request, refusing to sign a valid request, or colluding with other participants.

Fee and slashing formulas

Optional fee tied to deposit size (incentivizes larger deposits):

f = k / (d + c) × r

k — risk constant (e.g., 1e18)
d — custodian deposit
c — minimum offset (e.g., 1e15)
r — total pool reward for the period

Alternative — fixed custodian percentage:

f = p × r

p — agreed percentage (e.g., 0.005 for 0.5%)
r — total pool reward for the period

Slashing on violation:

s = min(p × d, m)

p — slashing percentage (e.g., 0.1 for 10%)
d — custodian deposit
m — cap, to avoid zeroing the deposit entirely
Chapter 10 · Hashrate Rental

Renting out miner shares

In pools backed by a custodian, miners can rent out their share (mpToken or aggregated hashrate). The custodian acts as an arbitrator: it guarantees redemption to the renter, resolves disputes, and bears responsibility through its slashable deposit.

Process steps

  1. Initiation — the lessor calls rentShare(amount, renter, duration, fee), delegating the share and recording the terms.
  2. Payment — the renter transfers the rental fee into an escrow contract.
  3. Delegation — the share is temporarily associated with the renter in StratumDataAggregator.
  4. Monitoring — the custodian tracks the actual delivered hashrate through oracles.
  5. Reward redemption — the renter calls redeemRentalRewards; the custodian verifies and signs.
  6. Disputes — on hashrate shortfall the renter submits a complaint; the custodian checks oracle data and applies slashing if the violation is confirmed.
  7. Completion — at term end the share returns to the lessor.

Rental formulas

Rental fee:

a = p × s × d

p — rental percentage (e.g., 0.05 for 5%)
s — share size in mpToken
d — rental duration in periods

Slashing in dispute:

s = min(v × dep, max_s)

v — violation percentage (e.g., 0.2 for 20%)
dep — violator's deposit
max_s — maximum slashing (cap)

Share rental adds liquidity to the system and turns a stake in a pool into a tradable asset, similar in spirit to decentralized hashrate marketplaces but fully on-chain.

Chapter 11 · Fee System

Fee system: wrap, unwrap, NFT discounts

The fee system handles wrap/deposit and unwrap/withdrawal fees for federation and confederation pools. Every change requires FROST approval, and confederations additionally require a custodian threshold.

Contracts

ContractPurpose
FederationFeeManagerFee configs, fee calculation, NFT discount consumption, authorized fee collectors
FeeDistributionCalculatorEqual or weighted distribution between members and custodians
ProjectWalletRegistryPer-federation project wallets with FROST-gated changes
GlobalProjectWalletRegistryOwner-managed global native-fee distribution
FederationNFTModifierERC721 fee discount NFTs with expiration and volume limits
FeeSystemDeployerSingle-entry deployment of all fee contracts

Fee calculation

Fixed percentage:

fee = amount × fixedBps / 10000

Dynamic:

fee = dynamicMinFee + amount × dynamicCoeffBps / 10000

The current implementation caps the computed fee at amount, so a bad dynamic input cannot underflow pool accounting. Config validation rejects fixedBps > 10000 and dynamicCoeffBps > 10000.

NFT discounts

Two fee APIs are available:

function calculateFeeWithDiscount(
    bool isWrap, uint256 amount, uint256 discountBps
) external view returns (uint256 fee)

function calculateFeeWithNFT(
    bool isWrap, uint256 amount, uint256 nftTokenId, address account
) external returns (uint256 fee)

calculateFeeWithNFT consumes allowance through FederationNFTModifier.useDiscountFor. The NFT contract checks ownership, expiration, remaining volume, and increments usedVolume.

Distribution modes

enum DistributionMode { Equal, ByPercentage }

struct DistributionConfig {
    uint256 memberShareBps;
    uint256 custodianShareBps;
    DistributionMode memberMode;
    DistributionMode custodianMode;
}

Validation requires memberShareBps + custodianShareBps ≤ 10000. Equal mode splits the amount across active recipients; ByPercentage mode uses weights.

Chapter 12 · Security

Security and risks

Security is built on eight independent layers of defense. No single layer is sufficient on its own — an attacker would have to defeat them all simultaneously.

Defense layers

Layer 1

AccessControl

Roles ADMIN_ROLE, POOL_ROLE, ORACLE_ROLE, MINTER_ROLE, BURNER_ROLE. Assigned only during initialize.

Layer 2

ReentrancyGuard

Every function interacting with tokens or reserves is protected by nonReentrant.

Layer 3

Pausable

Emergency stop for receiveReward, mintSToken, burnAndRedeem through ADMIN.

Layer 4

FROST Threshold

No single-party signatures. t-of-n with t > n/2, plus custodian threshold for confederations.

Layer 5

SPV Verification

Maturity check (≥ 100 confirmations), Merkle proof for every UTXO, reorg handling up to 10 blocks.

Layer 6

Backing Reserves

1:1 backing of mpToken/sToken to the native asset. Minting is bounded by Backing.available.

Layer 7

Oracle Staking/Slashing

Oracle deposits are slashed for invalid data. Whitelist enforced through StratumOracleRegistry.

Layer 8

Gas Limits

MIN_GAS_ESTIMATE = 50k, MAX_GAS_ESTIMATE = 5M, MAX_WORKERS = 1000–2000.

Known risks and mitigations

RiskMitigation
Oracle attacks (forged shares)ORACLE_ROLE, multi-validation, reputation, staking/slashing
SPV verification errors≥ 100 confirmations, reorg support, audited libraries, regular audits
FROST share compromiset > n/2, BIP340 validation, redemption timeout, geographic distribution
Reentrancy via DeFiReentrancyGuard, Backing.available check before mint
Calculator errorsDistributionMath, input validation, whitelist in CalculatorRegistry
ADMIN role abuseMultisig (Gnosis Safe), DAO via NFT/SBT, event logging
Chain reorganizationisMature with high depth, reorg up to 10 blocks, oracle monitoring

Production checklist

Current test inventory

web3/test/CriticalTests.t.sol currently contains 71 critical tests. Coverage includes: DKG phases and group key validation, strict FROST aggregate approval, BIP340 verifier vector, federation/confederation deploy guards, SPV admin and test-helper protections, MultiPool per-pool accounting and withdrawal locks, redemption escrow/refund and BTC transaction checks, fee config validation and authorized fee collectors, NFT ownership and project wallet share validation.

Chapter 13 · Integration

BTCyield: SatoshiFi × CrossCurve integration

BTCyield is a product layer on top of SatoshiFi infrastructure, built jointly with CrossCurve. SatoshiFi provides cross-chain wrapping and custodial infrastructure through FROST. CrossCurve runs the yield-routing layer via Yield Basis and Silo Finance.

Two partners, one architecture

Partner · CrossCurve

Ethereum Architecture

Garden Solver manages the cbBTC/sBTC peg.
Curator routes yield across strategies.
Integration with Yield Basis (cyb-tokens) and Silo Finance (lending).
Audited smart contracts (MixBytes).

Partner · SatoshiFi

Cross-chain Infrastructure

Federation Protocol — threshold BTC wrapping.
FROST signatures with DKG ceremony.
sBTC (sToken) — confederation wrapper.
Cross-chain Bitcoin ↔ Ethereum, Custodian DAO and governance.

Three yield streams

Stream 1

Confederation · ~4.5% APY

Risk: minimal. Full BTC control. Create your own confederation. Participants remain owners of their bitcoins. The custodian algorithmically cannot block withdrawal of burned wrappers — their job is solely to defend against key compromise.

Stream 2

Solver & Curator Capital · 7–15% APY

Risk: medium. Rent from the entire system TVL. Wrap BTC into WBTC, cbBTC or tBTC and provide liquidity to Solver (peg management) and Curator (yield routing). You earn against the full system TVL — all confederations + solver + curator.

Stream 3

Custodian DAO · 1/11 of the system

Risk: strategic. Strategic participation. Each of the 11 Custodian DAO seats grants 1/11 of the total revenue from all confederation operations: wrap fees + LP yield + the confederations' share of Curator yield from sBTC pairs.

Yield strategies

StrategyPlatformTarget yield
LP cbBTC/sBTC peg managementDEX + SolverBase layer + fees
cyb-WBTC / cyb-cbBTC vaultsYield Basis5–6% APY
BTC wrapper lendingSilo Finance7–15% APY
yb-token collateral → crvUSDSilo FinanceLeverage
Stablecoin depositSilo Financefrom 6% APY

Custodian DAO: the offer

$300K
Seat price
11
Total seats
$2.5M
Confirmed liquidity
1/11
Share of all operations

Seat composition:

Confirmed liquidity:

Roadmap

  1. Now · Liquidity Provisioning Cicada confirmed $500K. Sourcing additional LPs for Solver and Curator. Building the capital base.
  2. In parallel · Forming the Custodian DAO 3 + 4 + 4 = 11 seats. Full DAO composition.
  3. +2 months · Confederation Launch First confederations after DAO and liquidity are in place. DKG ceremonies. Connecting confederations to Solver and Curator.

Stream comparison

ConfederationSolver CapitalCustodian DAO
BTC controlFullPartial (wrapped)Not required
Target yield~4.5% APY7–15% APY1/11 of system
Risk levelMinimalMediumStrategic
Minimum entry3+ participantsBTC for wrappingSeat purchase
Income typeStable yieldRent from TVLPassive
Best fitBTC holders, family officesExperienced DeFi participantsInstitutional investors
Chapter 14 · FAQ

Frequently asked questions

How do I add a custom reward calculator?
Implement the IDistributionScheme interface, including calculate, calculateForMembers, validateInput, validateMemberInput, getSchemeInfo, and estimateGas. Register the contract in CalculatorRegistry via registerCalculator, providing scheme type, name, version, and gas estimate. Only authorized authors can register; usage requires a whitelist entry through whitelistCalculator.
How does the mpToken → sToken conversion work?
The miner deposits mpToken into the relevant MultiPoolDAO (e.g. MultiPoolDAO_BTC for BTC). The contract re-verifies the associated UTXO through SPVContract or SPVContractDogecoin. After verification it calls PoolSToken.mint to issue sToken (SBTC, SDOGE, SBCH, SLTC).
How many MultiPoolDAOs are there in the system?
One per supported network: BTC, Dogecoin, BCH, LTC. Each manages its own sToken and integrates with the corresponding SPV contract.
What happens if SPV does not verify a transaction?
SPVContract rejects the block and no rewards are distributed. The miner must supply correct data: block header, txRaw, Merkle proof. This is the baseline defense against forged UTXOs and verification attacks.
Is MultiPoolDAO mandatory for local pools?
No. Local pools can operate autonomously, distributing mpToken based on shares and calculators. MultiPoolDAO is only required for converting mpToken to sToken for global liquidity or redemption into native assets.
How do miners gain access to a pool?
Miners receive a PoolMembershipNFT (Soulbound Token) confirming participation. The SBT is issued by MiningPoolDAO and is required for submitting shares and receiving mpToken. Additional roles (admin, validator) are granted via PoolRoleBadgeNFT.
How is asset redemption secured?
Redemption uses threshold signatures through FROSTCoordinator and FROSTVerifier. The user calls burnAndRedeem, burning sToken. FROST produces a Schnorr (BIP340) signature, verified before the native transaction is constructed. Confederations additionally require a custodian threshold.
Can a pool be paused?
Yes. Contracts use OpenZeppelin Pausable. An administrator with DEFAULT_ADMIN_ROLE can pause receiveReward, mintSToken, and burnAndRedeem. In production this role should be transferred to a multisig or DAO.
Which networks are supported?
BTC (SPVContract), Dogecoin (SPVContractDogecoin), BCH, and LTC. Each network has its own MultiPoolDAO and sToken: SBTC, SDOGE, SBCH, SLTC.
How does federation key rotation work?
Rotation is initiated by DAO vote or on schedule (≈ every 6 months, ≈ 262,800 blocks for BTC). A new DKG runs in FROSTCoordinator, old keys are invalidated, and funds are moved through a multisig transaction. The rotation is confirmed on-chain via SPV.
Who pays the on-chain BTC fee during redemption?
The user. The fee is deducted from the redemption amount (BridgeOutbox builds the transaction with an explicit miner fee). A pool may subsidize fees through DAO vote for small transactions. The user can speed up the transaction via RBF, since SIGHASH_ALL | SIGHASH_ANYONECANPAY is used.
Is there an insurance pool?
Planned. A partial reserve is formed from custodian deposits, which are slashed on violations. A portion of pool fees may be routed to a reserve fund (configured in MultiPoolDAO). An additional insurance pool is in development.
What jurisdiction does the federation operate under?
The federation (MultiPoolDAO) is decentralized and not bound to a single jurisdiction. Each pool may select applicable law through DAO vote. sToken may be classified differently across jurisdictions (e-money, security, utility); exact status requires legal counsel at the scaling stage.
Chapter 15 · Glossary

Glossary

mpToken
Local ERC-20 pool token, 1:1 backed by the native asset. Issued by MiningPoolDAO. Freely transferable, redeemable to the native network, or convertible to sToken.
sToken
Global network ERC-20 token (SBTC, SDOGE, SBCH, SLTC). Issued by MultiPoolDAO per network. Provides liquidity and redemption to native assets.
MiningPoolDAO
The local mining-pool contract. Accepts shares, verifies via SPV, distributes rewards through calculators, mints mpToken.
MultiPoolDAO
The global coordination contract for one network (BTC, DOGE, BCH, LTC). Verifies UTXOs, issues sToken, coordinates redemption through FROST.
SPV (Simplified Payment Verification)
Verification mechanism that does not require running a full node. Uses block headers and Merkle paths.
FROST (Flexible Round-Optimized Schnorr Threshold)
Threshold-signature protocol for secp256k1. A t-of-n threshold delivers decentralized signing.
DKG (Distributed Key Generation)
Distributed key generation. Each participant holds a share of the private key; the group public key is formed collectively.
BIP340
Bitcoin Improvement Proposal 340 — the secp256k1 Schnorr-signature standard used in Taproot. Requires even-Y coordinates for public keys and R points.
CalculatorRegistry
Registry of reward calculators (PPS, FPPS, PPLNS, Score). Supports registration, whitelisting, and usage statistics.
PPS / FPPS / PPLNS / Score
Reward distribution models: fixed payment per share (PPS), with tx fees (FPPS), over a window of last N shares (PPLNS), exponential decay (Score).
PoolMembershipNFT
Soulbound token confirming a miner's participation in a pool. Non-transferable.
PoolRoleBadgeNFT
SBT for DAO roles (admin, validator, etc.).
Stratum
Network protocol for transmitting miner share data. Integrated through StratumDataAggregator and StratumDataValidator.
UTXO (Unspent Transaction Output)
Unspent transaction output. Verified via SPV to confirm rewards.
DAO (Decentralized Autonomous Organization)
An organization governed through smart contracts and tokens (mpToken, NFT/SBT).
Federation
A group of participants jointly holding shares of a BTC address key through DKG. A t-of-n threshold gates all operations.
Confederation
A federation plus a custodian layer. Every operation requires both a FROST threshold and a custodian threshold simultaneously.
Custodian
A trusted participant from MultiPoolDAO holding a key share through FROST. Guarantees honesty through a slashable deposit.
Slashing
Confiscation of a participant's deposit (custodian, oracle) for proven violations. Aligns incentives toward honest behavior.
Backing
Reserve struct: totalReceived, reserved, available. sToken issuance is bounded by available.
Operation Hash
Target-bound hash of a privileged operation. Includes domain, chainid, FROST address, target contract, selector, parameter hash, and nonce.
RBF (Replace-By-Fee)
Bitcoin standard for replacing an unconfirmed transaction with one carrying a higher fee. SatoshiFi uses RBF-compatible sequence policy to accelerate redemption.
Proof-of-Reserves (PoR)
Proof that all issued wrapped tokens are backed by native assets on federation addresses. In SatoshiFi this is fully on-chain through BridgeInbox and events.
Chapter 16 · References

References and licenses

Academic and standards references

  1. Nakamoto, S. (2008). Bitcoin: A Peer-to-Peer Electronic Cash System.
  2. Komlo, C., & Goldberg, I. (2020). FROST: Flexible Round-Optimized Schnorr Threshold Signatures.
  3. Feldman, P. (1987). A Practical Scheme for Non-interactive Verifiable Secret Sharing.
  4. BIP-340 — Schnorr Signatures for secp256k1.
  5. BIP-32 — Hierarchical Deterministic Wallets.
  6. SEC2 — Recommended Elliptic Curve Domain Parameters (secp256k1).
  7. EIP-2565 — Modular Exponentiation Precompile Gas Cost.

Technology partners

Auditors and tooling

Licenses

Smart contract code and documentation are distributed under the MIT license (SPDX-License-Identifier: MIT). Dependencies (OpenZeppelin Contracts and the project's own libraries — BlockHeader, BitcoinUtils, MerkleProofLib) are also MIT.

Repository and contacts

— FIN —