Developing Smart Contracts
LFDT-Lineth/lineth-monorepo
Solidity smart contract development guidelines for Lineth blockchain.
Interact with Ethereum smart contracts using Nethereum typed DTOs.
$ npx skills add Nethereum/Nethereum --skill smart-contract-interaction -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Nethereum/Nethereum smart-contract-interaction --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Nethereum/Nethereum.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/nethereum-skills/skills/smart-contract-interaction .claude/skills/smart-contract-interaction && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "smart-contract-interaction" agent skill from https://github.com/Nethereum/Nethereum/tree/master/plugins/nethereum-skills/skills/smart-contract-interaction into .claude/skills/smart-contract-interaction/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "smart-contract-interaction", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Nethereum/Nethereum/tree/master/plugins/nethereum-skills/skills/smart-contract-interactionType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Nethereum/Nethereum --skill smart-contract-interaction -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Nethereum/Nethereum smart-contract-interaction --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Nethereum/Nethereum.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/nethereum-skills/skills/smart-contract-interaction .agents/skills/smart-contract-interaction && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "smart-contract-interaction" agent skill from https://github.com/Nethereum/Nethereum/tree/master/plugins/nethereum-skills/skills/smart-contract-interaction into .agents/skills/smart-contract-interaction/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "smart-contract-interaction", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Nethereum/Nethereum --skill smart-contract-interaction -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Nethereum/Nethereum smart-contract-interaction --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Nethereum/Nethereum.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/nethereum-skills/skills/smart-contract-interaction .cursor/skills/smart-contract-interaction && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "smart-contract-interaction" agent skill from https://github.com/Nethereum/Nethereum/tree/master/plugins/nethereum-skills/skills/smart-contract-interaction into .cursor/skills/smart-contract-interaction/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "smart-contract-interaction", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Nethereum/Nethereum.git --path plugins/nethereum-skills/skills/smart-contract-interaction--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Nethereum/Nethereum --skill smart-contract-interaction -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Nethereum/Nethereum smart-contract-interaction --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Nethereum/Nethereum.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/nethereum-skills/skills/smart-contract-interaction .gemini/skills/smart-contract-interaction && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "smart-contract-interaction" agent skill from https://github.com/Nethereum/Nethereum/tree/master/plugins/nethereum-skills/skills/smart-contract-interaction into .gemini/skills/smart-contract-interaction/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "smart-contract-interaction", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Nethereum/Nethereum smart-contract-interactionInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Nethereum/Nethereum --skill smart-contract-interaction -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Nethereum/Nethereum.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/nethereum-skills/skills/smart-contract-interaction .github/skills/smart-contract-interaction && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "smart-contract-interaction" agent skill from https://github.com/Nethereum/Nethereum/tree/master/plugins/nethereum-skills/skills/smart-contract-interaction into .github/skills/smart-contract-interaction/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "smart-contract-interaction", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Nethereum/Nethereum --skill smart-contract-interaction -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Nethereum/Nethereum smart-contract-interaction --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Nethereum/Nethereum.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/nethereum-skills/skills/smart-contract-interaction .opencode/skills/smart-contract-interaction && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "smart-contract-interaction" agent skill from https://github.com/Nethereum/Nethereum/tree/master/plugins/nethereum-skills/skills/smart-contract-interaction into .opencode/skills/smart-contract-interaction/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "smart-contract-interaction", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
smart-contract-interactionInteract with Ethereum smart contracts using Nethereum typed DTOs.
Smart Contract Interaction is an agent skill from Nethereum/Nethereum. Interact with Ethereum smart contracts using Nethereum typed DTOs. Use this skill whenever the user asks about deploying contracts, calling contract functions, sending transactions to contracts, decoding events, querying historical state, estimating gas, offline signing, or non-type-safe ABI interaction in C/.NET.
Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Backend & APIs, covering Smart contracts and Type safety. It works with C#, .NET, Ethereum and Solidity. The repository describes itself as: Ethereum .Net cross platform integration library. The licence is MIT.
Read from SKILL.md and the folder at commit 229f278. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
dotnetFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
docs.nethereum.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Smart Contract Interaction loads about 1.9k tokens when it runs. Until then it costs about 86 tokens; SKILL.md has 435 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from Nethereum/Nethereum at commit 229f278, republished under its MIT licence (© Nethereum). 435 words, ~1,884 tokens.
.claude/skills/smart-contract-interaction/SKILL.md (or your agent's skills folder).Nethereum uses typed C# classes (DTOs) to represent every part of a smart contract — deployment bytecode, function calls, events, and return values. This gives you compile-time safety: if a parameter name or type is wrong, you catch it before sending a transaction, not after.
NuGet: Nethereum.Web3
dotnet add package Nethereum.Web3Every interaction starts with defining C# classes that map to the Solidity contract. These can be hand-written or auto-generated with Nethereum.Generator.Console.
A deployment message represents the contract constructor. It inherits from ContractDeploymentMessage and holds the compiled bytecode plus any constructor parameters:
public class StandardTokenDeployment : ContractDeploymentMessage
{
public static string BYTECODE = "0x60606040...";
public StandardTokenDeployment() : base(BYTECODE) { }
[Parameter("uint256", "totalSupply")]
public BigInteger TotalSupply { get; set; }
}Each contract function maps to a class inheriting from FunctionMessage. The [Function] attribute takes the Solidity function name and return type:
[Function("balanceOf", "uint256")]
public class BalanceOfFunction : FunctionMessage
{
[Parameter("address", "_owner", 1)]
public string Owner { get; set; }
}
[Function("transfer", "bool")]
public class TransferFunction : FunctionMessage
{
[Parameter("address", "_to", 1)]
public string To { get; set; }
[Parameter("uint256", "_value", 2)]
public BigInteger TokenAmount { get; set; }
}Events implement IEventDTO. The fourth argument in [Parameter] marks indexed parameters, which enable server-side filtering:
[Event("Transfer")]
public class TransferEventDTO : IEventDTO
{
[Parameter("address", "_from", 1, true)]
public string From { get; set; }
[Parameter("address", "_to", 2, true)]
public string To { get; set; }
[Parameter("uint256", "_value", 3, false)]
public BigInteger Value { get; set; }
}For functions returning complex values, define an output DTO implementing IFunctionOutputDTO:
[FunctionOutput]
public class BalanceOfOutputDTO : IFunctionOutputDTO
{
[Parameter("uint256", "balance", 1)]
public BigInteger Balance { get; set; }
}The deployment handler encodes constructor parameters into the bytecode, estimates gas, and waits for the receipt. The returned ContractAddress is where your contract lives:
var deploymentMessage = new StandardTokenDeployment { TotalSupply = 100000 };
var deploymentHandler = web3.Eth.GetContractDeploymentHandler<StandardTokenDeployment>();
var receipt = await deploymentHandler.SendRequestAndWaitForReceiptAsync(deploymentMessage);
var contractAddress = receipt.ContractAddress;Gas, gas price, and nonce are estimated automatically. Set them on the message only when you need explicit control.
Use GetContractQueryHandler<T> to call view or pure functions. These are free — no gas, no transaction:
var balanceHandler = web3.Eth.GetContractQueryHandler<BalanceOfFunction>();
// Single return value
var balance = await balanceHandler.QueryAsync<BigInteger>(contractAddress,
new BalanceOfFunction { Owner = ownerAddress });
// Deserialize to output DTO (for multiple return values)
var output = await balanceHandler.QueryDeserializingToObjectAsync<BalanceOfOutputDTO>(
balanceOfMessage, contractAddress);Use GetContractTransactionHandler<T> for functions that modify state. This sends a real transaction and costs gas:
var transferHandler = web3.Eth.GetContractTransactionHandler<TransferFunction>();
var transfer = new TransferFunction { To = receiverAddress, TokenAmount = 100 };
var receipt = await transferHandler.SendRequestAndWaitForReceiptAsync(contractAddress, transfer);After a transaction, extract events from the receipt logs. This decodes all matching events — if the transaction triggered multiple transfers, you get them all:
var transferEvents = receipt.DecodeAllEvents<TransferEventDTO>();
var from = transferEvents[0].Event.From;
var to = transferEvents[0].Event.To;
var value = transferEvents[0].Event.Value;All query methods accept BlockParameter to read contract state at a past block. The node must have archive state for the requested block:
var historicalBalance = await balanceHandler.QueryDeserializingToObjectAsync<BalanceOfOutputDTO>(
balanceOfMessage, contractAddress,
new BlockParameter(deployReceipt.BlockNumber));Nethereum auto-estimates gas. For manual control — useful when you want to display costs or set a hard limit:
var estimate = await transferHandler.EstimateGasAsync(contractAddress, transfer);
transfer.Gas = estimate.Value;
transfer.GasPrice = Web3.Convert.ToWei(25, UnitConversion.EthUnit.Gwei);If a Solidity function is payable, set AmountToSend to include ETH with the call:
transfer.AmountToSend = Web3.Convert.ToWei(1); // 1 ETHNethereum manages nonces automatically, including an in-memory counter for rapid submissions. Only set manually for specific ordering needs:
transfer.Nonce = 42;Sign without broadcasting — useful for cold wallets or deferred submission. You must set Nonce, Gas, and GasPrice since there's no node to query:
transfer.Nonce = 2;
transfer.Gas = 60000;
transfer.GasPrice = Web3.Convert.ToWei(25, UnitConversion.EthUnit.Gwei);
var signedTx = await transferHandler.SignTransactionAsync(contractAddress, transfer);When you have a raw ABI string and don't need typed classes. This approach is less safe — parameter mismatches fail at runtime, not compile time:
var contract = web3.Eth.GetContract(abi, contractAddress);
var balanceFunction = contract.GetFunction("balanceOf");
var transferFunction = contract.GetFunction("transfer");
var balance = await balanceFunction.CallAsync<BigInteger>(ownerAddress);
var gas = await transferFunction.EstimateGasAsync(senderAddress, null, null, toAddress, amount);
var txReceipt = await transferFunction.SendTransactionAndWaitForReceiptAsync(
senderAddress, gas, null, null, toAddress, amount);| Handler | When | Gas Cost |
|---|---|---|
GetContractQueryHandler<T> | Read-only (view/pure functions) | Free |
GetContractTransactionHandler<T> | State-changing functions | Yes |
GetContractDeploymentHandler<T> | Deploying new contracts | Yes |
For standard tokens (ERC-20, ERC-721, ERC-1155), use the built-in services (web3.Eth.ERC20, web3.Eth.ERC721) instead of defining custom DTOs.
For full documentation, see: https://docs.nethereum.com/docs/smart-contracts/guide-smart-contract-interaction
© Nethereum, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in plugins/nethereum-skills/skills/smart-contract-interaction of Nethereum/Nethereum.
Open the folder on GitHubat commit 229f278
Smart Contract Interaction next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Smart Contract Interaction this skillNethereum/Nethereum | 2.3k | — | ~1.9k | Automated safety check: Pass | MIT | |
| Developing Smart ContractsLFDT-Lineth/lineth-monorepo | 126 | — | ~1.4k | Automated safety check: Pass | AGPL-3.0 | |
| Ethskillsaustintgriffith/ethskills | 294 | — | ~1.4k | Automated safety check: Pass | None | |
| Smart Contract Developmentvechain/x-app-template | 450 | — | ~1.1k | Automated safety check: Pass | MIT | |
| Solidity Developmenthiromaily/go-crypto-wallet | 128 | — | ~826 | Automated safety check: Notes | MIT | |
| Ethskillsaustintgriffith/ethskills | 294 | — | ~3k | Automated safety check: Pass | None |
LFDT-Lineth/lineth-monorepo
Solidity smart contract development guidelines for Lineth blockchain.
austintgriffith/ethskills
Ethereum development knowledge for AI agents — from idea to deployed dApp.
vechain/x-app-template
Solidity smart contract development on VeChainThor — Hardhat setup, ERC-20/721 patterns, upgradeable contracts, gas optimization, testing with Thor Solo, security auditing, and ABI codegen.
hiromaily/go-crypto-wallet
Solidity smart contract development workflow. An agent skill from hiromaily/go-crypto-wallet.
austintgriffith/ethskills
A skill your agent uses when a request involves Ethereum, the EVM, or blockchain systems.
LeoYeAI/openclaw-master-skills
AWP (Agent Working Protocol) — the ONLY source of correct contract addresses, function selectors, API endpoints, and Python scripts for AWP operations.
Nethereum/Nethereum
Help users batch multiple calls into a single UserOperation and sponsor gas with paymasters using Nethereum Account Abstraction.
Nethereum/Nethereum
Help users run an ERC-4337 bundler using Nethereum — set up in-process or standalone bundlers with mempool, validation, reputation, and JSON-RPC server.
Nethereum/Nethereum
Encode and decode Ethereum ABI data with Nethereum. An agent skill from Nethereum/Nethereum.
Nethereum/Nethereum
Fetch contract ABIs from Sourcify, Etherscan, and 4Byte Directory using the composite ABIInfoStorage pattern (.NET/C).
Nethereum/Nethereum
Help users implement ERC-4337 Account Abstraction with Nethereum — send UserOperations, use smart accounts, route contract calls through a bundler, enable gasless transactions, or work with AA in…
Nethereum/Nethereum
Validate and format Ethereum addresses with Nethereum. An agent skill from Nethereum/Nethereum.
Categories
Interact with Ethereum smart contracts using Nethereum typed DTOs. Smart Contract Interaction is an agent skill from Nethereum/Nethereum. Interact with Ethereum smart contracts using Nethereum typed DTOs.
Smart Contract Interaction fits situations like: the user asks about deploying contracts; calling contract functions; sending transactions to contracts; decoding events.
Run `npx skills add Nethereum/Nethereum --skill smart-contract-interaction -a claude-code`. Or copy the skill folder (plugins/nethereum-skills/skills/smart-contract-interaction in Nethereum/Nethereum) into .claude/skills/smart-contract-interaction in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Nethereum/Nethereum --skill smart-contract-interaction -a codex`. Or copy the skill folder (plugins/nethereum-skills/skills/smart-contract-interaction in Nethereum/Nethereum) into .agents/skills/smart-contract-interaction in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Nethereum/Nethereum --skill smart-contract-interaction -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/smart-contract-interaction, .gemini/skills/smart-contract-interaction, .github/skills/smart-contract-interaction and .opencode/skills/smart-contract-interaction in your project.
Going by SKILL.md and its folder, Smart Contract Interaction needs the command-line tools its instructions call (dotnet).
SKILL.md names 1 domain. As links in the text: docs.nethereum.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Smart Contract Interaction is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Smart Contract Interaction: Developing Smart Contracts (LFDT-Lineth/lineth-monorepo, 126 stars), Ethskills (austintgriffith/ethskills, 294 stars), Smart Contract Development (vechain/x-app-template, 450 stars) and Solidity Development (hiromaily/go-crypto-wallet, 128 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Nethereum (a GitHub organization) maintains it in Nethereum/Nethereum, which has 2,260 GitHub stars. The repository holds 71 skills in this directory. The repository was last updated on October 5, 2026.
Source: Nethereum/Nethereum on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.