内容简介:.NET是独立开发者和企业开发者共同喜爱的古老框架。可以选择各种语言并且能部署到各种各样的平台,包括从移动端到服务器的各种能力,这使得.NET成为各种应用的一个很好的选择。虽然.NET做了很多,但也可以说它什么也没做。例如,不能在.NET中的浏览器中运行客户端代码(除非使用Silverlight……),也不存在.NET支持的语言,这使得开发人员能够编写智能合约。智能合约的开发语言是solidity。solidity是一种特定用途的语言,它假设许多关于它运行的环境的东西,它与区块链技术结合十分紧密。正是这些
.NET是独立开发者和企业开发者共同喜爱的古老框架。可以选择各种语言并且能部署到各种各样的平台,包括从移动端到服务器的各种能力,这使得.NET成为各种应用的一个很好的选择。虽然.NET做了很多,但也可以说它什么也没做。例如,不能在.NET中的浏览器中运行客户端代码(除非使用Silverlight……),也不存在.NET支持的语言,这使得开发人员能够编写智能合约。
智能合约的开发语言是solidity。solidity是一种特定用途的语言,它假设许多关于它运行的环境的东西,它与区块链技术结合十分紧密。正是这些假设特点排斥其他语言。
智能合约本身只是故事的一半。对于应用程序来说,智能合约需要通过RPC来调用它们。这就是Web3客户端接入的地方。Web3客户端仅仅是客户端应用程序,它使客户端应用程序能够与以太坊上运行的智能合约进行接口交互,因此只要一个给定语言存在,那么它就可以与以太坊进行接口交互。
对于.NET来说,最重要的就是一个叫做 Nethereum 的项目。(Nethereum是.NET和以太坊的一个门户)。这个库试图复制Web3.js提供的相同功能,这些功能类似于运行在浏览器和NodeJS中的JavaScript应用程序。
在本教程中,我们将向Ganache部署一个智能合约,然后使用.NET core创建一个简单的.NET应用程序来与智能合约进行接口交互。
创建和发布一个智能合约
1. 下载和安装Ganache ,Ganache是一个非常有用的进行以太坊开发的私有区块链。
2.在终端、命令提示符或Powershell会话中,安装Truffle。 Truffle 是一个框架和一套实用 工具 集,有助于促进solidity开发智能合约。使用NPM完成下面的命令。
npm install -g truffle
3.建一个文件夹然后在这个文件夹下运行 truffle init
truffle init
4.truffle将创建一些新文件夹 contract
, test
和 migration
。在contract文件夹, contracts
文件夹中建一个新文件 Vote.sol
。
5.将下面的代码粘贴到新创建的 Vote.sol
中并保存该文件。这个智能合约只记录了2名候选人的选票数。合约使用消息发送者(即账户地址)作为投票人。它只允许每帐户投1票。
pragma solidity ^0.4.16; contract Vote { uint public candidate1; uint public candidate2; mapping (address => bool) public voted; function castVote(uint candidate) public { require(!voted[msg.sender] && (candidate == 1 || candidate == 2)); if(candidate == 1){ candidate1++; }else{ candidate2++; } voted[msg.sender] = true; } }
6.在 migrations
文件夹中创建一个名为2_vote.js的新文件。
7.复制下面的代码到2_vote.js中,并保存。
var vote = artifacts.require("Vote"); module.exports = function(deployer) { // deployment steps deployer.deploy(vote); };
8.在你创建的文件夹的根目录中打开 truffle.js
并粘贴下面的代码,然后保存文件。这配置Truffle使用Ganache。
module.exports = { networks: { ganache: { host: "127.0.0.1", port: 7545, network_id: "*" // Match any network id } } };
9.在开始菜单中启动Ganache。
10.使用Truffle部署智能合约。 ganache
网络是在 truffle.js
文件中定义的。
truffle deploy --reset --network ganache
11.注意输出。你将看到如下类似的输出。这是投票合同的地址。复制并粘贴十六进制字符串供以后使用。
Vote: 0xe4e47451aad6c89a6d9e4ad104a7b77ffe1d3b36
创建一个.NET应用调用智能合约
1.在一个新的目录,使用 dotnet
命令创建一个新的控制台应用程序。
dotnet create new console
2.安装Nethereum包。
dotnet add package Nethereum.Web3 dotnet add package Nethereum.Contracts
3.编辑 Program.cs
文件。用下面的代码代替默认代码。这将能使控制台提示帐户地址和用户投票。保存文件。
using System; using System.Numerics; using System.Threading.Tasks; using Nethereum.Contracts; using Nethereum.Hex.HexTypes; using Nethereum.Web3; namespace console { class Program { static void Main(string[] args) { //The URL endpoint for the blockchain network. string url = "HTTP://localhost:7545"; //The contract address. string address = "0x345cA3e014Aaf5dcA488057592ee47305D9B3e10"; //The ABI for the contract. string ABI = @"[{'constant':true,'inputs':[],'name':'candidate1','outputs':[{'name':'','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':false,'inputs':[{'name':'candidate','type':'uint256'}],'name':'castVote','outputs':[],'payable':false,'stateMutability':'nonpayable','type':'function'},{'constant':true,'inputs':[],'name':'candidate2','outputs':[{'name':'','type':'uint256'}],'payable':false,'stateMutability':'view','type':'function'},{'constant':true,'inputs':[{'name':'','type':'address'}],'name':'voted','outputs':[{'name':'','type':'bool'}],'payable':false,'stateMutability':'view','type':'function'}]"; //Creates the connecto to the network and gets an instance of the contract. Web3 web3 = new Web3(url); Contract voteContract = web3.Eth.GetContract(ABI, address); //Reads the vote count for Candidate 1 and Candidate 2 Task<BigInteger> candidate1Function = voteContract.GetFunction("candidate1").CallAsync<BigInteger>(); candidate1Function.Wait(); int candidate1 = (int)candidate1Function.Result; Task<BigInteger> candidate2Function = voteContract.GetFunction("candidate2").CallAsync<BigInteger>(); candidate2Function.Wait(); int candidate2 = (int)candidate2Function.Result; Console.WriteLine("Candidate 1 votes: {0}", candidate1); Console.WriteLine("Candidate 2 votes: {0}", candidate2); //Prompts for the account address. Console.Write("Enter the address of your account: "); string accountAddress = Console.ReadLine(); //Prompts for the users vote. int vote = 0; Console.Write("Press 1 to vote for candidate 1, Press 2 to vote for candidate 2: "); Int32.TryParse(Convert.ToChar(Console.Read()).ToString(), out vote); Console.WriteLine("You pressed {0}", vote); //Executes the vote on the contract. try{ HexBigInteger gas = new HexBigInteger(new BigInteger(400000)); HexBigInteger value = new HexBigInteger(new BigInteger(0)); Task<string> castVoteFunction = voteContract.GetFunction("castVote").SendTransactionAsync(accountAddress, gas, value, vote); castVoteFunction.Wait(); Console.WriteLine("Vote Cast!"); }catch(Exception e){ Console.WriteLine("Error: {0}", e.Message); } } } }
4.在 program.cs
,将我们刚才记录的地址粘贴到部署联系人的地址,保存文件。
//The contract address. string address = "Your address goes here";
5.编译应用程序。
dotnet build
6.运行应用程序。
dotnet run
7.你会看到应用程序提示你输入。输入地址并投票。你可以在 Accounts 选项卡下从Ganache GUI复制帐户地址。
Candidate 1 votes: 0 Candidate 2 votes: 0 Enter the address of your account: 0x627306090abaB3A6e1400e9345bC60c78a8BEf57 Press 1 to vote for candidate 1, Press 2 to vote for candidate 2: 1 You pressed 1 Vote Cast!
8.再次运行应用程序,将看到投票已经增加。
Candidate 1 votes: 1 Candidate 2 votes: 0 Enter the address of your account: 0xf17f52151EbEF6C7334FAD080c5704D77216b732 Press 1 to vote for candidate 1, Press 2 to vote for candidate 2: 2 You pressed 2 Vote Cast!
对于Nethereum来说,很容易将智能合约与任何.NET应用程序连接起来。因为Nethereum是基于.NET的,它可以用于.NET核心应用程序、.NET标准、Xamarin和各种Windows应用程序。使用Nethereum,强大的以太坊和.NET的现在由你来支配!
====================================================================== 分享我们的在线互动实战教程:C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和事件等。
其他的以太坊教程,有兴趣可以关注下:
- web3j教程,主要是针对 java 和android程序员进行区块链以太坊开发的web3j详解。
- 以太坊教程,主要介绍智能合约与dapp应用开发,适合入门。
- 以太坊开发,主要是介绍使用node.js、 mongodb 、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
- python以太坊,主要是针对 python 工程师使用web3.py进行区块链以太坊开发的详解。
- php以太坊,主要是介绍使用 php 进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
汇智网原创翻译,转载请标明出处。这里是 原文
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 通过Aion实现Java智能合约
- 通过CREATE2获得合约地址:解决交易所充值账号
- 智能合约攻击分析之庞氏代币合约漏洞
- 检测了3万多份智能合约,这份白皮书找到了9大智能合约安全漏洞(附下载链接)
- 智能合约工程
- 智能合约微服务
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。