这是一篇文章的早期版本,旨在帮助那些对以太坊区块链平台有基本了解的开发人员,如果想学习如何使用Nethereum .NET库对Ethereum平台进行编程。
我以后会在这篇文章中添加更多内容,但就目前而言,正在使用它发布.NET 10+的系列C#示例,介绍如何使用Nethereum库执行针对以太坊区块链平台的最常见任务。
最常见任务列表包括以下内容:
- 1.获取协议版本
- 2.获取最大块数
- 3.获取帐户余额
- 4.发送以太
- 5.等待交易收据
- 6.在区块链中扫描块
- 7.列出个人账户(及其余额)
- 8.在区块链中扫描交易
- 9.与现有(已部署)合同互动
- 10.用事件和现有(已部署)合约交互
- 11.获取所有活动更改
- 12.获取合约金额历史
这里是c#的主文件:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Nethereum.Hex.HexTypes;
using Nethereum.Web3;
namespace MWH.MyNethereum.QuickRef
{
static public class TaskExamples
{
const int UNLOCK_TIMEOUT = 2 * 60; // 2 minutes (arbitrary)
const int SLEEP_TIME = 5 * 1000; // 5 seconds (arbitrary)
const int MAX_TIMEOUT = 2 * 60 * 1000; // 2 minutes (arbirtrary)
// These static public variables do not represent a recommended pattern
static public string LastProtocolVersion = "";
static public string LastTxHash = "";
static public Nethereum.RPC.Eth.DTOs.TransactionReceipt LastTxReceipt = null;
static public HexBigInteger LastMaxBlockNumber = new HexBigInteger(0);
static public async Task GetProtocolVersionExample(Web3 web3)
{
Console.WriteLine("GetProtocolVersionExample:");
var protocolVersion = await web3.Eth.ProtocolVersion.SendRequestAsync();
Console.WriteLine("protocolVersion:\t" + protocolVersion.ToString());
LastProtocolVersion = protocolVersion;
}
static public async Task GetMaxBlockExample(Web3 web3)
{
Console.WriteLine("GetMaxBlockExample:");
var maxBlockNumber = await web3.Eth.Blocks.GetBlockNumber.SendRequestAsync();
Console.WriteLine("maxBlockNumber:\t" + maxBlockNumber.Value.ToString());
LastMaxBlockNumber = maxBlockNumber;
}
static public async Task ScanBlocksExample(Web3 web3, ulong startBlockNumber, ulong endBlockNumber)
{
Console.WriteLine("ScanBlocksExample:");
long txTotalCount = 0;
for (ulong blockNumber = startBlockNumber; blockNumber <= endBlockNumber; blockNumber++)
{
var blockParameter = new Nethereum.RPC.Eth.DTOs.BlockParameter(blockNumber);
var block = await web3.Eth.Blocks.GetBlockWithTransactionsByNumber.SendRequestAsync(blockParameter);
var trans = block.Transactions;
int txCount = trans.Length;
txTotalCount += txCount;
if (blockNumber % 1000 == 0) Console.Write(".");
if (blockNumber % 10000 == 0)
{
DateTime blockDateTime = Helpers.UnixTimeStampToDateTime((double)block.Timestamp.Value);
Console.WriteLine(blockNumber.ToString() + " " + txTotalCount.ToString() + " " + blockDateTime.ToString());
}
}
Console.WriteLine();
}
static public async Task ScanTxExample(Web3 web3, ulong startBlockNumber, ulong endBlockNumber)
{
Console.WriteLine("ScanTxExample:");
long txTotalCount = 0;
for (ulong blockNumber = startBlockNumber; blockNumber <= endBlockNumber; blockNumber++)
{
var blockParameter = new Nethereum.RPC.Eth.DTOs.BlockParameter(blockNumber);
var block = await web3.Eth.Blocks.GetBlockWithTransactionsByNumber.SendRequestAsync(blockParameter);
var trans = block.Transactions;
int txCount = trans.Length;
txTotalCount += txCount;
foreach (var tx in trans)
{
try
{
var bn = tx.BlockNumber.Value;
var th = tx.TransactionHash;
var ti = tx.TransactionIndex.Value;
var rpt = await web3.Eth.Transactions.GetTransactionReceipt.SendRequestAsync(th);
var status = rpt.Status.Value;
var nc = tx.Nonce.Value;
var from = tx.From;
Console.WriteLine(th.ToString() + " " + ti.ToString() + " "