windows 下 ETH Dapp开发

最近出于需求,需要学习一下dapp编写,于是找了资料学习一下。
但是发现网上的资料纷繁复杂,而且基本都是2018年的。很多操作已经不适合现在新的语法或者安装步骤了。
所以,现在整理一下,把我自己配置开发环境以及搭建一个简单合约的一个过程记录一下。

参考:
https://blog.csdn.net/zhj_fly/article/details/79458467?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control

首先,先明确一下开发这个dapp需要哪些东西(这里先指本地开发,最终上链的话,只需要改一下最后一步就行)。
一共需要五个东西:nodejs npm truffle ganache web3

nodejs
基础环境,使能js运行。可以到 https://nodejs.org/en/ 下载LTS版本。
在这里插入图片描述

win7用户无法安装最新版,只能用v12版本(https://nodejs.org/dist/latest-v12.x/)。
在这里插入图片描述
npm
js包的安装工具,在windows下,安装nodejs的安装包时,已经一并安装。
设置一下npm的源,这样子利用npm安装组件时会快一点。

npm config set registry http://registry.npm.taobao.org 
npm config list   #查看

Truffle
合约的编译环境
启动cmd窗口,运行以下命令。

npm install -g truffle

ganache
本地的eth链,用来本地测试。上真的链的话,要用go-ethereum,以后再说。
这个工具有控制台版本以及有界面版本。
我们直接用有界面版本。
https://github.com/trufflesuite/ganache/releases
在这里插入图片描述

web3
用js去与合约交互的桥梁,为了方便,这里先不进行全局安装。在下面的例程工程中再单独安装。

至此,开发环境搭建好了。

接下来,部署一个简单的例程(例程用到的代码基本照抄这个博客,但是按照新版本的特性做了一些修改。感谢大神的资料)。

1.在一个不包含中文的路径(带中文没试过),新建一个文件夹。
我这边选择了桌面,新建了一个ethTest;
然后再在里面新建一个truffleTest文件夹(这个用来存放合约工程的相关文件),和一个web3Test文件夹(这个用来存放js工程相关的东西)。
在这里插入图片描述

2.然后打开控制台,cd到truffleTest中,执行

truffle init

执行之后,会得到一些文件。
在这里插入图片描述
3.编写智能合约,在contracts文件夹下新建智能合约:Data.sol:(功能:存、取一个字符串)

pragma solidity >=0.4.22 <0.9.0;

contract Data{
  string public data;
  constructor()public{
    data = "init data";
  }
  function setData(string memory str) public payable{
    data = str;
  }

  function getData() public view returns (string memory) {
    return data;
  }
}

4.编译

truffle compile

5.部署在测试网络上
(1)打开ganache
(2)修改 truffleTest/migrations 文件夹下的部署配置
在这里插入图片描述

//var Migrations = artifacts.require("Migrations");
var Data = artifacts.require("Data");
 
module.exports = function(deployer) {
  //deployer.deploy(Migrations);
  deployer.deploy(Data);
};

(3)修改truffle-config.js配置文件,添加连接网络信息:
在这里插入图片描述
在这里插入图片描述


        development: {
          host: "localhost",
          port: 7545,
          network_id: "*"
        }

(4)执行

truffle migrate --reset

至此truffle项目已经做好,接下来使用web3和智能合约进行交互(暂时我的理解是Dapp的后台部分数据是与智能合约交互,但是前端的显示、交互、绝大多数的后台处理还是和传统的app一样)

web3与智能合约交互

添加web3到项目中:

1、cd 到前面新建的web3Test文件夹中。
在这里插入图片描述
2、初始化

npm init

3、下载web3.js到项目中:

npm install web3 --save

以上命令会将web3.js下载到web3test/node_modules目录下,其中–save参数会web3.js添加到package.json配置文件中。
在这里插入图片描述

4、创建web3对象

要使用web3.js与区块链交互,需要先创建web3对象,然后连接到以太坊节点。
在web3test目录下新建index.js文件,在其中输入以下代码:
其中 abi 是truffleTest项目中build目录下Data.json文件中的abi,复制过来即可。
在这里插入图片描述

address 是合约部署的地址。在部署时显示了出来,或者可以通过ganache查看。
在这里插入图片描述
在这里插入图片描述

通过abi和合约地址就可以获取合约的实例data。下面就可以通过data来调用合约里面的内容了。

var Web3 = require("web3");
var web3 = new Web3();
web3.setProvider(new Web3.providers.HttpProvider("http://localhost:7545"));
var abi = 这里拷贝你的abi
var address = '0xE6182993EF7e22F48B32beB1F8CC97ac7E775C55'; //这个是合约地址,在前面truffle migrate --reset 时已经显示;或者直接从ganache界面中看。
var data = new web3.eth.Contract(abi,address);
data.methods.getData().call(null,function(error, result){
  console.log("the data:"+result);
 });
 
data.methods.setData("hello blockchain, your dad is here.").send({from: '0xF27d8426C496A88cbBB0929A4D7928862A7Bf78F'}).on('transactionHash', function(hash){
  console.log("hash:", hash);
  data.methods.getData().call(null,function(error, result){
   console.log("the data:"+result);
 });
});

call()和send()的作用可以从官方文档中查看。send里面的from是发送交易的地址,这里我写的是ganache中第1个账户的地址。
在这里插入图片描述

输出以下信息:
在这里插入图片描述
在ganache中也可以看到效果。
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值