Crypto.Net.Core 1.2.0

dotnet add package Crypto.Net.Core --version 1.2.0
                    
NuGet\Install-Package Crypto.Net.Core -Version 1.2.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Crypto.Net.Core" Version="1.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Crypto.Net.Core" Version="1.2.0" />
                    
Directory.Packages.props
<PackageReference Include="Crypto.Net.Core" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Crypto.Net.Core --version 1.2.0
                    
#r "nuget: Crypto.Net.Core, 1.2.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Crypto.Net.Core@1.2.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Crypto.Net.Core&version=1.2.0
                    
Install as a Cake Addin
#tool nuget:?package=Crypto.Net.Core&version=1.2.0
                    
Install as a Cake Tool

<p align="center"> <img src="assets/icon.png" width="112" alt="Crypto.Net icon"> </p>

<h1 align="center">Crypto.Net</h1>

<p align="center"> <strong>Multi-chain cryptography and blockchain clients for .NET 10, powered by a Rust core.</strong><br> Bitcoin · Ethereum & EVM · Solana · Polkadot · Cosmos · NEAR · Aptos · Sui · TON · Cardano </p>

<p align="center"> <a href="README.id.md">Bahasa Indonesia</a> · <a href="docs/en/index.md">Documentation</a> · <a href="docs/id/index.md">Dokumentasi</a> · <a href="PLAN.md">Roadmap</a> </p>

<p align="center"> <a href="https://github.com/DotNetVibeCoderz/Vibe_Crypto/actions/workflows/cryptonet-ci.yml"><img alt="CI" src="https://github.com/DotNetVibeCoderz/Vibe_Crypto/actions/workflows/cryptonet-ci.yml/badge.svg"></a> <img alt=".NET 10" src="https://img.shields.io/badge/.NET-10-512BD4"> <img alt="Rust" src="https://img.shields.io/badge/core-Rust-B7410E"> <img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-0f8a63"> <img alt="Tests" src="https://img.shields.io/badge/tests-95%20.NET%20%2B%2030%20Rust-0f8a63"> </p>

<p align="center"><em>Built by Gravicode Studios, led by Kang Fadhil.</em></p>

<p align="center"> <img src="docs/assets/screenshots/gallery-wallet.png" alt="Crypto.Net Gallery: one recovery phrase deriving Ethereum, Bitcoin, Solana, Polkadot and Cosmos accounts" width="900"> </p>


What it is

Crypto.Net gives .NET applications one consistent API for keys, addresses, signing, transactions and RPC across five blockchain families. The heavy cryptography lives in a small Rust library built on the RustCrypto, dalek and schnorrkel crates (cryptonet) called through a C ABI; every primitive also has a pure C# implementation that produces byte-identical output, so the library keeps working on platforms where the native binary is absent.

  • Correct by construction. Verified against published test vectors: BIP-32/39/84/86, BIP-143, BIP-340, SLIP-10, RFC 6979/7914/8032, EIP-55/155/191/712, Web3 Secret Storage, and Substrate's //Alice. The same mnemonic yields the same addresses as MetaMask, Phantom, Polkadot.js and Keplr.
  • Fast. ECDSA, Schnorr and Ed25519 run 15–100× faster than managed code (see benchmarks).
  • Safe by default. Secrets live in pinned, zeroized SecureBuffers; RFC 6979 low-S signatures; transfers are simulated before signing; the Gallery never broadcasts.
  • Pragmatic. Async, DI-friendly (AddCryptoNet), IHttpClientFactory + resilience, AOT-compatible native layer.

Packages

Package What it contains
Crypto.Net.Native Rust core + managed fallback: SHA-2, Keccak, BLAKE2b, RIPEMD-160, secp256k1 ECDSA/Schnorr/Taproot, Ed25519, sr25519, BIP-32, SLIP-10, PBKDF2, scrypt, Base58, Bech32/Bech32m
Crypto.Net.Core Amount (exact), Address, TxHash, ISigner, IChainClient, JSON-RPC transport, receipt polling
Crypto.Net.Wallet BIP-39 mnemonics, BIP-32/SLIP-10 HD keys, xprv/xpub/zpub, Web3 v3 keystores, KeySigner
Crypto.Net.Evm EIP-55, Legacy/EIP-2930/EIP-1559 transactions, ABI codec, EIP-191/712, ERC-20, JSON-RPC client, ERC-721/1155, ENS, ERC-4337
Crypto.Net.Bitcoin P2PKH/P2SH/P2WPKH/P2WSH/P2TR, Taproot script trees, legacy/BIP-143/BIP-341 signing, PSBT (BIP-174/370), multisig, coin selection, Esplora
Crypto.Net.Solana Legacy and v0 transactions, address lookup tables, System/SPL Token/ATA/Compute Budget/Memo, PDAs, Phantom & solana-cli keys, RPC, Token-2022 extensions, Borsh/Anchor
Crypto.Net.Polkadot SS58, sr25519/ed25519 Substrate derivation, SCALE, runtime-metadata-driven extrinsics, event and storage decoding, RPC, metadata-driven SCALE encoder, staking & nomination pools
Crypto.Net.Cosmos Bech32 accounts, protobuf SIGN_MODE_DIRECT (bank, staking, distribution), REST client, CosmWasm and CW20
Crypto.Net.Extensions AddCryptoNet() keyed clients, resilience, ChainCatalog, dRPC provider, benchmark runner
Crypto.Net.Generators Source generator: Solidity ABI / Hardhat & Foundry artifacts and Anchor IDLs → typed clients (also cnet gen)
Crypto.Net.Ledger Ledger hardware wallets: USB HID / Speculos transports, Ethereum app (addresses, transactions, messages, EIP-712), Solana app (transactions, off-chain messages)
Crypto.Net.WalletConnect WalletConnect v2 (Reown): pair with mobile wallets, sessions, EIP-155 requests; also the wallet side
Crypto.Net.Trezor Trezor hardware wallets: Bridge and emulator transports, Ethereum (addresses, legacy/EIP-1559 transactions, messages, EIP-712 hashes)
Crypto.Net.Near NEAR Protocol: ed25519 accounts (implicit and named), Borsh transactions with every action, function calls, RPC
Crypto.Net.Aptos Aptos: AIP-40 addresses, Move type tags, BCS entry-function transactions, simulation, REST client
Crypto.Net.Sui Sui: programmable transactions (BCS build and parse), intent signing, personal messages, GraphQL client with gas selection
Crypto.Net.Ton TON: cells and BoC, TON mnemonics, wallets V4R2 and W5, comments, jettons, TON Center client
Crypto.Net.Cardano Cardano: CIP-1852 BIP32-Ed25519 accounts, Conway transactions with native assets and CIP-20, exact fees, Koios client
Crypto.Net.Indexer EVM log indexer with ABI event decoding, block crawler, checkpoints, hosted services
Crypto.Net.Indexer.EntityFrameworkCore EF Core storage (SQLite, PostgreSQL, SQL Server) for checkpoints, logs and ERC-20 transfers
Crypto.Net.Testing MockHttpMessageHandler and official test vectors
Crypto.Net.Analyzers Roslyn rules CNET001–005: hard-coded keys, secrets in strings, float amounts, mainnet in Debug, dropped cancellation tokens
Crypto.Net.Cli The cnet dotnet tool
Crypto.Net.Templates dotnet new templates: cnet-console, cnet-worker, cnet-webapi, cnet-lib, cnet-test, cnet-contract-client
dotnet add package Crypto.Net.Extensions   # pulls in every chain
dotnet tool install -g Crypto.Net.Cli      # the cnet command
dotnet new install Crypto.Net.Templates    # dotnet new cnet-console | cnet-worker | cnet-webapi | cnet-lib | cnet-test | cnet-contract-client

Quick start

using Crypto.Net.Wallet;
using Crypto.Net.Evm;
using Crypto.Net.Bitcoin;
using Crypto.Net.Solana;
using Crypto.Net.Polkadot;
using Crypto.Net.Cosmos;

using var wallet = HdWallet.Generate(wordCount: 12);           // back up wallet.RevealMnemonic()

using var eth  = wallet.GetEvmAccount(0, EvmChain.Sepolia);    // m/44'/60'/0'/0/0
using var btc  = wallet.GetBitcoinAccount(BitcoinAddressType.TaprootP2TR, 0, BitcoinNetwork.Testnet);
using var sol  = wallet.GetSolanaAccount(0, SolanaChain.Devnet);
using var dot  = wallet.GetPolkadotAccount("", PolkadotChain.Westend);   // sr25519, Polkadot.js-compatible
using var atom = wallet.GetCosmosAccount(0, CosmosChain.CosmosHubTestnet);

Send on each chain (testnets shown):

await using var evm = new EvmRpcClient(EvmChain.Sepolia);
await using var signer = eth.CreateSigner();
TxHash h1 = await evm.TransferAsync(signer, "0x…", Amount.FromEther(0.01m));   // nonce, EIP-1559 fees, gas, simulation
var receipt = await evm.WaitForReceiptAsync(h1);

await using var esplora = new EsploraClient(BitcoinNetwork.Testnet);
TxHash h2 = await esplora.TransferAsync(btc, "tb1q…", amountSats: 25_000);       // UTXOs, coin selection, Schnorr signing

await using var solana = new SolanaRpcClient(SolanaChain.Devnet);
TxHash h3 = await solana.TransferAsync(sol, "9xQe…", Amount.FromSol(0.1m));

await using var westend = new PolkadotRpcClient(PolkadotChain.Westend);
TxHash h4 = await westend.TransferAsync(dot, "5Grw…", Amount.Parse("0.5", 12));  // pallet/call indices from live metadata

await using var cosmos = new CosmosRestClient(CosmosChain.CosmosHubTestnet);
TxHash h5 = await cosmos.TransferAsync(atom, "cosmos1…", Amount.FromAtom(0.2m));

With dependency injection:

builder.Services.AddCryptoNet(c => c
    .AddEvm("eth", o => o.Network = EvmChain.Sepolia)
    .AddSolana("sol", o => o.Cluster = SolanaChain.Devnet)
    .AddBitcoin("btc")
    .WithResilience());

var eth = app.Services.GetRequiredKeyedService<EvmRpcClient>("eth");

Keyed RPC providers (Ankr, dRPC)

Public endpoints are rate-limited. Add API keys and EVM, Solana and Substrate clients use them first, failing over to the next provider, then to the public node, whenever a provider refuses a network or rate-limits (requests that were executed are never retried elsewhere):

builder.Services.AddCryptoNet(c => c
    .UseAnkr(builder.Configuration["Ankr:ApiKey"]!)
    .UseDrpc(builder.Configuration["Drpc:ApiKey"]!)
    .AddEvm("eth", o => o.Network = EvmChain.Ethereum));

The CLI, the Gallery and ChainCatalog read CRYPTONET_ANKR_KEY and CRYPTONET_DRPC_KEY (optionally narrowed with CRYPTONET_ANKR_NETWORKS=ethereum,polygon). dRPC keys travel in a header; Ankr keys are part of the URL, so Crypto.Net disables HTTP logging for keyed clients. Keep keys in user-secrets or environment variables, never in source control.

Notebooks

Ten interactive .NET notebooks — wallets, Bitcoin, Ethereum/EVM, Solana, Polkadot, Cosmos, NEAR/Aptos/Sui/TON/Cardano, indexing, benchmarks and security — in English and Bahasa Indonesia: samples/notebooks. Open them in VS Code with Polyglot Notebooks.

VS Code

Crypto.Net Tools (crypto-net-tools.vsix on each release): networks view, wallet/balance/address commands, contract client generation, unit and address hovers, EIP-55 typo warnings, snippets and local nodes. See docs/en/vscode.md.

The cnet command line

cnet doctor                              # native library, ABI, RID, RPC provider
cnet wallet new --words 24               # phrase + addresses on every chain
cnet address validate <address>          # detects the chain, checks checksums
cnet convert 1.5 ether gwei              # exact unit conversion
cnet balance <address> -N sepolia        # live balance through the built-in clients
cnet sign message "hello" -m "<phrase>"  # EIP-191; `sign typed-data` for EIP-712
cnet keystore encrypt -k <hex>           # Web3 v3 keystore (geth / MetaMask)
cnet bench                               # Rust vs managed on this machine

<p align="center"><img src="docs/assets/screenshots/cli-wallet.png" alt="cnet wallet derive output" width="900"></p>

An interactive studio (ASP.NET Core) for every feature: wallet derivation with a guilloché "fingerprint" of the seed, address inspection, exact unit conversion, five signature schemes, keystores, live network heads and a Rust-vs-managed benchmark — each with the C# that produces it. English and Bahasa Indonesia, light and dark themes, testnet by default.

dotnet run --project samples/Crypto.Net.Gallery           # web, http://localhost:5080
dotnet run --project samples/Crypto.Net.Gallery.Desktop   # native window (Windows, macOS, Linux)
dotnet publish samples/Crypto.Net.Gallery.Wasm -c Release # static WebAssembly site / PWA
Sign and verify Live networks
Benchmark Dark theme

Performance

cnet bench on a Windows x64 laptop (operations per second, higher is better):

Operation Rust core Managed C# Speed-up
Keccak-256 (256 B) 752,495 20,150 37×
BLAKE2b-256 (256 B) 2,370,230 82,408 29×
secp256k1 public key 14,864 297 50×
ECDSA sign (RFC 6979) 7,171 303 24×
ECDSA verify 7,611 217 35×
Schnorr sign (BIP-340) 3,813 254 15×
Ed25519 sign 20,629 234 88×
Ed25519 verify 21,127 200 106×
SHA-256 (256 B) 541,470 510,103 1.1×

SHA-2, HMAC and PBKDF2 are already hardware-accelerated by the OS crypto stack, so the default Auto backend uses the platform for those and Rust for everything else. Force either engine with CryptoNative.UseBackend(...) or CRYPTONET_BACKEND=native|managed.

Architecture

 Apps:        cnet CLI · Gallery (ASP.NET Core) · your code
 DI:          Crypto.Net.Extensions   AddCryptoNet() · ChainCatalog · dRPC · resilience
 Chains:      .Evm  .Bitcoin  .Solana  .Polkadot  .Cosmos  .Near  .Aptos  .Sui  .Ton  .Cardano
 Wallet/Core: .Wallet (BIP-39/32, SLIP-10, keystore)  ·  .Core (Amount, ISigner, IChainClient, JSON-RPC)
 Native:      Crypto.Net.Native  → CryptoNative (Auto | Native | Managed) → P/Invoke or managed fallback
 ─────────────────────────── C ABI (cn_*, i32 status codes, catch_unwind) ───────────────────────────
 Rust:        cryptonet-ffi → cryptonet-crypto (k256, ed25519-dalek, schnorrkel, scrypt…) · cryptonet-codec

Details: docs/en/architecture.md.

Build from source

Requirements: .NET 10 SDK, Rust (stable) for the native library. CI builds native binaries for Windows, Linux and macOS (x64 and arm64); releases are published from a CryptoNet-v* tag.

./scripts/build-native.ps1          # cargo test + release build, copies to runtimes/<rid>/native
dotnet test tests/Crypto.Net.Tests  # 95 tests (3 live-network tests run with CRYPTONET_LIVE_TESTS=1)
./scripts/pack.ps1                  # NuGet packages in ./artifacts

Security

Crypto.Net has not had an external audit yet. Use testnets while you evaluate it, never commit mnemonics or private keys, and read docs/en/security.md. Report vulnerabilities privately as described in SECURITY.md.

License

MIT © 2026 Gravicode Studios. Built by Gravicode Studios, led by Kang Fadhil.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (13)

Showing the top 5 NuGet packages that depend on Crypto.Net.Core:

Package Downloads
Crypto.Net.Wallet

HD Wallet (BIP39, BIP32, BIP44, SLIP-10), encrypted keystore, and key management for Crypto.Net

Crypto.Net.Evm

Ethereum & EVM network adapter for Crypto.Net (EIP-1559, ABI, ERC-20, JSON-RPC)

Crypto.Net.Solana

Solana network adapter for Crypto.Net (Ed25519, Base58, SystemProgram, Solana RPC)

Crypto.Net.Polkadot

Polkadot & Substrate network adapter for Crypto.Net (SS58, Extrinsics, RPC)

Crypto.Net.Bitcoin

Bitcoin network adapter for Crypto.Net (SegWit, Taproot, UTXO, Esplora RPC)

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.2.0 239 10/12/2026
1.1.0 162 10/12/2026
1.0.0 185 10/4/2026