Portal Community

appsettings.json

The node reads its cluster connections from a Solana section in application settings:

"Solana": {
  "DefaultCluster": "mainnet-beta",
  "Clusters": {
    "mainnet-beta": { "RpcUrl": "https://api.mainnet-beta.solana.com", "Commitment": "confirmed" },
    "devnet":       { "RpcUrl": "https://api.devnet.solana.com", "Commitment": "confirmed" }
  }
}
Key Type Required Description
DefaultCluster text ✓ Yes Cluster used when an operation doesn't set its own cluster field. Defaults to mainnet-beta in code if the whole Solana section is absent.
Clusters object No Map of cluster name → RPC connection config. See Clusters — well-known names (mainnet-beta, devnet, testnet) resolve to public endpoints even without an explicit entry here.

Per-Cluster Fields

Each entry under Solana:Clusters is a SolanaClusterConfig:

FieldTypeRequiredDescription
RpcUrltextExactly one of RpcUrl / RpcUrlCredentialIDPlain JSON-RPC URL, used verbatim with no vault lookup. Use for public or self-hosted endpoints.
RpcUrlCredentialIDintegerExactly one of the twoID of a SERVICE_URL-type vault credential whose Service URL field holds the full RPC URL. Use for paid providers (Helius, QuickNode, Triton) whose endpoint embeds an API key.
CommitmenttextNo — defaults to confirmedprocessed | confirmed | finalized. Any unrecognized value also falls back to confirmed.
Missing cluster: If an operation requests a cluster value that has no entry under Solana:Clusters and isn't one of the three well-known names (mainnet-beta, devnet, testnet), the node throws a SolanaClusterNotConfiguredException. See Troubleshooting.

Per-Operation cluster Field

Every operation accepts an optional cluster config key. When omitted, it falls back to Solana:DefaultCluster:

Field Type Required Description
cluster select No Cluster name, e.g. mainnet-beta, devnet, testnet, or any custom name added under Solana:Clusters. Defaults to Solana:DefaultCluster when unset.

Registration

SolanaDependency.RegisterDefaults(services) registers everything the node needs:

Host apps must also add an explicit registration call: registering SolanaDependency in DI is not by itself sufficient — the executor assembly must also be force-loaded via an explicit new SolanaDependency().RegisterDefaults(services); line in BizFirst.Ai.Platform.Web.Server.Core/DependencyInjection/Ai/ServiceCollectionExtensionsForAI.cs, alongside the sibling Ethereum/Binance/IPFS/HashiCorp Blockchain-area registrations. Without this line the node type won't appear in the workflow designer even though the package is referenced.

Project Layout

The node ships as three .NET projects (plus a test project not part of the runtime package):

Project Responsibility
BizFirst.Integration.Solana.Domain Sealed result records, cluster options, and the validator-summary type. Zero external dependencies.
BizFirst.Integration.Solana.Services Solnet-backed RPC client, connection caching/vault resolution, rate-limit retry handler, and one service per resource.
BizFirst.Ai.ExecutionNodes.Blockchain.Solana The executor: routing, config parsing, credential resolution, output shaping — one feature partial per operation.