Crypto.Net.Solana 1.2.0

dotnet add package Crypto.Net.Solana --version 1.2.0
                    
NuGet\Install-Package Crypto.Net.Solana -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.Solana" 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.Solana" Version="1.2.0" />
                    
Directory.Packages.props
<PackageReference Include="Crypto.Net.Solana" />
                    
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.Solana --version 1.2.0
                    
#r "nuget: Crypto.Net.Solana, 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.Solana@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.Solana&version=1.2.0
                    
Install as a Cake Addin
#tool nuget:?package=Crypto.Net.Solana&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 (2)

Showing the top 2 NuGet packages that depend on Crypto.Net.Solana:

Package Downloads
Crypto.Net.Extensions

Dependency injection for Crypto.Net: AddCryptoNet() with keyed multi-chain clients, IHttpClientFactory and optional resilience (retry, circuit breaker, timeouts).

Crypto.Net.Ledger

Ledger hardware wallet support for Crypto.Net: APDU protocol, USB HID and Speculos (TCP) transports, the Ethereum app (addresses, transactions, personal messages, EIP-712) and the Solana app (addresses, transactions, off-chain messages). Keys never leave the device.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.2.0 123 10/12/2026
1.1.0 94 10/12/2026
1.0.0 126 10/4/2026