Nethereum.GnosisSafe
5.8.0
Prefix Reserved
dotnet add package Nethereum.GnosisSafe --version 5.8.0
NuGet\Install-Package Nethereum.GnosisSafe -Version 5.8.0
<PackageReference Include="Nethereum.GnosisSafe" Version="5.8.0" />
<PackageVersion Include="Nethereum.GnosisSafe" Version="5.8.0" />
<PackageReference Include="Nethereum.GnosisSafe" />
paket add Nethereum.GnosisSafe --version 5.8.0
#r "nuget: Nethereum.GnosisSafe, 5.8.0"
#:package Nethereum.GnosisSafe@5.8.0
#addin nuget:?package=Nethereum.GnosisSafe&version=5.8.0
#tool nuget:?package=Nethereum.GnosisSafe&version=5.8.0
Nethereum.GnosisSafe
Nethereum service for interacting with Gnosis Safe (now Safe) multisig wallet contracts. Provides EIP-712 typed transaction signing, multi-signature transaction building, and seamless integration with any Nethereum contract service through custom account and contract handler implementations.
Installation
dotnet add package Nethereum.GnosisSafe
Core Components
GnosisSafeService
Main service for interacting with Gnosis Safe contracts (GnosisSafeService.cs:13-738).
Contract Functions:
- Owner Management: AddOwnerWithThresholdRequestAsync, RemoveOwnerRequestAsync, SwapOwnerRequestAsync, GetOwnersQueryAsync, IsOwnerQueryAsync
- Threshold Management: ChangeThresholdRequestAsync, GetThresholdQueryAsync
- Module Management: EnableModuleRequestAsync, DisableModuleRequestAsync, IsModuleEnabledQueryAsync, GetModulesPaginatedQueryAsync
- Transaction Execution: ExecTransactionRequestAsync, ExecTransactionFromModuleRequestAsync
- Configuration: SetGuardRequestAsync, SetFallbackHandlerRequestAsync
- Queries: NonceQueryAsync, GetChainIdQueryAsync, DomainSeparatorQueryAsync, VersionQueryAsync
Transaction Building:
// GnosisSafeService.cs:31-39
public async Task<ExecTransactionFunction> BuildTransactionAsync(
EncodeTransactionDataFunction transactionData,
BigInteger chainId,
bool estimateSafeTxGas = false, params string[] privateKeySigners)
{
var nonce = await NonceQueryAsync().ConfigureAwait(false);
transactionData.SafeNonce = nonce;
return BuildTransaction(transactionData, chainId, privateKeySigners);
}
Multi-Signature Transaction Building:
// GnosisSafeService.cs:63-82
public async Task<ExecTransactionFunction> BuildMultiSignatureTransactionAsync<TFunctionMessage>(
EncodeTransactionDataFunction transactionData,
TFunctionMessage functionMessage,
BigInteger chainId,
bool estimateSafeTxGas = false, params string[] privateKeySigners)
where TFunctionMessage : FunctionMessage, new()
{
var nonce = await NonceQueryAsync().ConfigureAwait(false);
if (estimateSafeTxGas)
{
var toContract = transactionData.To;
var estimateHandler = Web3.Eth.GetContractTransactionHandler<TFunctionMessage>();
functionMessage.FromAddress = this.ContractHandler.ContractAddress;
var gasEstimateSafe = await estimateHandler.EstimateGasAsync(toContract, functionMessage);
transactionData.SafeTxGas = gasEstimateSafe;
}
transactionData.Data = functionMessage.GetCallData();
transactionData.SafeNonce = nonce;
return BuildTransaction(transactionData, chainId, privateKeySigners);
}
MultiSend Support:
// GnosisSafeService.cs:41-50
public Task<ExecTransactionFunction> BuildMultiSendTransactionAsync(
EncodeTransactionDataFunction transactionData,
BigInteger chainId,
string privateKeySigner,
bool estimateSafeTxGas = false, params IMultiSendInput[] multiSendInputs)
{
transactionData.Operation = (int)ContractOperationType.DelegateCall;
var multiSendFunction = new MultiSendFunction(multiSendInputs);
return BuildMultiSignatureTransactionAsync(transactionData, multiSendFunction, chainId,
estimateSafeTxGas, privateKeySigner);
}
EIP-712 Typed Data Signing
Type Definition Creation:
// GnosisSafeService.cs:147-159
public static TypedData<GnosisSafeEIP712Domain> GetGnosisSafeTypedDefinition(
BigInteger chainId, string verifyingContractAddress)
{
return new TypedData<GnosisSafeEIP712Domain>
{
Domain = new GnosisSafeEIP712Domain
{
ChainId = chainId,
VerifyingContract = verifyingContractAddress
},
Types = MemberDescriptionFactory.GetTypesMemberDescription(
typeof(GnosisSafeEIP712Domain), typeof(EncodeTransactionDataFunction)),
PrimaryType = "SafeTx",
};
}
Transaction Hash Computation:
// GnosisSafeService.cs:181-186
public static byte[] GetEncodedTransactionDataHash(
EncodeTransactionDataFunction transactionData,
BigInteger chainId,
string verifyingContractAddress)
{
var typedDefinition = GetGnosisSafeTypedDefinition(chainId, verifyingContractAddress);
return Eip712TypedDataEncoder.Current.EncodeAndHashTypedData(transactionData, typedDefinition);
}
Safe Hashes Computation:
// GnosisSafeService.cs:132-145
public static SafeHashes GetSafeHashes(
EncodeTransactionDataFunction transactionData,
BigInteger chainId,
string verifyingContractAddress)
{
var typedDefinition = GetGnosisSafeTypedDefinition(chainId, verifyingContractAddress);
var safeDomainHash = Eip712TypedDataEncoder.Current.HashDomainSeparator(typedDefinition);
var safeMessageHash = Eip712TypedDataEncoder.Current.HashStruct(
transactionData, typedDefinition.PrimaryType, typeof(EncodeTransactionDataFunction));
var safeTxnHash = Eip712TypedDataEncoder.Current.EncodeAndHashTypedData(
transactionData, typedDefinition);
return new SafeHashes
{
SafeDomainHash = safeDomainHash,
SafeMessageHash = safeMessageHash,
SafeTxnHash = safeTxnHash
};
}
Multi-Signature Signing:
// GnosisSafeService.cs:198-213
public List<SafeSignature> SignMultipleEncodedTransactionDataHash(
byte[] hashEncoded, params string[] privateKeySigners)
{
var messageSigner = new EthereumMessageSigner();
var signatures = new List<SafeSignature>();
foreach (var privateKey in privateKeySigners)
{
var publicAddress = EthECKey.GetPublicAddress(privateKey);
var signatureString = messageSigner.Sign(hashEncoded, privateKey);
signatureString = ConvertSignatureStringToGnosisVFormat(signatureString);
signatures.Add(new SafeSignature()
{
Address = publicAddress,
Signature = signatureString
});
}
return signatures;
}
Gnosis V Format Conversion:
Gnosis Safe requires signature V values to be offset by +4 from standard Ethereum V values.
// GnosisSafeService.cs:215-225
public static string ConvertSignatureStringToGnosisVFormat(string signatureString)
{
var signature = MessageSigner.ExtractEcdsaSignature(signatureString);
var v = signature.V.ToBigIntegerFromRLPDecoded();
if (VRecoveryAndChainCalculations.IsEthereumV((int)v))
{
signature.V = new[] { (byte)(v + 4) };
signatureString = signature.CreateStringSignature();
}
return signatureString;
}
Signature Ordering:
Gnosis Safe requires signatures to be ordered by signer address.
// GnosisSafeService.cs:258-268
public byte[] GetCombinedSignaturesInOrder(IEnumerable<SafeSignature> signatures)
{
var signaturesFormatted = signatures.Select(
x => ConvertSignatureStringToGnosisVFormat(x.Signature)).ToList();
var orderedSignatures = signaturesFormatted.OrderBy(x => x.ToLower());
var fullSignatures = "0x";
foreach (var signature in orderedSignatures)
{
fullSignatures += signature.RemoveHexPrefix();
}
return fullSignatures.HexToByteArray();
}
SafeExecTransactionContractHandler
Custom ContractHandler that wraps any contract service to execute transactions through a Gnosis Safe (SafeExecTransactionContractHandler.cs:28-124).
Creation:
// SafeExecTransactionContractHandler.cs:30-36
public static SafeExecTransactionContractHandler CreateFromExistingContractService<T>(
T service, string safeAddress, params string[] privateKeySigners)
where T:ContractWeb3ServiceBase
{
var contractAddress = service.ContractAddress;
var ethApiContractService = service.Web3;
var handler = new SafeExecTransactionContractHandler(
contractAddress, safeAddress, ethApiContractService,
service.ContractHandler.AddressFrom, privateKeySigners);
return handler;
}
Transaction Wrapping:
All SendRequestAsync and SendRequestAndWaitForReceiptAsync calls are automatically wrapped in Safe execTransaction calls.
// SafeExecTransactionContractHandler.cs:67-75
public override async Task<TransactionReceipt> SendRequestAndWaitForReceiptAsync<TEthereumContractFunctionMessage>(
TEthereumContractFunctionMessage transactionMessage = null,
CancellationTokenSource tokenSource = null)
{
if (transactionMessage == null) transactionMessage = new TEthereumContractFunctionMessage();
var execTransactionFunction = await CreateExecTransactionFunction(transactionMessage);
return await SafeService.ExecTransactionRequestAndWaitForReceiptAsync(execTransactionFunction);
}
Extension Method:
// SafeExecTransactionContractHandler.cs:21-25
public static void ChangeContractHandlerToSafeExecTransaction<T>(
this T service, string safeAddress, params string[] privateKeySigners)
where T : ContractWeb3ServiceBase
{
service.ContractHandler = SafeExecTransactionContractHandler
.CreateFromExistingContractService(service, safeAddress, privateKeySigners);
}
SafeAccount
Account implementation that automatically configures contract services to use SafeExecTransactionContractHandler (SafeAccount.cs:7-21).
// SafeAccount.cs:7-20
public class SafeAccount : Nethereum.Web3.Accounts.Account, IContractServiceConfigurableAccount
{
public SafeAccount(string safeAddress, BigInteger chainId, string privateKey)
: base(privateKey, chainId)
{
SafeAddress = safeAddress;
}
public string SafeAddress { get; }
public void ConfigureContractHandler<T>(T contractService)
where T : ContractWeb3ServiceBase
{
contractService.ChangeContractHandlerToSafeExecTransaction(SafeAddress, this.PrivateKey);
}
}
Contract Definitions
EncodeTransactionDataFunction (ExtendedContractDefinition.cs:14-118)
EIP-712 SafeTx struct representing a Gnosis Safe transaction:
[Function("encodeTransactionData", "bytes")]
[Struct("SafeTx")]
public class EncodeTransactionDataFunctionBase : FunctionMessage
{
[Parameter("address", "to", 1)]
public string To { get; set; }
[Parameter("uint256", "value", 2)]
public BigInteger Value { get; set; }
[Parameter("bytes", "data", 3)]
public byte[] Data { get; set; }
[Parameter("uint8", "operation", 4)]
public byte Operation { get; set; }
[Parameter("uint256", "safeTxGas", 5)]
public BigInteger SafeTxGas { get; set; }
[Parameter("uint256", "baseGas", 6)]
public BigInteger BaseGas { get; set; }
[Parameter("uint256", "gasPrice", 7)]
public BigInteger SafeGasPrice { get; set; }
[Parameter("address", "gasToken", 8)]
public string GasToken { get; set; }
[Parameter("address", "refundReceiver", 9)]
public string RefundReceiver { get; set; }
[Parameter("uint256", "nonce", 10)]
public BigInteger SafeNonce { get; set; }
}
ExecTransactionFunction (GnosisSafeDefinition.cs:95-120)
Function for executing Safe transactions with signatures:
[Function("execTransaction", "bool")]
public class ExecTransactionFunctionBase : FunctionMessage
{
[Parameter("address", "to", 1)]
public virtual string To { get; set; }
[Parameter("uint256", "value", 2)]
public virtual BigInteger Value { get; set; }
[Parameter("bytes", "data", 3)]
public virtual byte[] Data { get; set; }
[Parameter("uint8", "operation", 4)]
public virtual byte Operation { get; set; }
[Parameter("uint256", "safeTxGas", 5)]
public virtual BigInteger SafeTxGas { get; set; }
[Parameter("uint256", "baseGas", 6)]
public virtual BigInteger BaseGas { get; set; }
[Parameter("uint256", "gasPrice", 7)]
public virtual BigInteger SafeGasPrice { get; set; }
[Parameter("address", "gasToken", 8)]
public virtual string GasToken { get; set; }
[Parameter("address", "refundReceiver", 9)]
public virtual string RefundReceiver { get; set; }
[Parameter("bytes", "signatures", 10)]
public virtual byte[] Signatures { get; set; }
}
GnosisSafeEIP712Domain (GnosisSafeEIP712Domain.cs:7-16)
Custom EIP-712 domain for Safe transactions:
[Struct("EIP712Domain")]
public class GnosisSafeEIP712Domain : IDomain
{
[Parameter("uint256", "chainId", 1)]
public virtual BigInteger? ChainId { get; set; }
[Parameter("address", "verifyingContract", 2)]
public virtual string VerifyingContract { get; set; }
}
Usage Examples
Basic Safe Transaction
using Nethereum.Web3;
using Nethereum.GnosisSafe;
using Nethereum.GnosisSafe.ContractDefinition;
var web3 = new Web3("https://mainnet.infura.io/v3/YOUR_INFURA_KEY");
var safeAddress = "0x..."; // Your Safe address
var chainId = 1;
var safeService = new GnosisSafeService(web3, safeAddress);
// Build transaction
var transactionData = new EncodeTransactionDataFunction
{
To = "0x...", // Target contract
Value = 0,
Data = new byte[] { }, // Encoded function call
Operation = 0, // 0 = Call, 1 = DelegateCall
SafeTxGas = 0,
BaseGas = 0,
SafeGasPrice = 0,
GasToken = "0x0000000000000000000000000000000000000000",
RefundReceiver = "0x0000000000000000000000000000000000000000"
};
// Sign with multiple owners
var privateKey1 = "0x...";
var privateKey2 = "0x...";
var execTx = await safeService.BuildTransactionAsync(
transactionData, chainId, false, privateKey1, privateKey2);
// Execute
var receipt = await safeService.ExecTransactionRequestAndWaitForReceiptAsync(execTx);
Using SafeAccount with Contract Service
using Nethereum.Web3;
using Nethereum.GnosisSafe;
using Nethereum.Contracts;
var privateKey = "0x...";
var safeAddress = "0x...";
var chainId = 1;
// Create SafeAccount
var safeAccount = new SafeAccount(safeAddress, chainId, privateKey);
var web3 = new Web3(safeAccount, "https://mainnet.infura.io/v3/YOUR_INFURA_KEY");
// Any contract service will automatically use Safe execution
var erc20Address = "0x...";
var erc20Service = new Nethereum.Contracts.Standards.ERC20.ERC20ContractService(
web3.Eth, erc20Address);
// This transfer will be executed through the Safe
var transferReceipt = await erc20Service.TransferRequestAndWaitForReceiptAsync(
"0x...", // to
1000000 // amount
);
Manual SafeExecTransactionContractHandler
using Nethereum.Web3;
using Nethereum.GnosisSafe;
using Nethereum.Contracts.Standards.ERC20;
var web3 = new Web3("https://mainnet.infura.io/v3/YOUR_INFURA_KEY");
var safeAddress = "0x...";
var contractAddress = "0x...";
var erc20Service = new ERC20ContractService(web3.Eth, contractAddress);
// Change to Safe execution
var privateKeys = new[] { "0x...", "0x..." };
erc20Service.ChangeContractHandlerToSafeExecTransaction(safeAddress, privateKeys);
// All transactions now go through Safe
var receipt = await erc20Service.TransferRequestAndWaitForReceiptAsync("0x...", 1000);
MultiSend Transaction
using Nethereum.GnosisSafe;
using Nethereum.Contracts.TransactionHandlers.MultiSend;
var safeService = new GnosisSafeService(web3, safeAddress);
// Create multiple transactions
var multiSendInputs = new List<IMultiSendInput>
{
new MultiSendInput
{
Operation = MultiSendOperationType.Call,
To = "0x...",
Value = 0,
Data = new byte[] { } // Encoded function call
},
new MultiSendInput
{
Operation = MultiSendOperationType.Call,
To = "0x...",
Value = 0,
Data = new byte[] { } // Another encoded function call
}
};
var transactionData = new EncodeTransactionDataFunction
{
To = "0x...", // MultiSend contract address
Value = 0,
SafeTxGas = 0,
BaseGas = 0,
SafeGasPrice = 0,
GasToken = "0x0000000000000000000000000000000000000000",
RefundReceiver = "0x0000000000000000000000000000000000000000"
};
var execTx = await safeService.BuildMultiSendTransactionAsync(
transactionData, chainId, privateKey, false, multiSendInputs.ToArray());
var receipt = await safeService.ExecTransactionRequestAndWaitForReceiptAsync(execTx);
Signing Transaction Data for Off-Chain Coordination
using Nethereum.GnosisSafe;
var safeService = new GnosisSafeService(web3, safeAddress);
var transactionData = new EncodeTransactionDataFunction
{
To = "0x...",
Value = 0,
Data = new byte[] { },
Operation = 0,
SafeTxGas = 0,
BaseGas = 0,
SafeGasPrice = 0,
GasToken = "0x0000000000000000000000000000000000000000",
RefundReceiver = "0x0000000000000000000000000000000000000000",
SafeNonce = await safeService.NonceQueryAsync()
};
// Sign with current account's private key (EIP-712)
var signature = await safeService.SignEncodedTransactionDataAsync(
transactionData, chainId, convertToSafeVFormat: true);
// Share signature with other owners for off-chain coordination
Console.WriteLine($"Signature: {signature}");
Computing Transaction Hashes
using Nethereum.GnosisSafe;
var transactionData = new EncodeTransactionDataFunction
{
To = "0x...",
Value = 0,
Data = new byte[] { },
Operation = 0,
SafeTxGas = 0,
BaseGas = 0,
SafeGasPrice = 0,
GasToken = "0x0000000000000000000000000000000000000000",
RefundReceiver = "0x0000000000000000000000000000000000000000",
SafeNonce = 5
};
// Get all Safe-related hashes
var safeHashes = GnosisSafeService.GetSafeHashes(
transactionData, chainId, safeAddress);
Console.WriteLine($"Domain Hash: {safeHashes.SafeDomainHash.ToHex()}");
Console.WriteLine($"Message Hash: {safeHashes.SafeMessageHash.ToHex()}");
Console.WriteLine($"Transaction Hash: {safeHashes.SafeTxnHash.ToHex()}");
Owner Management
var safeService = new GnosisSafeService(web3, safeAddress);
// Get current owners
var owners = await safeService.GetOwnersQueryAsync();
var threshold = await safeService.GetThresholdQueryAsync();
Console.WriteLine($"Safe has {owners.Count} owners with threshold {threshold}");
// Add owner (requires Safe transaction execution)
var newOwner = "0x...";
var newThreshold = threshold + 1;
// This call must be executed through the Safe itself
var addOwnerTx = new AddOwnerWithThresholdFunction
{
Owner = newOwner,
Threshold = newThreshold
};
Module Management
var safeService = new GnosisSafeService(web3, safeAddress);
// Check if module is enabled
var moduleAddress = "0x...";
var isEnabled = await safeService.IsModuleEnabledQueryAsync(moduleAddress);
// Get all modules
var modules = await safeService.GetModulesPaginatedQueryAsync(
"0x0000000000000000000000000000000000000001", // Start
10 // Page size
);
Key Concepts
Multi-Signature Workflow
- Transaction Creation: Define transaction parameters (to, value, data, operation, gas parameters)
- Nonce Assignment: Safe nonce is automatically fetched and assigned
- EIP-712 Hash: Transaction data is hashed according to EIP-712 standard
- Signature Collection: Each owner signs the hash with their private key
- Signature Ordering: Signatures must be ordered by signer address (ascending)
- V Value Conversion: V values are offset by +4 for Gnosis Safe compatibility
- Execution: execTransaction is called with combined ordered signatures
Signature Format
Gnosis Safe uses a custom V value format:
- Ethereum standard: v = 27 or 28
- Gnosis Safe format: v = 31 or 32 (standard + 4)
The ConvertSignatureStringToGnosisVFormat method (GnosisSafeService.cs:215-225) handles this conversion automatically.
Operation Types
- 0 (Call): Standard external call
- 1 (DelegateCall): Delegate call (executes in Safe's context, used for MultiSend)
Gas Parameters
Safe transactions support advanced gas configuration:
- safeTxGas: Gas allocated for the Safe transaction
- baseGas: Gas costs independent of the transaction execution
- gasPrice: Gas price used for refund calculation
- gasToken: Token address for gas payment (address(0) for ETH)
- refundReceiver: Address receiving gas payment
Dependencies
- Nethereum.Web3: Core Web3 functionality
- Nethereum.Signer.EIP712: EIP-712 typed structured data signing
Platform Support
Supports all Nethereum target frameworks. Async methods require .NET Framework 4.5+, .NET Standard 1.1+, or .NET Core 1.0+.
References
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. 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. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net451 is compatible. net452 was computed. net46 was computed. net461 is compatible. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.5.1
- Nethereum.Signer.EIP712 (>= 5.8.0)
- Nethereum.Web3 (>= 5.8.0)
- Newtonsoft.Json (>= 11.0.2 && < 14.0.0)
-
.NETFramework 4.6.1
- Nethereum.Signer.EIP712 (>= 5.8.0)
- Nethereum.Web3 (>= 5.8.0)
- Newtonsoft.Json (>= 11.0.2 && < 14.0.0)
-
.NETStandard 2.0
- Nethereum.Signer.EIP712 (>= 5.8.0)
- Nethereum.Web3 (>= 5.8.0)
- NETStandard.Library (>= 2.0.3)
- Newtonsoft.Json (>= 11.0.2 && < 14.0.0)
-
net6.0
- Nethereum.Signer.EIP712 (>= 5.8.0)
- Nethereum.Web3 (>= 5.8.0)
- Newtonsoft.Json (>= 11.0.2 && < 14.0.0)
-
net8.0
- Nethereum.Signer.EIP712 (>= 5.8.0)
- Nethereum.Web3 (>= 5.8.0)
- Newtonsoft.Json (>= 11.0.2 && < 14.0.0)
-
net9.0
- Nethereum.Signer.EIP712 (>= 5.8.0)
- Nethereum.Web3 (>= 5.8.0)
- Newtonsoft.Json (>= 11.0.2 && < 14.0.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Nethereum.GnosisSafe:
| Package | Downloads |
|---|---|
|
Nethereum.Wallet
Core wallet services for managing accounts, vaults, and configuration across the Nethereum stack. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 5.8.0 | 203 | 1/6/2026 |
| 5.0.0 | 1,570 | 5/28/2025 |
| 4.29.0 | 361 | 2/10/2025 |
| 4.28.0 | 210 | 1/7/2025 |
| 4.27.1 | 209 | 12/24/2024 |
| 4.27.0 | 212 | 12/24/2024 |
| 4.26.0 | 241 | 10/1/2024 |
| 4.25.0 | 229 | 9/19/2024 |
| 4.21.4 | 220 | 8/9/2024 |
| 4.21.3 | 268 | 7/22/2024 |
| 4.21.2 | 245 | 6/26/2024 |
| 4.21.1 | 242 | 6/26/2024 |
| 4.21.0 | 228 | 6/18/2024 |
| 4.20.0 | 254 | 3/28/2024 |
| 4.19.0 | 240 | 2/16/2024 |
| 4.18.0 | 387 | 11/21/2023 |
| 4.17.1 | 884 | 9/28/2023 |
| 4.17.0 | 204 | 9/27/2023 |
| 4.16.0 | 254 | 8/14/2023 |
| 4.15.2 | 244 | 7/11/2023 |
| 4.15.1 | 245 | 7/11/2023 |
| 4.15.0 | 246 | 7/11/2023 |
| 4.14.0 | 447 | 3/19/2023 |
| 4.13.0 | 388 | 2/18/2023 |
| 4.12.0 | 456 | 12/9/2022 |
| 4.11.0 | 492 | 10/27/2022 |
| 4.9.0 | 573 | 9/27/2022 |
| 4.8.0 | 1,547 | 8/24/2022 |
| 4.7.0 | 661 | 7/20/2022 |
| 4.6.1 | 614 | 6/18/2022 |
| 4.6.0 | 586 | 6/16/2022 |
| 4.5.0 | 751 | 5/13/2022 |
| 4.4.1 | 649 | 4/27/2022 |
| 4.4.0 | 606 | 4/27/2022 |
| 4.3.0 | 656 | 4/12/2022 |
| 4.2.0 | 675 | 2/18/2022 |