C#以太坊基础入门

本文介绍了如何使用C#开发一个简单的.Net控制台应用,连接以太坊节点并打印版本信息。通过学习,你将掌握如何使用ganache模拟以太坊节点,如何在C#中调用JSON RPC接口。文章详细阐述了从使用curl测试接口到使用Nethereum库进行节点交互的过程,包括序列化与反序列化,以及如何通过Web3入口类简化调用。
摘要由CSDN通过智能技术生成

在这一部分,我们将使用C#开发一个最简单的.Net控制台应用,来接入以太坊节点,并打印 所连接节点旳版本信息。通过这一部分的学习,你将掌握以下技能:

  1. 如何使用节点仿真器
  2. 如何在命令行访问以太坊节点
  3. 如何在C#代码中访问以太坊节点

我们将使用ganache来模拟以太坊节点。ganache虽然不是一个真正的以太坊节点软件, 但它完整实现了以太坊的JSON RPC接口,非常适合以太坊智能合约与去中心化应用开发的 学习与快速验证:

ganache启动后将在8545端口监听http请求,因此,我们会将JSON RPC调用请求 使用http协议发送到节点旳8545端口。不同的节点软件可能会使用不同的监听端口,但 大部分节点软件通常默认使用8545端口。

以太坊规定了节点必须实现web3_clientVersion 调用来返回节点软件的版本信息,因此我们可以用这个命令来测试与 节点旳链接是否成功。

ganache-cli是以太坊节点仿真器软件ganache的命令行版本,可以方便开发者快速进行 以太坊DApp的开发与测试。在windows下你也可以使用其GUI版本。启动ganache很简单,只需要在命令行执行ganache-cli即可:ganache-cli是一个完整的词,-两边是没有空格的。一切顺利的话,你会看到与下图类似的屏幕输出:

默认情况下,ganache会随机创建10个账户,每个账户中都有100ETH的余额。你可以在 命令行中指定一些参数来调整这一默认行为。例如使用-a--acounts参数来指定 要创建的账户数量为20:

ganache-cli -a 20

使用curl获取节点版本信息

以太坊规定了节点必须实现web3_clientVersion 接口来向外部应用提供节点旳版本信息。接口协议的交互流程如下:

这是一个典型的请求/应答模型,请求包和响应包都是标准的JSON格式。其中,jsonrpc字段用来 标识协议版本,id则用来帮助建立响应包与请求包的对应关系。

在请求包中,使用method字段来声明接口方法,例如web3_clientVersion,使用params 字段来声明接口方法的参数数组。 在响应包中,result字段中保存了命令执行的返回结果。

以太坊JSON RPC并没有规定传输层的实现,不过大部分节点都会实现HTTP和IPC的访问。因此 我们可以使用命令行工具curl来测试这个接口:

curl http://localhost:8545 -X POST -d '{"jsonrpc": "2.0","method": "web3_clientVersion","params": [], "id": 123}'

使用C#获取节点版本信息

就像前一节看到的,我们只要在C#代码中按照以太坊RPC接口要求发送http请求包就可以了。 你可以使用任何一个你喜欢的http库,甚至直接使用socket来调用以太坊的JSON RPC API。例如,下面的代码使用.Net内置的HttpClient类来访问以太坊节点,注意代码中的注释:

using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace GetVersionByHttpDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("cuiyw-test");
            GetVersion().Wait();
            GetAccounts().Wait();
            Console.ReadLine();
        }
        static async Task GetVersion()
        {
            HttpClient httpClient = new HttpClient();

            string url = "http://localhost:7545";
            string payload = "{\"jsonrpc\":\"2.0\",\"method\":\"web3_clientVersion\",\"params\":[],\"id\":7878}";
            Console.WriteLine("<= " + payload);
            StringContent content = new StringContent(payload, Encoding.UTF8, "application/json");
            HttpResponseMessage rsp = await httpClient.PostAsync(url, content);
            string ret = await rsp.Content.ReadAsStringAsync();
            Console.WriteLine("=> " + ret);
        }

        static async Task GetAccounts()
        {
            HttpClient httpClient = new HttpClient();

            string url = "http://localhost:7545";
            string payload = "{\"jsonrpc\":\"2.0\",\"method\":\"eth_accounts\",\"
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值