.NET 9 Native AOT · ZK Compliance · Testnet Live

Compliance Without Surveillance

A Layer 1 blockchain with native zero-knowledge compliance, confidential transactions, and C# smart contracts. Deterministic finality in 800ms. Built on .NET 9 with Native AOT.

TPS
Deterministic Finality
Block Time
Tests Passing

Built Different

Zero-knowledge compliance, confidential transactions, and C# smart contracts — in a single protocol.

C# Smart Contracts

Write contracts in familiar C# with StorageMap, StorageValue, and StorageList primitives. 8 Roslyn analyzers catch reentrancy, overflows, and non-determinism at compile time. Full xUnit testing and IDE debugging.

ZK Compliance

Hybrid compliance engine: Groth16 ZK proofs verified first, on-chain attestation fallback. SchemaRegistry for credential definitions, IssuerRegistry with 4 trust tiers and collateral staking.

Confidential Transactions

Pedersen commitments on BLS12-381 hide amounts while proving balance validity. Groth16 range proofs in 192 bytes. Private X25519 channels with AES-256-GCM encryption.

800ms Finality

BasaltBFT consensus with pipelined 3-phase commit and BLS12-381 signature aggregation. Stake-weighted leader selection. Automatic slashing: 100% for double-signing, 5% for inactivity.

Proven Cryptography

BLAKE3 hashing at 3-4 GB/s. Ed25519 signatures with batch verification. BLS12-381 for consensus aggregation and ZK proofs. Sparse Merkle Trees for credential revocation.

EVM Bridge

Bidirectional bridge to Ethereum and Polygon with multisig relayer and Merkle proof verification. EVM-compatible Keccak-256 addresses by design.

Zero-Knowledge Compliance

Transactions carry ephemeral Groth16 ZK proofs. Validators verify compliance in constant time. Nothing is stored on-chain. If no proof is attached, the engine falls back to on-chain attestation checks.

Dual-Path Verification

Path 1 — ZK Proofs (Default)
Users complete KYC once with any approved issuer. Their credential lives in their wallet. Each transaction generates a zero-knowledge proof: “I hold a valid credential from a trusted issuer that satisfies this policy.” Verified and discarded.
Path 2 — Attestations (Fallback)
For institutions that prefer public compliance status: 7-step pipeline checking KYC level, sanctions, geographic restrictions, holding limits, lock-up periods, and Travel Rule data.

Each ZK proof demonstrates:

  • Sender holds a valid credential matching the required schema
  • Credential issued by a sufficiently-trusted issuer (tier ≥ required)
  • Credential has not expired (checked against block timestamp)
  • Credential has not been revoked (Sparse Merkle Tree non-membership)
ComplianceProof.cs
// ZK compliance proof attached to transaction
var tx = new Transaction
{
    Type = TransactionType.Transfer,
    Sender = senderAddr,
    To = recipientAddr,
    Value = new UInt256(50_000),
    ComplianceProofs = new[]
    {
        new ComplianceProof
        {
            SchemaId = kycSchemaId,
            Proof = groth16ProofBytes,   // 192 bytes
            PublicInputs = publicInputs,
            Nullifier = nullifier,
        }
    },
};

SchemaRegistry

System Contract

Permissionless on-chain registry of credential schemas. Anyone can define what can be proved. Each schema stores its Groth16 verification key on-chain. SchemaId = BLAKE3(name).

IssuerRegistry

Collateral Staking

Four trust tiers: self-attestation, regulated entity, accredited provider (with BST collateral), and sovereign/eIDAS. Fraudulent issuance triggers automatic slashing.

Audit Trail

Immutable Log

Every compliance operation generates an immutable event: attestation issuance, revocation, transfer blocks with reason codes, policy changes. 10 event types, all regulatory-queryable.

Privacy by Design

Four composable privacy mechanisms. Use one, combine them, or opt out entirely. No PII ever touches the ledger.

Confidential Transfers

Pedersen commitments on BLS12-381 G1 hide transaction amounts while proving balance validity. Groth16 range proofs prevent wraparound in 192-byte proofs, verified on-chain in ~5ms.

C = v*G + r*H | 192-byte proofs | ~5ms verification

Private Channels

Bilateral off-chain communication channels with X25519 ECDH key exchange, HKDF-SHA256 key derivation, and AES-256-GCM authenticated encryption. Ed25519 signed messages with monotonic nonce construction.

X25519 + AES-256-GCM | Ed25519 signed | Deterministic channel IDs

Selective Disclosure

Viewing keys allow auditors to decrypt specific transaction amounts via ephemeral X25519 ECDH without on-chain visibility. Disclosure proofs reveal Pedersen commitment openings to authorized parties only.

Ephemeral keys | Forward-secure | Revocable

Credential Revocation

Sparse Merkle Tree (depth 256, BLAKE3 hashing) with compact lazy storage. ZK proofs include non-membership verification — proving a credential has NOT been revoked without revealing which one.

SMT depth 256 | Membership + non-membership proofs | BLAKE3

How Basalt Compares

The only blockchain combining native .NET development, protocol-level ZK compliance, and deterministic finality at enterprise scale.

BasaltEthereumSolanaPolygonHyperledger
TypePublic L1Public L1Public L1L2Private
LanguageC#SolidityRustSolidityGo / Java
TPS~12,000~30~4,000~7,000~3,000
Finality800ms15 min13s2.3sInstant
ZK ComplianceNativeNoNoNoNo
ZK PrivacyGroth16NoNoZK RollupsChannels
Developer TAM8M200K200K200K1M
Node Memory< 2 GB8-16 GB128+ GB16-32 GB4-8 GB

Technology Stack

Seven independent layers, production-hardened and tested across 1,737+ unit and integration tests.

Cryptography
BLAKE3Ed25519BLS12-381Keccak-256Groth16
Consensus
BasaltBFTPipeliningBLS AggregationSlashingView Change
Execution
BasaltVMC# AOTSandboxGas MeteringCompliance Hooks
Storage
Merkle Patricia TrieRocksDBSparse Merkle TreePruning
Network
TCP TransportKademlia DHTEpisub GossipPeer Reputation
Compliance
ZkComplianceVerifierSchemaRegistryIssuerRegistryAudit Trail
Confidentiality
Pedersen CommitmentsGroth16 ProofsPrivate ChannelsViewing Keys

Write Contracts in C#

No new language to learn. Idiomatic C# with the types, tooling, and IDE support you already know. The SDK ships as a standalone NuGet package with zero dependencies on the node.

  • Strong typing with StorageMap, StorageValue, StorageList
  • 8 compile-time Roslyn analyzers (BST001–BST008)
  • Cross-contract calls with reentrancy protection (max depth 8)
  • In-process testing with xUnit and full Visual Studio / Rider debugging
  • Auto-generated binary and JSON codecs via [BasaltSerializable]
TokenContract.cs
[BasaltContract]
public class TokenContract
{
    private readonly StorageMap<byte[], ulong> _balances = new("balances");
    private readonly StorageValue<ulong> _totalSupply = new("totalSupply");

    [BasaltConstructor]
    public void Initialize(string name, ulong initialSupply)
    {
        _totalSupply.Set(initialSupply);
        _balances.Set(Context.Caller, initialSupply);
        Context.Emit(new TransferEvent { From = null, To = Context.Caller, Amount = initialSupply });
    }

    [BasaltEntrypoint]
    public void Transfer(byte[] to, ulong amount)
    {
        var sender = Context.Caller;
        var balance = _balances.Get(sender);
        Context.Require(balance >= amount, "Insufficient balance");

        _balances.Set(sender, balance - amount);
        _balances.Set(to, _balances.Get(to) + amount);
        Context.Emit(new TransferEvent { From = sender, To = to, Amount = amount });
    }

    [BasaltView]
    public ulong BalanceOf(byte[] account) => _balances.Get(account);

    [BasaltEvent]
    public class TransferEvent
    {
        [Indexed] public byte[] From { get; set; }
        [Indexed] public byte[] To { get; set; }
        public ulong Amount { get; set; }
    }
}

Token Standards

Shipped with reference implementations. Build on proven interfaces or extend them with compliance hooks.

BST-20ERC-20
Fungible Token

Full allowance mechanics, Mint/Burn, compliance hooks. Reference implementation with hex-encoded address keys.

BST-721ERC-721
Non-Fungible Token

Auto-incrementing token IDs, per-token approval, metadata URI storage. Mint returns the new token ID.

BST-1155ERC-1155
Multi-Token

Both fungible and non-fungible tokens in a single contract. Batch transfers, operator approvals, Create + Mint.

BST-DIDW3C DID
Decentralized Identity

On-chain DID registry with did:basalt: format. Verifiable credential attestations, controller transfer, deactivation.

SchemaRegistryNovel
ZK Credential Schemas

Permissionless credential schema registration. On-chain Groth16 verification keys. SchemaId derived from BLAKE3(name).

IssuerRegistryNovel
Credential Issuers

4 trust tiers with collateral staking. Slashing for fraud. Sparse Merkle Tree revocation roots published on-chain.

Roadmap

From devnet to global infrastructure.

Phase 1Complete

Foundation

  • Core node implementation (P2P, BasaltBFT, storage)
  • BasaltVM with C# AOT and sandboxed execution
  • Smart Contract SDK with Roslyn analyzers
  • ZK compliance engine (SchemaRegistry, IssuerRegistry)
  • Confidential transactions (Pedersen, Groth16, private channels)
  • 4-validator devnet in Docker, 1,737+ tests passing
Phase 2In Progress

Testnet

  • Public testnet with 50+ community validators
  • Contract SDK v1.0 (all BST-* standards)
  • EVM bridge testnet (Ethereum Sepolia)
  • Developer grants program
  • First external security audit
Phase 3

Mainnet Genesis

  • Mainnet launch with 100 genesis validators
  • BST Token Generation Event
  • Full MiCA / GDPR / Travel Rule compliance
  • EVM bridge mainnet (Ethereum, Polygon)
  • Second security audit + bug bounty program
Phase 4

Ecosystem

  • Enterprise subnets (permissioned validator sets)
  • ZK confidential transactions in production
  • IBC protocol for Cosmos interoperability
  • Enterprise ERP connectors (SAP, Salesforce)
  • Full DAO governance transition

Ecosystem

Everything you need to build on Basalt.