w3ctech

C#程序员如何基于.net开发以太坊智能合约与dapp应用

如果我们希望构造一个去中心化应用(DApp),除了智能合约的开发, 通常还需要使用其他开发语言为用户提供操作智能合约的用户接口,例如 开发一个网页、一个手机App或者一个桌面应用。这些代码都需要与以太坊 进行交互。

以太坊规定了每个节点需要实现的JSON RPC API 应用开发接口,该接口是传输无关的,应用程序可以通过HTTP、websocket或IPC等多种 通信机制来使用该接口协议操作以太坊节点:

汇智网

理论上你可以使用任何语言基于JSON RPC接口开发出以太坊之上的 去中心化应用,不过为了提高开发效率,更好的办法是 使用特定语言的JSON RPC封装库,这些库封装了JSON RPC的协议细节, 有助于开发人员聚焦在业务逻辑的实现上。

Nethereum是以太坊官方推荐的.Net开发包,用于支持在.Net应用中访问 以太坊。在本课程中,我们将主要基于Nethereum开发包,使用C#语言来开发支持以太坊的.Net应用。

本课程的目的是帮助.Net工程师快速掌握开发以太坊应用的技能,同时穿插 讲解以太坊的一些核心概念,例如:账户、交易和智能合约等。

1.Hi,以太坊

这一章将通过一个简单的.Net应用的开发来讲解使用 C#进行以太坊应用开发的最简流程,通过这一部分的学习,你就可以在自己 的.Net应用中引入基本的以太坊支持了。

2.账户管理

这一章将详细介绍以太坊的账户管理接口。如果你 对开发中心化钱包应用感兴趣,或者需要在自己的网站中动态创建账户(例如,你 希望为网站增加对以太坊支付的支持),那么这部分内容会有很大的帮助。

3.理解状态与交易 这一章主要讲解以太坊的交易操作接口,同时也介绍一些 重要的概念,例如状态、裸交易、gas等。这部分内容将帮助你理清.Net 应用与以太坊交互的大多数问题。

4.智能合约的开发与应用 这一章将通过一个ERC20代币合约的开发、编译、代码生成、部署与交互 的完整流程,讲解使用C#.Net操作solitiy合约的方法。如果你希望为自己的 应用增加代币支持,这一部分的内容是必须的。

5.过滤器与事件 这一章主要讲解以太坊的通知机制以及如何在.Net应用中使用过滤器来监视 块和交易的生成与合约事件的触发。

课程内容示例:使用C#获取节点版本信息

我们只要在C#代码中按照以太坊RPC接口要求发送http请求包就可以了。 你可以使用任何一个你喜欢的http库,甚至直接使用socket来调用以太坊的JSON RPC API。

例如,下面的代码使用.Net内置的HttpClient类来访问以太坊节点,注意代码中的注释:

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

namespace diy{
  class Program  {
    static void Main(string[] args)    {
      Task.Run(async () => { //使用Task包装http异步请求
        HttpClient httpClient = new HttpClient();

        //请求报文:JSON格式的字符串
        string payload = "{\"jsonrpc\":\"2.0\",\"method\":\"web3_clientVersion\",\"params\":[],\"id\":7878}";

        //向节点提交请求报文  
        StringContent content = new StringContent(payload,Encoding.UTF8,"application/json");
        HttpResponseMessage rsp = await httpClient.PostAsync("http://localhost:8545",content);

        //提取并显示响应报文:JSON格式的字符串        
        string ret = await rsp.Content.ReadAsStringAsync();
        Console.WriteLine(ret);        
      }).Wait(); //等待异步任务结束
    }
  }
}

课程为每个知识点都提供了相应的预置代码,你可以在实验环境的~/repo 目录下查看。

如果你希望快速的开始使用.net和C#开发以太坊应用,那这个课程会很有帮助,课程地址如下:

C#以太坊

w3ctech微信

扫码关注w3ctech微信公众号

共收到0条回复