以太坊部署学习笔记(一)

**

1.区块链与以太坊概述

**
1.1区块链的发展
以太坊部署学习笔记(一)_第1张图片
1.1.1 V1.0时代(可编程货币)
区块链1.0仅仅是电子货币,可编程货币
在这里插入图片描述

特点:TPS(Transaction per seconde)低,比特币每秒处理7笔交易,基于栈编程,图灵不完备(无循环语句,不能实现复杂的编程)
1.1.2 V2.0时代(可编程金融)
区块链2.0是可编程⾦融,是经济、市场和金融领域的区块链应用,例如股票、债券、期货、贷款、抵押、产权、智能财产和智能合约。
在这里插入图片描述

代表:以太坊(ETH)、小蚁(NEO)、比原(BTM)
特点:处理速度加快,图灵完备(可以⽤代码实现各种复杂的逻辑)
1.1.3V3.0时代(可编程社会)
区块链与社会,区块链与各个行业融合:物联网、存储(IPFS)、游戏、区块链+ ,通证经济代表:柚子(EOS)Enterprise Operation System 、墨客(MOAC)
在这里插入图片描述
特点:处理速度快,可达到商业级别

1.2区块链协议层
以太坊部署学习笔记(一)_第2张图片
1.2.1 数据层
包括:区块链数据、链式结构、哈希函数、Merkle树、非对称加密、时间戳。
问题:需要突破的就是区块容量的问题。
1.2.2 网络层
P2P 网络、传播机制、验证机制
1.2.3 共识层

  • 共识机制
    共识机制是指可以使所有节点对某一种状态达成一致的形式,有共识机制去中心化才有意义,才具备可信度,否则只是
    数据共享,⽬前主流的共识机制有:POW、POS、DPOS、PBFT
    1.2.4. 激励层
    发⾏机制、分配机制
    token经济,通证经济
    1.2.5. 合约层
  • 智能合约(以太坊课程重点)
    “智能合约”(smart contract)这个术语⾄少可以追溯到1995年,是由多产的跨领域法律学者尼克·萨博(Nick Szabo)提出来的。他在发表在自己的网站的几篇文章中提到了智能合约的理念。他的定义如下: “一个智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议。”
    本质:数字化合同。
    特点:代码代替人仲裁和执行合同,同时能够触发支付。
  • 普通合约示例
  • 以太坊部署学习笔记(一)_第3张图片
  • 智能合约示例
    代码化的合同,去除人的主观因素,一个合约写好以后,就无法再被编辑或者修改。因此,你可以保证无论合约的 内容是什么,它都会无条件执行。
    整个步骤包括: 构建-》存储-》执行
    以太坊部署学习笔记(一)_第4张图片
    智能合约就是一个部署在以太坊区块链上的程序
    1.2.6. 应用层
    DAPP,合约调用

1.3区块链按应用场景分类
1.3.1 公有链

  • 特点
    所有人都可以随时的的加入和退出,每个节点平等,都有权交易和记账,属于开放式。
  • 代表
    比特币、以太坊、EOS、NEO、量子链、比原链、井通链。
    1.3.2. 联盟链
  • 特点
    仅部分人参与,加入和退出需要授权,选定某些节点为记账节点,其他节点可以交易,但无记账权,属于半封闭式。
  • 代表
    R3CEV,全球40多个银行成立的联盟组织,2017年7月成立,共享区块链技术。
    IBM farbric项目
    Linux基金会发起的超级账本(HyperLedger)项立, 2015年成立, farbric 是子项目。
    1.3.3 私有链
  • 特点
    公司内部使用, 可实现更好的权限控制:管理和审计,属于封闭式。
  • 代表
    以太坊可以定制自己的私有链、商业区块链链定制。

1.4 什么是以太坊
1.4.1. 概述
以太坊是运行在一个计算机网络中的软件,它确保数据以及称为智能合约的小程序可以在没有中心协调者的情况下被所 有⽹络中的计算机复制和处理。以太坊的愿景是创建一个无法停止,抗屏蔽(审查)和自我维持的去中心化世界计算 机。
官方网址:https://www.ethereum.org
交易浏览器:https://etherscan.io
github黄皮书:https://github.com/ethereum/yellowpaper
它延伸了比特币的区块链概念:在全球范围的多个计算机上验证,存储,和复制交易数据(因此术语叫“分布式账本”)。以太坊(Ethereum)在这个概念上更进一步,使在全球范围的多个计算机上运行代码成为现实
比特币用来分布式储存数据的,以太坊用来分布式储存数据并且计算。这些小型的电脑运行程序叫做智能合约,合约由参与者在他们自己的机器上通过一种称为 “以太坊虚拟机(EVM)”执行。
主要特点有:

  1. 以太坊是一个区块链的网络,由很多节点组成
  2. 以太坊可以转账,可以做数据存储(通过交易是承载)
  3. 以太坊可以执行程序,程序叫做智能合约,所有节点都运行这个程序
  4. 以太坊网络有很多个,主网只有一个,还有很多测试网络,我们也可以自己搭建私链
  5. 一个node节点其实就是一个运行以太坊客户端的计算机
  6. 以太坊是公有链,每个人都可以自由的加入退出以太坊网络
  7. 每一个以太坊节点都可以同步全部的账本/区块链信息

1.5 与以太坊网络交互
1.5.1. 开发者
web3.js:以太坊项目开发的.js库
1.5.2. 一般用户
Metamask(https://metamask.io/)(浏览器插件,firefox, chrome,适合开发测试,也适合小白用户) 注:我用的是metamask和firefox浏览器,个人感觉这种配置在国内网络环境相对友好
以太坊部署学习笔记(一)_第5张图片
1.5.3. 交互图示以太坊部署学习笔记(一)_第6张图片
几个概念
gas(汽油)(油耗)
由于以太坊是公链,所有人都可以自由的参与,为了防止垃圾数据充斥网络,所以以太坊上规定每一个操作都是要有成本的,这个成本由 gas 来体现,你要转账,部署智能合约,调用智能合约方法,都要消耗一定数量的gas。
gasprice(汽油价格)(油价)
虽然操作消耗gas,但是最终真正花的还是eth,所以就有一个转换率的问题,gasprice就是起到一个汇率的作用,它代表的是一个gas值多少eth,gas*gasprice就是最终的手续费,也就是从你账户扣除的eth。
这种设计就可以保证用户在以太坊上的操作的手续费不会随着eth的价格而发生剧烈的变动(例如:如果eth涨,那么可以调低gasprice来降低手续费),gaslimit(汽油上限) (油箱)以太坊规定,每笔交易的gas最少21000,矿工可以调整这个值,所以最终的花费的gas是不确定的,所以以太坊就设置了gaslimit,这个代表的是最多给矿工这么多gas(防止自己写的合约里面有死循环),如果最终使用的gas少于这个gaslimit,剩余的还会返给你的,但是如果你的gaslimit不足以支付这次交易,那就是不会退回的,并且交易也就失败了,转账的额度也是回不来了,所以你转账设置的limit一定要大于21000。

  • 为什么要有gasprice和gas的概念
    消耗的手续费(eth单位) = gas(int类型) * gasprice(wei单位)
    eth的价格波动剧烈,使用gas和gasprice
    每个操作中gas的成本
    摘自以太坊黄皮书
    以太坊部署学习笔记(一)_第7张图片
    1.6、智能合约
    1.6.1 定义
    “智能合约”(Smart contract)这个术语⾄少可以追溯到1995年,是由多产的跨领域法律学者尼克·萨博(Nick Szabo)提出来的。他在发表于自己的网站的几篇文章中提到了智能合约的理念。 定义如下:“一个智能合约是一套以数字形式定义的承诺(promises),包括合约参与人可以在上面执行这些承诺的协议。”
    通俗地讲,一个由代码控制的账户, 能与钱打交道的合同(程序),就是智能合约。
    1.6.2. 特点
    合约由代码逻辑控制,且能触发支付。合约部署后存储在区块链上,且无法被修改。
    开发语言:solidity,类似JavaScript,专门开发的以太坊语言。
    注,智能合约(smart contract)合约的智能并不是人工智能的意思, 而是灵活的意思,通过它可以便捷的创建一个功能丰富的合约
    某一个智能合约 以太坊部署学习笔记(一)_第8张图片

智能合约有一个规定的账户用来存储,任何用户在使用合约的时候都是与该地址进行交互。以太坊部署学习笔记(一)_第9张图片
1.7 Solidity简介

  1. 以太坊编写智能合约的语⾔为 solidity ,扩展名 .sol
  2. 中文官方手册
  3. 强类型编程语言(变量类型有多种,例如int byte bool struct 等,类型之间转换时需要强转)
  4. 与javascript类似(但是JavaScript是弱类型的语言,一个var关键字自动识别数据类型)
  5. 一堆坑
    1.7.1 Remix本地编译环境
    虽然学习的时候说本地编译是偶尔使用的,但是连接以太坊对我这种小白来说太慢了。所以一般会采用本地编译,当然,如果想使用网页编译器也是可以的(https://remix.ethereum.org),下面介绍本地编译器安装。
    默认采用淘宝npm镜像源,不懂的小伙伴可以网上自行搜索。
    安装:
    cnpm i remix-ide -g
    启动服务:
    remix-ide
    连接本地文件夹:(需要安装remixd)注:cnpm i remixd -g (需要在主界面点击Connect to Localhost)
    Remixd -s D:\path --remix-ide http://localhost:8080
    (终端需要一直保持在线才能一直使用,所以嫌麻烦的小伙伴可以考虑将cmd指令做成文件)
    1.7.2 Remix使用
    以太坊部署学习笔记(一)_第10张图片
    2. 编译合约
    remix编辑器中自动集成了solidity的编译器,所以可以自动编译我们的合约代码
  • 原理
    使用remix,由高级语言变成机器语言
    solidity —> bytecode(机器语言,区块链系统读取)
    solidity —> ABI (application binary interface)(方便程序员调用)
    以太坊部署学习笔记(一)_第11张图片
    其中abi是合约的二进制接口,内容如下:
    [
    {
    “constant”: false,
    “inputs”: [
    {
    “name”: “id”,
    “type”: “uint256”
    }
    ],
    “name”: “setNameById”,
    “outputs”: [
    {
    “name”: “”,
    “type”: “string”
    }
    ],
    “payable”: false,
    “stateMutability”: “nonpayable”,
    “type”: “function”
    },
    {
    “constant”: false,
    “inputs”: [
    {
    “name”: “id”,
    “type”: “uint256”
    }
    ],
    “name”: “getNameById”,
    “outputs”: [
    {
    “name”: “”,
    “type”: “string”
    }
    ],
    “payable”: false,
    “stateMutability”: “nonpayable”,
    “type”: “function”
    },
    {
    “constant”: true,
    “inputs”: [
    {
    “name”: “”,
    “type”: “uint256”
    }
    ],
    “name”: “id_names”,
    “outputs”: [
    {
    “name”: “”,
    “type”: “string”
    }
    ],
    “payable”: false,
    “stateMutability”: “view”,
    “type”: “function”
    },
    {
    “inputs”: [],
    “payable”: false,
    “stateMutability”: “nonpayable”,
    “type”: “constructor”
    }
    ]
    部署到合约后,可以拿到该合约的abi与address,通过这两个,可以精准的找到并调用合约。
    1.7 环境部署(麻烦之处)
    1.设置淘宝镜像。
    2.安装火狐浏览器和小狐狸(metamask)。
    3.安装Remixd和remix-ide。
    4.安装solidity语言—[email protected](版本一定要对,大坑)
    5.安装ganache(模拟以太坊环境的测试文件)
    6.安装geth
    下载链接:https://ethfans.org/wikis/Ethereum-Geth-Mirror
    执行如下命令,确保geth安装成功
    以太坊部署学习笔记(一)_第12张图片
    7.安装node
    安装node之后会自动安装npm命令,使用npm可以非常快捷的安装各种工具包
    node下载链接:https://nodejs.org/zh-cn/,请下载
    ‘长期支持版’的node,如下图
    以太坊部署学习笔记(一)_第13张图片
    安装之后,执行如下命令,确保安装成功
    在这里插入图片描述
    8.安装goland(编译器)
    9.安装node插件
    在goland中安装node模块,进行设置目录,按照图示安装
    以太坊部署学习笔记(一)_第14张图片
    第一步:设置为ES6
    以太坊部署学习笔记(一)_第15张图片

第二步:下载NodeCore模块![在这里插入图片描述](https://img-blog.csdnimg.cn/20200822143041568.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d1bGlrYW5z,size_16,color_FFFFFF,t_70#pic_center以太坊部署学习笔记(一)_第16张图片
第三步:配置Nodejs CoreModules模块,点击OK
以太坊部署学习笔记(一)_第17张图片
注意下图文字,如果左边的Node.js and NPM不存在,那说明本章第一步node插件没有安装成功,请重新安装。
以太坊部署学习笔记(一)_第18张图片
第四步:重启goland,然后创建一个工程,添加文件test.js
输入测试代码:let a= require(‘fs’), 如果能够智能提示require,则表明NodeCore模块有效。配置完成。
10.确保安装了create-react-app命令
这个命令能够下载react空项目,我们基于这个项目进行编写dapp
安装命令如下:
cnpm install create-react-app -g
然后创建一个空的react项目:
create-react-app project
进入到projectname中,执行如下命令:
npm run start
如果能够正常启动,则安装成功。
11.安装以下的包(每次空工程都需要重新安装)
cnpm install web3 --save
cnpm install [email protected] --save
cnpm install semantic-ui-react --save
cnpm install semantic-ui-css --save
cnpm install ipfs-api --save (ipfs库,大大后期要用)

注:作者使用的是windows系统
声明:以太坊作为第二代区块链系统,可以使我们无需进行区块链底层技术的编译,而是以智能合约的形式同以太坊交互,所以以太坊可以说是提供了一个良好的区块链底层服务平台,我们通过部署调用合约可以相对容易的部署我们的DAPP软件,本文主要目的是记载我的学习以太坊的历程,防止跟我一样的萌新踩坑。本系列属于学习笔记,是在他人的基础上增添自己的看法,严禁进行商业用途。(By Xuchangas)

你可能感兴趣的:(区块链)