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.
Zero-knowledge compliance, confidential transactions, and C# smart contracts — in a single protocol.
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.
Hybrid compliance engine: Groth16 ZK proofs verified first, on-chain attestation fallback. SchemaRegistry for credential definitions, IssuerRegistry with 4 trust tiers and collateral staking.
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.
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.
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.
Bidirectional bridge to Ethereum and Polygon with multisig relayer and Merkle proof verification. EVM-compatible Keccak-256 addresses by design.
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.
// 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,
}
},
};
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).
Four trust tiers: self-attestation, regulated entity, accredited provider (with BST collateral), and sovereign/eIDAS. Fraudulent issuance triggers automatic slashing.
Every compliance operation generates an immutable event: attestation issuance, revocation, transfer blocks with reason codes, policy changes. 10 event types, all regulatory-queryable.
Four composable privacy mechanisms. Use one, combine them, or opt out entirely. No PII ever touches the ledger.
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.
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.
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.
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.
The only blockchain combining native .NET development, protocol-level ZK compliance, and deterministic finality at enterprise scale.
| Basalt | Ethereum | Solana | Polygon | Hyperledger | |
|---|---|---|---|---|---|
| Type | Public L1 | Public L1 | Public L1 | L2 | Private |
| Language | C# | Solidity | Rust | Solidity | Go / Java |
| TPS | ~12,000 | ~30 | ~4,000 | ~7,000 | ~3,000 |
| Finality | 800ms | 15 min | 13s | 2.3s | Instant |
| ZK Compliance | Native | No | No | No | No |
| ZK Privacy | Groth16 | No | No | ZK Rollups | Channels |
| Developer TAM | 8M | 200K | 200K | 200K | 1M |
| Node Memory | < 2 GB | 8-16 GB | 128+ GB | 16-32 GB | 4-8 GB |
Seven independent layers, production-hardened and tested across 1,737+ unit and integration tests.
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.
StorageMap, StorageValue, StorageList[BasaltSerializable][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; }
}
}Shipped with reference implementations. Build on proven interfaces or extend them with compliance hooks.
Full allowance mechanics, Mint/Burn, compliance hooks. Reference implementation with hex-encoded address keys.
Auto-incrementing token IDs, per-token approval, metadata URI storage. Mint returns the new token ID.
Both fungible and non-fungible tokens in a single contract. Batch transfers, operator approvals, Create + Mint.
On-chain DID registry with did:basalt: format. Verifiable credential attestations, controller transfer, deactivation.
Permissionless credential schema registration. On-chain Groth16 verification keys. SchemaId derived from BLAKE3(name).
4 trust tiers with collateral staking. Slashing for fraud. Sparse Merkle Tree revocation roots published on-chain.
From devnet to global infrastructure.
Everything you need to build on Basalt.