![]() |
VOOZH | about |
dotnet add package Nethereum.ABI --version 6.1.0
NuGet\Install-Package Nethereum.ABI -Version 6.1.0
<PackageReference Include="Nethereum.ABI" Version="6.1.0" />
<PackageVersion Include="Nethereum.ABI" Version="6.1.0" />Directory.Packages.props
<PackageReference Include="Nethereum.ABI" />Project file
paket add Nethereum.ABI --version 6.1.0
#r "nuget: Nethereum.ABI, 6.1.0"
#:package Nethereum.ABI@6.1.0
#addin nuget:?package=Nethereum.ABI&version=6.1.0Install as a Cake Addin
#tool nuget:?package=Nethereum.ABI&version=6.1.0Install as a Cake Tool
Encoding and decoding of ABI Types, functions, events of Ethereum contracts
Nethereum.ABI is the core package for Ethereum's Application Binary Interface (ABI) encoding and decoding in .NET. It provides comprehensive support for encoding function calls, decoding function outputs, processing event logs, EIP-712 typed data signing, and handling all Solidity data types including complex structures like tuples and dynamic arrays.
This package is fundamental to all smart contract interactions in Nethereum, as it translates between .NET objects and the binary format Ethereum uses for contract communication.
dotnet add package Nethereum.ABI
Nethereum:
The ABI is a JSON specification that describes:
Function calls are encoded as:
Events are stored in transaction logs with:
Structured data hashing and signing standard that enables:
Nethereum.ABI supports all Solidity types:
uint256, int256, address, bool, bytes, bytesN, stringuint256[20], address[5]uint256[], string[]using Nethereum.ABI.FunctionEncoding;
using Nethereum.ABI.Model;
// Create encoder
var functionCallEncoder = new FunctionCallEncoder();
// Define function signature and parameters
var sha3Signature = "c6888fa1"; // First 8 hex chars of Keccak-256("functionName(paramTypes)")
var parameters = new[]
{
new Parameter("address", "recipient"),
new Parameter("uint256", "amount")
};
// Encode function call
string encoded = functionCallEncoder.EncodeRequest(
sha3Signature,
parameters,
"0x1234567890abcdef1234567890abcdef12345678", // recipient
1000000000000000000 // amount (1 ETH in wei)
);
// Result: "0xc6888fa10000000000000000000000001234567890abcdef1234567890abcdef12345678000000000000000000000000000000000000000000000000001e4c89d6c7e400"
// From test: FunctionEncodingTests.cs
var functionCallDecoder = new FunctionCallDecoder();
var outputParameters = new[]
{
new ParameterOutput()
{
Parameter = new Parameter("uint[]", "numbers")
{
DecodedType = typeof(List<int>)
}
}
};
var result = functionCallDecoder.DecodeOutput(
"0x0000000000000000000000000000000000000000000000000000000000000020" +
"0000000000000000000000000000000000000000000000000000000000000003" +
"0000000000000000000000000000000000000000000000000000000000000000" +
"0000000000000000000000000000000000000000000000000000000000000001" +
"0000000000000000000000000000000000000000000000000000000000000002",
outputParameters
);
var numbers = (List<int>)result[0].Result;
// numbers: [0, 1, 2]
From test: FunctionEncodingTests.cs:125
using Nethereum.ABI.FunctionEncoding;
using Nethereum.ABI.Model;
var functionCallEncoder = new FunctionCallEncoder();
var sha3Signature = "c6888fa1";
var inputsParameters = new[]
{
new Parameter("string", "greeting"),
new Parameter("uint[20]", "numbers"),
new Parameter("string", "farewell")
};
var array = new uint[20];
for (uint i = 0; i < 20; i++)
array[i] = i + 234567;
string encoded = functionCallEncoder.EncodeRequest(
sha3Signature,
inputsParameters,
"hello", // Dynamic string (pointer to data)
array, // Fixed-size array (inline)
"world" // Dynamic string (pointer to data)
);
// Result starts with function selector, followed by:
// - Pointer to "hello" data
// - 20 uint256 values inline
// - Pointer to "world" data
// - Actual "hello" string data
// - Actual "world" string data
From test: FunctionAttributeEncodingTests.cs:55
using Nethereum.ABI.FunctionEncoding;
using Nethereum.ABI.FunctionEncoding.Attributes;
[Function("multiply")]
public class MultiplyFunction : FunctionMessage
{
[Parameter("uint256", "a", 1)]
public int A { get; set; }
}
var input = new MultiplyFunction { A = 69 };
var encoder = new FunctionCallEncoder();
string encoded = encoder.EncodeRequest(input, "c6888fa1");
// Result: "0xc6888fa10000000000000000000000000000000000000000000000000000000000000045"
// 69 decimal = 0x45 hex, padded to 32 bytes
From test: EventTopicDecoderTests.cs:13
using Nethereum.ABI.FunctionEncoding;
using Nethereum.ABI.FunctionEncoding.Attributes;
using System.Numerics;
[Event("Transfer")]
public class TransferEvent
{
[Parameter("address", "_from", 1, indexed: true)]
public string From { get; set; }
[Parameter("address", "_to", 2, indexed: true)]
public string To { get; set; }
[Parameter("uint256", "_value", 3, indexed: true)]
public BigInteger Value { get; set; }
}
var topics = new[]
{
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", // Event signature
"0x0000000000000000000000000000000000000000000000000000000000000000", // from (zero address)
"0x000000000000000000000000c14934679e71ef4d18b6ae927fe2b953c7fd9b91", // to
"0x0000000000000000000000000000000000000000000000400000402000000001" // value
};
var data = "0x"; // No non-indexed data
var transferEvent = new TransferEvent();
new EventTopicDecoder().DecodeTopics(transferEvent, topics, data);
// transferEvent.From: "0x0000000000000000000000000000000000000000"
// transferEvent.To: "0xc14934679e71ef4d18b6ae927fe2b953c7fd9b91"
// transferEvent.Value: 1180591691223594434561
From test: AbiEncodeTests.cs:12
using Nethereum.ABI;
using Nethereum.Hex.HexConvertors.Extensions;
var abiEncode = new ABIEncode();
// Encode multiple values with explicit types
byte[] encoded = abiEncode.GetABIEncoded(
new ABIValue("string", "hello"),
new ABIValue("int", 69),
new ABIValue("string", "world")
);
string hexResult = encoded.ToHex(true);
// Result: "0x0000000000000000000000000000000000000000000000000000000000000060..."
// Includes pointers to dynamic data and the actual string data
From test: AbiEncodeTests.cs:34
using Nethereum.ABI;
using Nethereum.ABI.FunctionEncoding.Attributes;
public class TestParamsInput
{
[Parameter("string", 1)]
public string First { get; set; }
[Parameter("int256", 2)]
public int Second { get; set; }
[Parameter("string", 3)]
public string Third { get; set; }
}
var abiEncode = new ABIEncode();
var input = new TestParamsInput
{
First = "hello",
Second = 69,
Third = "world"
};
byte[] encoded = abiEncode.GetABIParamsEncoded(input);
// Automatically encodes based on Parameter attributes
From test: FunctionAttributeEncodingTests.cs:14
using Nethereum.ABI.ABIDeserialisation;
using System.Linq;
var abi = @"[
{
""constant"": false,
""inputs"": [{""name"": ""a"", ""type"": ""uint256""}],
""name"": ""multiply"",
""outputs"": [{""name"": ""d"", ""type"": ""uint256""}],
""type"": ""function""
}
]";
var deserializer = new ABIJsonDeserialiser();
var contract = deserializer.DeserialiseContract(abi);
var multiplyFunction = contract.Functions.FirstOrDefault(x => x.Name == "multiply");
// multiplyFunction.Sha3Signature: "c6888fa1"
// multiplyFunction.Constant: false
// multiplyFunction.InputParameters[0].Type: "uint256"
From test: AbiDeserialiseTuplesTests.cs:22
using Nethereum.ABI.ABIDeserialisation;
using System.Linq;
// Complex ABI with nested tuple containing array of tuples
var abi = @"[{
""constant"": false,
""inputs"": [{
""components"": [
{""name"": ""id"", ""type"": ""uint256""},
{
""components"": [
{""name"": ""id"", ""type"": ""uint256""},
{""name"": ""productId"", ""type"": ""uint256""},
{""name"": ""quantity"", ""type"": ""uint256""}
],
""name"": ""lineItem"",
""type"": ""tuple[]""
},
{""name"": ""customerId"", ""type"": ""uint256""}
],
""name"": ""purchaseOrder"",
""type"": ""tuple""
}],
""name"": ""SetPurchaseOrder"",
""outputs"": [],
""type"": ""function""
}]";
var contractAbi = new ABIJsonDeserialiser().DeserialiseContract(abi);
var functionABI = contractAbi.Functions.FirstOrDefault(e => e.Name == "SetPurchaseOrder");
// Function signature includes full tuple structure
// functionABI.Sha3Signature: "0cc400bd"
From test: FunctionEncodingTests.cs:79-107
using Nethereum.ABI.FunctionEncoding;
using Nethereum.ABI.Model;
var encoder = new FunctionCallEncoder();
var signature = "c6888fa1";
// Address encoding
var addressParam = new[] { new Parameter("address", "recipient") };
string encodedAddress = encoder.EncodeRequest(
signature,
addressParam,
"0x1234567890abcdef1234567890abcdef12345678"
);
// Result: "0xc6888fa10000000000000000000000001234567890abcdef1234567890abcdef12345678"
// Boolean encoding
var boolParam = new[] { new Parameter("bool", "flag") };
string encodedBool = encoder.EncodeRequest(signature, boolParam, true);
// Result: "0xc6888fa10000000000000000000000000000000000000000000000000000000000000001"
// Integer encoding
var intParam = new[] { new Parameter("int", "number") };
string encodedInt = encoder.EncodeRequest(signature, intParam, 69);
// Result: "0xc6888fa10000000000000000000000000000000000000000000000000000000000000045"
// Note: 69 decimal = 0x45 hex
From test: Eip712TypedDataSignerSimpleScenarioTest.cs:66
using Nethereum.ABI.EIP712;
using Nethereum.ABI.FunctionEncoding.Attributes;
using Nethereum.Signer.EIP712;
using System.Collections.Generic;
// Define your domain-specific structs
[Struct("Person")]
public class Person
{
[Parameter("string", "name", 1)]
public string Name { get; set; }
[Parameter("address[]", "wallets", 2)]
public List<string> Wallets { get; set; }
}
[Struct("Mail")]
public class Mail
{
[Parameter("tuple", "from", 1, "Person")]
public Person From { get; set; }
[Parameter("tuple[]", "to", 2, "Person[]")]
public List<Person> To { get; set; }
[Parameter("string", "contents", 3)]
public string Contents { get; set; }
}
// Create typed data definition
var typedData = new TypedData<Domain>
{
Domain = new Domain
{
Name = "Ether Mail",
Version = "1",
ChainId = 1,
VerifyingContract = "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
},
Types = MemberDescriptionFactory.GetTypesMemberDescription(typeof(Domain), typeof(Mail), typeof(Person)),
PrimaryType = nameof(Mail),
};
// Create message
var mail = new Mail
{
From = new Person
{
Name = "Cow",
Wallets = new List<string>
{
"0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826",
"0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF"
}
},
To = new List<Person>
{
new Person
{
Name = "Bob",
Wallets = new List<string>
{
"0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB",
"0xB0BdaBea57B0BDABeA57b0bdABEA57b0BDabEa57",
"0xB0B0b0b0b0b0B000000000000000000000000000"
}
}
},
Contents = "Hello, Bob!"
};
// Set the message
typedData.SetMessage(mail);
// Sign using private key
var signer = new Eip712TypedDataSigner();
var key = new EthECKey("94e001d6adf3a3275d5dd45971c2a5f6637d3e9c51f9693f2e678f649e164fa5");
string signature = signer.SignTypedDataV4(mail, typedData, key);
// signature: "0x943393c998ab7e067d2875385e2218c9b3140f563694267ac9f6276a9fcc53e1..."
// Recover signer address from signature
string recoveredAddress = signer.RecoverFromSignatureV4(mail, typedData, signature);
// recoveredAddress matches key.GetPublicAddress()
From test: Eip712TypedDataSignerTest.cs:107
using Nethereum.ABI.EIP712;
using Nethereum.Signer.EIP712;
// EIP-712 typed data as JSON (MetaMask format)
var typedDataJson = @"{
'domain': {
'chainId': 1,
'name': 'Ether Mail',
'verifyingContract': '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',
'version': '1'
},
'message': {
'contents': 'Hello, Bob!',
'from': {
'name': 'Cow',
'wallets': [
'0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',
'0xDeaDbeefdEAdbeefdEadbEEFdeadbeEFdEaDbeeF'
]
},
'to': [{
'name': 'Bob',
'wallets': [
'0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',
'0xB0BdaBea57B0BDABeA57b0bdABEA57b0BDabEa57',
'0xB0B0b0b0b0b0B000000000000000000000000000'
]
}]
},
'primaryType': 'Mail',
'types': {
'EIP712Domain': [
{'name': 'name', 'type': 'string'},
{'name': 'version', 'type': 'string'},
{'name': 'chainId', 'type': 'uint256'},
{'name': 'verifyingContract', 'type': 'address'}
],
'Mail': [
{'name': 'from', 'type': 'Person'},
{'name': 'to', 'type': 'Person[]'},
{'name': 'contents', 'type': 'string'}
],
'Person': [
{'name': 'name', 'type': 'string'},
{'name': 'wallets', 'type': 'address[]'}
]
}
}";
// Deserialize and encode
var rawTypedData = TypedDataRawJsonConversion.DeserialiseJsonToRawTypedData(typedDataJson);
var signer = new Eip712TypedDataSigner();
byte[] encodedTypedData = signer.EncodeTypedDataRaw(rawTypedData);
// Sign directly from JSON
var key = new EthECKey("94e001d6adf3a3275d5dd45971c2a5f6637d3e9c51f9693f2e678f649e164fa5");
string signature = signer.SignTypedDataV4(rawTypedData, key);
From test: EIP712TypeDataSignatureMultipleComplexInnerObjects.cs:13
using Nethereum.ABI.EIP712;
using Nethereum.ABI.FunctionEncoding.Attributes;
using System.Collections.Generic;
using System.Numerics;
[Struct("UsageLimit")]
public class UsageLimit
{
[Parameter("uint8", "limitType", 1)]
public byte LimitType { get; set; }
[Parameter("uint256", "limit", 2)]
public BigInteger Limit { get; set; }
[Parameter("uint256", "period", 3)]
public BigInteger Period { get; set; }
}
[Struct("Constraint")]
public class Constraint
{
[Parameter("uint8", "condition", 1)]
public byte Condition { get; set; }
[Parameter("uint64", "index", 2)]
public ulong Index { get; set; }
[Parameter("bytes32", "refValue", 3)]
public byte[] RefValue { get; set; }
}
[Struct("CallSpec")]
public class CallSpec
{
[Parameter("address", "target", 1)]
public string Target { get; set; }
[Parameter("bytes4", "selector", 2)]
public byte[] Selector { get; set; }
[Parameter("uint256", "maxValuePerUse", 3)]
public BigInteger MaxValuePerUse { get; set; }
[Parameter("tuple", "valueLimit", 4, structTypeName: "UsageLimit")]
public UsageLimit ValueLimit { get; set; }
[Parameter("tuple[]", "constraints", 5, structTypeName: "Constraint[]")]
public List<Constraint> Constraints { get; set; }
}
[Struct("SessionSpec")]
public class SessionSpec
{
[Parameter("address", "signer", 1)]
public string Signer { get; set; }
[Parameter("uint256", "expiresAt", 2)]
public BigInteger ExpiresAt { get; set; }
[Parameter("tuple[]", "callPolicies", 3, structTypeName: "CallSpec[]")]
public List<CallSpec> CallPolicies { get; set; }
}
// This demonstrates deep nesting: SessionSpec contains array of CallSpec,
// each CallSpec contains UsageLimit struct and array of Constraint structs
// Perfect for complex DeFi protocols, account abstraction, session keys, etc.
From test: Eip712TypedDataEncoder.cs
using Nethereum.ABI.EIP712;
using Nethereum.Hex.HexConvertors.Extensions;
var encoder = new Eip712TypedDataEncoder();
// Encode from typed data
var mail = new Mail { /* ... */ };
var typedData = new TypedData<Domain> { /* ... */ };
byte[] encoded = encoder.EncodeTypedData(mail, typedData);
// Encode and hash in one operation (for signing)
byte[] hash = encoder.EncodeAndHashTypedData(mail, typedData);
// Encode directly from JSON
string json = /* EIP-712 JSON */;
byte[] encodedFromJson = encoder.EncodeTypedData(json);
byte[] hashFromJson = encoder.EncodeAndHashTypedData(json);
// The hash is what gets signed with ECDSA
string hashHex = hash.ToHex(true);
From test: FunctionEncodingTests.cs:161
using Nethereum.ABI.FunctionEncoding;
using Nethereum.ABI.Model;
var encoder = new FunctionCallEncoder();
var signature = "c6888fa1";
var parameters = new[] { new Parameter("address", "_address1") };
try
{
string encoded = encoder.EncodeRequest(signature, parameters, (object)null);
}
catch (AbiEncodingException ex)
{
// ex.Message: "An error occurred encoding abi value. Order: '1', Type: 'address',
// Value: 'null'. Ensure the value is valid for the abi type."
Console.WriteLine(ex.Message);
}
ABIEncodeGetABIEncoded(params ABIValue[] abiValues) - Encode values with explicit typesGetABIEncoded(params object[] values) - Encode values with automatic type detectionGetABIParamsEncoded<T>(T input) - Encode object using Parameter attributesGetABIEncodedPacked(params ABIValue[] abiValues) - Packed encoding (no padding)GetSha3ABIEncoded(...) - Encode and hash in one operationFunctionCallEncoderEncodeRequest(string sha3Signature, Parameter[] parameters, params object[] values) - Encode function callEncodeRequest<T>(T functionInput, string sha3Signature) - Encode using attributesFunctionCallDecoderDecodeOutput(string output, params Parameter[] parameters) - Decode function return valuesDecodeFunctionOutput<T>(string output) - Decode using attributesEventTopicDecoderDecodeTopics(object destination, string[] topics, string data) - Decode event log into objectDecodeTopics<T>(string[] topics, string data) - Decode event log to typed objectABIJsonDeserialiserDeserialiseContract(string abi) - Parse contract ABI JSONDeserialiseContract(JArray abi) - Parse from JArrayContractABI with Functions, Events, Errors, ConstructorEip712TypedDataEncoderEncodeTypedData<T, TDomain>(T message, TypedData<TDomain> typedData) - Encode typed data with messageEncodeTypedData(string json) - Encode from EIP-712 JSONEncodeAndHashTypedData(...) - Encode and hash for signingEncodeTypedDataRaw(TypedDataRaw typedData) - Low-level encodingEip712TypedDataSigner (in Nethereum.Signer)SignTypedDataV4<T>(T message, TypedData<Domain> typedData, EthECKey key) - Sign EIP-712 dataRecoverFromSignatureV4<T>(T message, TypedData<Domain> typedData, string signature) - Recover signerSignTypedDataV4(TypedDataRaw typedData, EthECKey key) - Sign from raw typed data[Function("name")] - Mark class as function definition[Event("name")] - Mark class as event definition[Struct("name")] - Mark class as EIP-712 struct[Parameter("type", "name", order, indexed)] - Mark property as parameter[FunctionOutput] - Mark class can be used for output decodingTypedData<TDomain> - Typed data with domain separationDomain - EIP-712 domain (name, version, chainId, verifyingContract, salt)MemberDescription - Type member definition (name, type)MemberDescriptionFactory - Generate type descriptions from .NET typesMemberValue - Runtime value for encodingTypedDataRaw - Raw typed data without genericsusing Nethereum.ABI.FunctionEncoding;
var decoder = new FunctionCallDecoder();
// Detect and decode standard revert errors (Error(string))
// The output data from a failed call starts with 0x08c379a0
if (ErrorFunction.IsErrorData(outputData))
{
ErrorFunction error = decoder.DecodeFunctionError(outputData);
Console.WriteLine(error.Message); // e.g. "Insufficient balance"
}
// ThrowIfErrorOnOutput checks the data and throws SmartContractRevertException
// if it contains a standard Error(string) revert
try
{
decoder.ThrowIfErrorOnOutput(outputData);
}
catch (SmartContractRevertException ex)
{
Console.WriteLine(ex.RevertMessage); // The revert reason string
Console.WriteLine(ex.EncodedData); // The raw hex data
}
using Nethereum.ABI.FunctionEncoding;
using Nethereum.ABI.FunctionEncoding.Attributes;
using Nethereum.ABI.Model;
using System.Numerics;
// Define a custom Solidity error: error InsufficientBalance(address account, uint256 balance)
[Error("InsufficientBalance")]
public class InsufficientBalanceError
{
[Parameter("address", "account", 1)]
public string Account { get; set; }
[Parameter("uint256", "balance", 2)]
public BigInteger Balance { get; set; }
}
var decoder = new FunctionCallDecoder();
// Decode custom error using the typed class
var errorData = "0x..."; // revert data from failed transaction
var decoded = (InsufficientBalanceError)decoder.DecodeError(
typeof(InsufficientBalanceError), errorData);
// decoded.Account: "0x1234..."
// decoded.Balance: 500
// Alternatively, decode using ErrorABI from a deserialized contract
var contract = new ABIJsonDeserialiser().DeserialiseContract(abiJson);
ErrorABI errorAbi = contract.FindErrorABI(errorSignature);
if (errorAbi != null)
{
var parameters = errorAbi.DecodeErrorDataToDefault(errorData);
// parameters[0].Result, parameters[1].Result, etc.
}
Function signatures are the first 4 bytes of Keccak-256 hash of the canonical function signature:
Keccak256("transfer(address,uint256)") → 0xa9059cbb2ab09eb219583f4a59a5d0623ade346d962bcd4e46b11da047c9049b
Function selector: 0xa9059cbb (first 4 bytes)
Event signatures are the full 32 bytes of Keccak-256 hash of the canonical event signature:
Keccak256("Transfer(address,address,uint256)") → 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
Event topic[0]: Full hash (identifies the event)
The domain separator prevents signature replay attacks across:
verifyingContract address)chainId)version)name)Formula: Keccak256(encodeData("EIP712Domain", domain))
Final hash signed by user:
Keccak256("\x19\x01" + domainSeparator + hashStruct(message))
Where:
\x19\x01 is the version byte for structured datadomainSeparator is the hash of the domainhashStruct(message) is the hash of the primary message typeWhen calculating signatures, types must be canonical:
uint → uint256int → int256transfer(address,uint256) not transfer(address, uint256)Runnable examples available at Nethereum Playground:
Human-Readable ABI:
ABI Encoding:
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 net5.0 was computed. net5.0-windows net5.0-windows was computed. net6.0 net6.0 is compatible. net6.0-android net6.0-android was computed. net6.0-ios net6.0-ios was computed. net6.0-maccatalyst net6.0-maccatalyst was computed. net6.0-macos net6.0-macos was computed. net6.0-tvos net6.0-tvos was computed. net6.0-windows net6.0-windows was computed. net7.0 net7.0 was computed. net7.0-android net7.0-android was computed. net7.0-ios net7.0-ios was computed. net7.0-maccatalyst net7.0-maccatalyst was computed. net7.0-macos net7.0-macos was computed. net7.0-tvos net7.0-tvos was computed. net7.0-windows net7.0-windows was computed. net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 is compatible. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 netcoreapp2.0 was computed. netcoreapp2.1 netcoreapp2.1 was computed. netcoreapp2.2 netcoreapp2.2 was computed. netcoreapp3.0 netcoreapp3.0 was computed. netcoreapp3.1 netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 netstandard2.0 is compatible. netstandard2.1 netstandard2.1 was computed. |
| .NET Framework | net451 net451 is compatible. net452 net452 was computed. net46 net46 was computed. net461 net461 is compatible. net462 net462 was computed. net463 net463 was computed. net47 net47 was computed. net471 net471 was computed. net472 net472 was computed. net48 net48 was computed. net481 net481 was computed. |
| MonoAndroid | monoandroid monoandroid was computed. |
| MonoMac | monomac monomac was computed. |
| MonoTouch | monotouch monotouch was computed. |
| Tizen | tizen40 tizen40 was computed. tizen60 tizen60 was computed. |
| Xamarin.iOS | xamarinios xamarinios was computed. |
| Xamarin.Mac | xamarinmac xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos xamarinwatchos was computed. |
Showing the top 5 NuGet packages that depend on Nethereum.ABI:
| Package | Downloads |
|---|---|
|
Nethereum.Signer
Nethereum signer library to sign and verify messages, RLP and transactions using an Ethereum account |
|
|
Nethereum.Contracts
Nethereum Contracts is the core library to interact via RPC with Smart contracts in Ethereum |
|
|
Nethereum.Web3
Nethereum.Web3 Ethereum Web3 Class Library to interact via RPC with an Ethereum client, for example geth. Including contract interaction, deployment, transaction, encoding / decoding and event filters |
|
|
Nethereum.Signer.EIP712
Nethereum signer library to sign and encode messages according to EIP-712 |
|
|
Thirdweb
Best in class Web3 .NET SDK, powered by thirdweb. |
Showing the top 3 popular GitHub repositories that depend on Nethereum.ABI:
| Repository | Stars |
|---|---|
|
ChainSafe/web3.unity
🕹 Unity SDK for building games that interact with blockchains.
|
|
|
yc-l/yc.boilerplate
YC. Boilerplate is a set of loose coupling, flexible combination, complete functions, convenient development, and reduces the workload of development.
|
|
|
biheBlockChain/MyLinkToken
开源链克口袋,玩客币钱包
|
| Version | Downloads | Last Updated |
|---|---|---|
| 6.1.0 | 70,059 | 3/25/2026 |
| 6.0.4 | 12,829 | 3/18/2026 |
| 6.0.3 | 2,112 | 3/18/2026 |
| 6.0.1 | 3,109 | 3/17/2026 |
| 6.0.0 | 4,436 | 3/16/2026 |
| 5.8.0 | 115,617 | 1/6/2026 |
| 5.0.0 | 512,354 | 5/28/2025 |
| 4.29.0 | 446,079 | 2/10/2025 |
| 4.28.0 | 175,933 | 1/7/2025 |
| 4.27.1 | 95,274 | 12/24/2024 |
| 4.27.0 | 88,749 | 12/24/2024 |
| 4.26.0 | 195,248 | 10/1/2024 |
| 4.25.0 | 115,408 | 9/19/2024 |
| 4.21.4 | 210,462 | 8/9/2024 |
| 4.21.3 | 97,911 | 7/22/2024 |
| 4.21.2 | 157,759 | 6/26/2024 |
| 4.21.1 | 84,764 | 6/26/2024 |
| 4.21.0 | 99,223 | 6/18/2024 |
| 4.20.0 | 456,991 | 3/28/2024 |