以太坊开发教程

以太坊开发教程

1.搭建以太坊环境

线上测试可以自动部署,不需要额外的代码,学习的时候可以节省很多时间。但是最终我们的项目还是要落地到自己的节点上,所以后面会有一个本地配置的过程

我这里用的是以太坊提供的Remix

1.配置编译参数

左边菜单第二项是编译菜单

您可以设置编译器版本。 bilibili教程教的代码语法是0.4.x版本的语法,所以这里我们选择0.4.x版本

翻译器

sitejinse.com 以太坊智能合约开发_以太坊开发_以太坊eth2.0代币开发

2.部署调试

左边菜单第三项是调试菜单

可以部署和调试智能合约,环境我们这里选择JavaScript虚拟机。

sitejinse.com 以太坊智能合约开发_以太坊eth2.0代币开发_以太坊开发

3.本地配置过程

安装一个linux虚拟机

以下测试环境对windows不友好,经常出现命名冲突。 新版windows 10自带linux子

系统不能完全满足开发需求,偶尔会出现一些兼容性问题。 建议windows平台的朋友安装一个linux

对于虚拟机,mac平台的朋友可以跳过这一步。

这里我使用的是VMware workstation 16虚拟机平台和Ubuntu20的系统镜像。

3.1 配置虚拟机

在这里插入图片描述

这里选择之前下载的ubuntu20系统镜像

在这里插入图片描述

这里要注意选择定制硬件

在这里插入图片描述

将网络连接模式更改为桥接

在这里插入图片描述

根据自己的设备情况分配处理器、内存和硬盘。 建议内存大于等于4g,处理器大于等于本地处理

服务器线程数的1/2,且硬盘大于等于30g。 (因为调试时需要本地挖矿生成区块链,所以处理器算力和内存大小很重要)

继续下一步,直到虚拟机部署完成,系统自动安装完毕。

安装系统的时候最好断开网络连接,这样安装会比较快

3.2 配置镜像源(可选)

这一步的目的是为了加快ubuntu软件的安装和更新,不需要的同学可以跳过。

教程

清华镜像源官网

3.3 虚拟机配置

设置语言为中文(可选),设置方法:

打开应用程序抽屉

在这里插入图片描述

打开设置

在这里插入图片描述

选择地区和语言

在这里插入图片描述

手动安装语言

在这里插入图片描述

安装/删除语言

在这里插入图片描述

勾选简体中文点击应用

在这里插入图片描述

安装完成后,点击

在这里插入图片描述

修改这两项为中文

在这里插入图片描述

4 安装 Node.js

在桌面右击打开终端,输入命令

sudo apt install nodejs -y 
sudo apt install npm -y

改变来源

sudo npm install -g cnpm --registry=https://registry.npm.taobao.org

等待安装结束(终端下方会显示进度条)

5 安装松露

安装truffle(根据网络情况可能需要较长时间)

sudo cnpm install -g truffle

在本地项目目录下新建一个终端,输入

truffle version

出现如下输出证明truffle安装成功

在这里插入图片描述

创建项目模板

在本地项目目录下打开终端,输入

truffle unbox vue-box

一般情况下,等待一段时间后以太坊开发,会输出如下内容,表示模板创建成功

默认模板是mac系统的,linux系统可能会报一些警告但不影响正常使用

在这里插入图片描述

如果遇到如下报错,需要梯子。 有关详细信息,请参阅构建梯子。

在这里插入图片描述

6 安装vue

安装vue

sudo cnpm install -g vue

安装vue脚手架

sudo cnpm install -g @vue/cli

测试是否安装成功

vue -V

在这里插入图片描述

启动脚手架可视化界面

vue ui

在这里插入图片描述

导入vue项目所在目录,即项目目录下的vapp

在这里插入图片描述

7 使用集成开发环境

这里我照例使用VScode,bilibili教程中还有其他支持solidity语法提示的IDE可以选择,下面是VScode的配置方法

下载并安装 VScode

如果是在ubuntu的firefox浏览器下载的,记得这一步选择保存

在这里插入图片描述

等待下载完成

找到安装包所在目录,双击安装包,在弹出的SoftwareStore界面点击安装

安装后在应用程序抽屉中可以找到VScode

7.1 安装VScode插件 8 编写代码

在VScode中打开项目所在的文件夹,开始编写自己的代码。 让我们开始第一次在本地运行私有链和智能合约。

第一个本地测试项目(前端)

环境配置了半天,终于要尝试让我们的代码跑起来了。 让我们看看我们现在的环境中有什么以及我们可以做什么。

Node.js、truffle、vue、IDE,前端似乎应有尽有。还记得用truffle搭建的vue-box模型吗

版本? 让我们试着跑吧。

启动测试网络

truffle develop

编译智能合约

compile

部署智能合约

migrate

9 通过命令行交互

刚才我们其实是进入了truffle的命令行界面

在这里插入图片描述

其实这个命令行就是一个交互式的JavaScript窗口,这里输入的命令和JavaScript语法是完全一样的

的。

比如输入

let token 
token = TutorialToken.deployed().then(instance => token = instance);

我们实际上使用 JavaScript 中的匿名函数来获取对部署的 TutorialToken 智能合约的引用

token以太坊开发,那么我们就可以使用这个引用来调用智能合约。

还记得那些启动网络后导出的帐户吗? 它们现在存储在帐户对象中。

token.balanceOf(accounts[0]);

我们得到了账户0拥有的币种编号2ee0,恰好是我们合约中生成的初始币种数量12000。

在这里插入图片描述

接下来我们转账到账户1

token.transfer(accounts[1], 10) token.balanceOf(accounts[1])

我们可以看到余额为a,10个币种的待转账成功

truffle命令行中可以使用的其他对象和方法(实际上是Web3.js提供的),参见以太坊中文文档和官方文档

10 与网页交互

我们可以自己使用命令行界面,但是给用户的界面必须是图形化的。我们之前的vue项目是关于

它派上用场了。

点击VScode当前终端旁边的+号,打开一个新的终端

进入

cd vapp 
vue ui

我们进入了vue-cli的图形界面

进入任务菜单,选择服务

在这里插入图片描述

点击Run,等待编译部署完成,然后点击Start app

在这里插入图片描述

我们可以看到图形网页。 至于如何把这个网页变成我们想要的样子,就看前端的朋友们了。

虽然我们已经在本地成功运行了智能合约项目,但是我们实际上跳过了一个步骤,就是私有链。 我们目前的私有链是使用与 truffle 集成的 Ganache 一键部署的。 这条私有链是什么,它长什么样子,我们如何控制它? 所以接下来我们要创建自己的私有链。

10 以太坊私链搭建 10.1 安装Go编译器、curl、file、git

sudo apt install build-essential curl file git -y

10.2 安装 brew 包管理器

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

配置环境变量,在同一终端输入

test -d ~/.linuxbrew && eval $(~/.linuxbrew/bin/brew shellenv) 
test -d /home/linuxbrew/.linuxbrew && eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv) 
test -r ~/.bash_profile && echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.bash_profile echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.profile

重启

测试并安装依赖项

如果网络不好,可能会等很久,不用担心

brew install hello

安装go编译器,共475M,注意网络

brew install go

10.3 安装geth

这一步可能会遇到很多不确定的问题。 提供了以下三种方法。 您可以一一尝试。 我成功安装了第二种方法。

方法一:编译git源码

从ftp或者官网下载geth项目压缩包

解压到linux任意目录

在解压出来的目录下打开终端,输入

make geth

详情请看教程

方法二:使用brew package manager安装

brew tap ethereum/ethereum 
brew install ethereum 
brew install geth

方法 3:使用 PPA 为 apt 包管理器添加源

注意:只有Ubuntu系统和debian系统有apt包管理器,其他系统请先尝试其他方法

sudo add-apt-repository -y ppa:ethereum/ethereum 
sudo apt update 
sudo apt install ethereum

10.4 安装solidity

这一步也可能会遇到很多不确定的问题。 提供了以下三种方法。 我用方法三

方法一:使用brew package manager

mac可用,linux目前有一些问题

brew install solidity

方法二:使用snap包管理器

Linux可用

sudo snap install solc

方法 3:使用 PPA 为 apt 包管理器添加源

注意:只有Ubuntu系统和debian系统有apt包管理器,其他系统请先尝试其他方法

sudo add-apt-repository -y ppa:ethereum/ethereum 
sudo add-apt-repository ppa:ethereum/ethereum-dev 
sudo apt update 
sudo apt install solc

10.5 建立私有链

定义私有链初始化配置文件

{
"config": { 
	"chainId": 111, 
	"homesteadBlock": 0, 
	"eip150Block": 0, 
	"eip155Block": 0, 
	"eip158Block": 0, 
	"byzantiumBlock": 0, 
	"constantinopleBlock": 0, 
	"petersburgBlock": 0, 
	"istanbulBlock": 0 },
"alloc": {}, 
"coinbase": "0x0000000000000000000000000000000000000000", "difficulty": "0x20000", 
"extraData": "", 
"gasLimit": "0x2fefd8", 
"nonce": "0x000000000000023d", 
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", 
"timestamp": "0x00" 
}

难度是指挖矿的难度。 低配置机器建议降低难度。 我这里使用默认值20000。

gaslimit是指单次操作消耗的gas的限制

alloc中的内容是预分配的账户地址和余额

chainId 指的是当前链的ID

nonce是指区块链目标nonce值

coinbase是指矿工的基地址

10.6 初始化区块链网络

在 privateChain 中打开一个终端并输入:

geth --datadir dataD init ./genesis.json

创建第一个节点

在 privateChain 中打开终端并输入:

将–rpcaddr参数后的地址替换为本机ip地址。 查看本机ip地址的方法参见查看本机ip地址

geth --datadir dataD --http --http.addr 192.168.126.129 --http.port 8989 --port 3000

geth 命令的详细说明在 github 上

10.7 使用钱包连接私链

在后端开发过程中,不能一直依赖命令行与geth进行交互。 虽然它对程序员非常友好,但太费时且不直观。 我们需要创建一个由其他人编写的图形客户端——钱包。

目前在开发过程中使用了三种常见的钱包,MetaMask和Mist的变种,myetherwallet和parity。

我们在这里使用 MetaMask 作为我们的工具。 MetaMask是一个浏览器插件,不需要像其他钱包一样依赖本地环境运行,非常方便。

安装教程

11 其他 11.1 搭建梯子

由于众所周知的原因,我们通常无法访问托管在 Azune 或 Google 上的项目。 不幸的是,以太坊的许多工具都托管在 Azune 和谷歌上。 所以我们需要一个梯子。 可以使用自己的梯子,没有梯子的可以修改hosts。以下是梯子和修改hosts的方法

sudo cp ./hosts /etc/hosts

如果在后期的开发过程中遇到无法下载某个工具的问题,可以试试看

11.2 查看本地IP地址

如果之前虚拟机硬件配置选择了桥接,这里看到的是与物理机同级的内网地址,可以和物理机通信,通过配置上层路由器可以实现公网访问. 但是如果选择nat的话,这里看到的是物理机作为二级路由的下一级内网地址。 无法直接访问物理机,难以穿透公网。

打开终端并输入:

ifconfig -a

找到下面的字段,就是本机IP地址

在这里插入图片描述

12 一些可能有用的信息

酿造官网

酿造 - GitHub

松露文档

毛毛雨文档

毛毛雨文档

中文以太坊项目实战教程-文档

Solidity 教程 - 视频

从零开始构建以太坊教程 - 视频!错误很多,但一切都很全面,仅建议参考,不建议遵循

在线solidityIDE-Remix

geth - GitHub

以太坊官方收集的信息

web3.js英文文档

web3.js中文文档

vue官网

迷雾 - GitHub

EthFans 指南!推荐

MetaMask下载

MetaMask 文档