day01

以太坊课程安排-5大模块

模块1: 什么是以太坊

  • 以太坊介绍
  • 常见概念
  • 测试
  • ....

模块2: 如何和以太坊交互

  • 钱包
  • 浏览器
  • web3.js
  • ...

模块3: 以太坊开发工具,智能合约测试和部署等

  • solidity
  • 部署测试
  • mocha
  • solc
  • ganache
  • truffle
  • ...

模块4: 以太坊实战项目

  • 彩票项目 fomo3d
  • 众筹项目
  • 数字货币交易所
  • ...

模块5: 细节知识点补充

  • 私链搭建
  • mist操作
  • 面试常见问题
  • 以太坊原理
  • ...

课程目标

  1. 这是如何构建以太坊应用,开发dapp的课程
  2. 不是炒币的课程
  3. 不是底层协议的课程
  4. 就业向导, 以企业的需求和解决实际问题为主
  5. 实战型课程非学术型

课程相关资料

课程开源, github地址

  • http://github.com/itheima1

区块链的十年

为什么要学习Dapp开发

  • 收益高
  • 门槛低
  • 空间大
  • 工具全
  • 不违规

2018年区块链市场分析

  • 挖矿:算力猛增,门槛越来越高,依赖于人工智能挖矿
  • 炒币:二级市场赚钱难度迅速提升,是割韭菜还是被割?
  • 交易所: 数量急剧膨胀, 国内不合法, 政策风险大
  • ICO: 国内不合法,转型私募,投资逻辑变化,回归理性投资
  • 工具服务: 机会多,门槛高, 辛苦钱
  • DApp: 巨大蓝海,机会无限,需要理解区块链,经济系统,用户痛点,具备产品能力.

从信息互联网到价值互联网

区块链机会 财务自由

  1. 野火 0xb1ed364e4333aae1da4a901d5231244ba6a35f9421d4607f7cb90d60bf45578a
  2. 资产转移
  3. 无国界贸易,抗击自裁
  4. 募集资金
  5. 博彩
  6. 避税
  7. 流量收割

以太坊历史

1.比特币

区块链1.0 2008. 10.31 转账

点对点的现金系统

https://baike.baidu.com/item/%E6%AF%94%E7%89%B9%E5%B8%81

  1. 以太坊

区块链2.0 2013.12 智能合约 vitalik

一种执行智能合约的去中心化的平台

https://baike.baidu.com/item/%E4%BB%A5%E5%A4%AA%E5%9D%8A

V神历史

https://en.wikipedia.org/wiki/Vitalik_Buterin

January 31, 1994 (age 24)

4岁就穿T恤玩电脑的Vitalik

Vitalik 在10岁左右就开始自己制作自己的游戏了...

17岁接触比特币,成为比特币周刊的撰稿人

19岁大学辍学,发布以太坊白皮书

20岁获得彼得·蒂尔奖学金、成立非营利组织以太坊基金会,募集到3.1万个比特币

22岁被《财星》杂志评选为2016年40岁以下的40大杰出人物

以太坊发展

https://www.jinse.com/news/blockchain/114134.html

什么是以太坊

  1. 以太坊是一个区块链的网络, 由很多节点组成

  2. 以太坊可以转账,可以做数据存储

  3. 以太坊网络有很多个, 主网只有一个. 还有很多测试网络, 我们也可以自己搭建私链

  4. 以太坊和比特币一样 有很多的node节点组成

  5. 一个node节点其实就是一个运行以太坊客户端的计算机

  6. 以太坊还是公有链, 每个人都可以加入以太坊网络

  7. 每一个以太坊节点都可以同步全部的账本/区块链信息(blockchain)

  8. 可以理解以太坊是一个数据库,存储了所有的转账信息(transaction信息)

如何和以太坊网络交互

  1. 开发者
    web3.js
  2. 一般用户
    metamask(稳定,适合开发测试,也适合小白用户)
    mist浏览器 (很多bug,早期版本)

metamask 官网: https://metamask.io/

mist 官网 : https://github.com/ethereum/mist/releases

如何安装metamask

  1. 安装chrome浏览器. 推荐使用chrome
  2. chrome商店 metamask
  3. 添加安装
  4. 用户协议
  5. 用户密码 12345678
  6. 种子单词 crouch fiction income edge cluster turtle plastic ozone mom predict goddess express
  7. 几个网络介绍(主网,测试网络,几个测试网络的区别)

以太坊的测试网络

以太坊可以搭建私有的测试网络,不过由于以太坊是一个去中心化的平台,需要较多节点共同运作才能得到理想的测试效果,因此并不推荐自行搭建测试网络。

以太坊公开的测试网络共有4个,目前仍在运行的有3个。每个网络都有自己的创世区块和名字,按开始运行时间的早晚,依次为:

  • Morden(已退役)

Morden是以太坊官方提供的测试网络 . 2016年11月时,由于难度炸弹已经严重影响出块速度,不得不退役,Morden的共识机制为PoW。

  • Ropsten

Ropsten也是以太坊官方提供的测试网络,是为了解决Morden难度炸弹问题而重新启动的一条区块链,目前仍在运行,共识机制为PoW。测试网络上的以太币并无实际价值,因此Ropsten的挖矿难度很低,目前在755M左右,仅仅只有主网络的0.07%。这样低的难度一方面使一台普通笔记本电脑的CPU也可以挖出区块,获得测试网络上的以太币,方便开发人员测试软件,但是却不能阻止攻击。

PoW共识机制要求有足够强大的算力保证没有人可以随意生成区块,这种共识机制只有在具有实际价值的主网络中才会有效。测试网络上的以太币没有价值,也就不会有强大的算力投入来维护测试网络的安全,这就导致了测试网络的挖矿难度很低,即使几块普通的显卡,也足以进行一次51%攻击,或者用垃圾交易阻塞区块链,攻击的成本及其低廉。

2017年2月,Ropsten便遭到了一次利用测试网络的低难度进行的攻击,攻击者发送了千万级的垃圾交易,并逐渐把区块Gas上限从正常的4,700,000提高到了90,000,000,000,在一段时间内,影响了测试网络的运行。攻击者发动这些攻击,并不能获得利益,仅仅是为了测试、炫耀、或者单纯觉得好玩儿。

  • Kovan

为了解决测试网络中PoW共识机制的问题,以太坊钱包Parity的开发团队发起了一个新的测试网络Kovan。Kovan使用了权威证明(Proof-of-Authority)的共识机制,简称PoA。

PoW是用工作量来获得生成区块的权利,必须完成一定次数的计算后,发现一个满足条件的谜题答案,才能够生成有效的区块。

PoA是由若干个权威节点来生成区块,其他节点无权生成,这样也就不再需要挖矿。由于测试网络上的以太币无价值,权威节点仅仅是用来防止区块被随意生成,造成测试网络拥堵,完全是义务劳动,不存在作恶的动机,因此这种机制在测试网络上是可行的。

Kovan与主网络使用不同的共识机制,影响的仅仅是谁有权来生成区块,以及验证区块是否有效的方式,权威节点可以根据开发人员的申请生成以太币,并不影响开发者测试智能合约和其他功能。

Kovan目前仍在运行,但仅有Parity钱包客户端可以使用这个测试网络。

  • Rinkeby

Rinkeby也是以太坊官方提供的测试网络,使用PoA共识机制。我们上课采用rinkeby网络

区块链原理回顾

https://anders.com/blockchain/

  1. translation 交易
  2. hash校验
  3. 工作量证明 pow
  4. block成链
  5. 私钥转账签名
  6. web接口
  7. websocket分布式

以太坊的账户系统

地址, 公钥, 私钥

参考黑马程序员手把手写比特币

公钥,私钥,地址长度.

私钥 <==> 公钥

公钥 ==> 地址(短)

账户的注册(qq邮箱,163邮箱,讲解密码的存储)

解释为什么一个账户,全网可用.

账户系统创建的特点

  • 不需要网络
  • 不需要服务商
  • 只是一组publickey和privatekey
  • Address由publickey生成

演示一下如何接收一点以太币

几个以太坊的水龙头
http://rinkeby-faucet.com
http://www.itheima.com/tools/fancet/

view account on ethereum

什么是转账

在不同的网络里面,同一个账户的可能有钱,可能没钱.

银行 开户人 金额 取款密码(存储在银行)
招商银行 张泽华 10000元 123456
建设银行 张泽华 20000元 654321
农业银行 张泽华 15000元 235677
中国银行 张泽华 30000元 876644

不同的银行相当于不同的区块链网络, 同一个开户人在不同银行的存款是不一样的.另外注意, 在传统中心化网络里面,密码是存储在银行的中心化的服务器里面的.

区块链网络 账户地址 金额 私钥(取款用,存储在用户端)
main network 0xd5a2.. 10000 ether 0x358b35069...
Ropsten network 0xd5a2.. 20000 ether 0x358b35069...
kovan network 0xd5a2.. 15000 ether 0x358b35069...
rinkeby network 0xd5a2.. 30000 ether 0x358b35069...

不同的区块链网络, 拥有相同的账户信息. 密码是存储在用户端(private key), 同一个账户在不同的网络里面的余额是不同的.

转账的流程

解释点下确定按钮的流程:

  1. 点击submit
  2. 地址通过get请求发给了服务器
  3. web3.js 创造了一个转账 (translation) (什么是转账,转账包含什么信息)
    • nonce
    • to
    • value
    • gas
    • gaslimit
    • 密码学相关 有privatekey生成
  4. 为什么需要等待, 后台server发送translation 到rinkeby网络
  5. 等待挖矿,30秒左右
  6. 后台服务器把成功信息反馈给前端

30秒的详细流程

  1. translation提交给一个node(如何修改node,选择node?)
  2. node可能在某个时间内收到很多个translation
  3. node对translation排序,挖矿
  4. node算好nonce就会广播给全网
  5. 最先算出nonce的node会得到挖矿奖励

区块时间

区块时间的原理

  1. 区块时间 算0000开头是不科学的. 是简易算法.
  2. 实际算法是计算一个hash 小于某种特殊值.
  3. hash值的范围 0 ~ 1.15x10^77 跟摇色子一样.

区块时间

blocktime = time to find a solution

难度系数

<1000 --> 20s

<10000 --> 5s

<5000 -->17s

<4000 -->15s

http://etherscan.io/chart/blocktime

比特币与以太坊

区块链1.0 ==> 区块链2.0

把转账的函数升级为自定义的函数

编写这个自定义函数就是在编写智能合约

智能合约

什么是合同

一式三份

什么是法律

txt,exe

什么是智能合约

smart contract

“智能合约”(Smart contract)这个术语至少可以追溯到1995年,是由多产的跨领域法律学者尼克·萨博(Nick Szabo)提出来的。他在发表于自己的网站的几篇文章中提到了智能合约的理念,定义如下:

“一个智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议。” 由代码执行的法律或者合同.就是智能合约.

一个由代码控制的账户, 可能与钱打交道的合同

字段 描述
balance 账户余额
storage 智能合约的数据存储
code 智能合约的机器码(二进制机器码)

两种账户类型

  1. 外部账户 (私钥,公钥创建), 全网络都存在
  2. 智能合约账户(部署到某个网络的某一个示例)

智能合约的源码和实例

智能合约源码类似java源代码类的定义

实例是在某个网络上的实例

solidity简介

  1. 扩展名 .sol
  2. 强类型编程语言
  3. 与javascript类似
  4. 一堆坑
  5. 实战为主,智能合约与项目实战的融合

solidity的使用方法

高级语言---> 机器语言

solidity ---> bytecode(机器语言,区块链系统读取)

solidity ---> ABI application binary interface(方便程序员调用)

ABI ---> bytecode

solidity的HelloWorld

  1. 选择编辑器(记事本, idea, atom...)
  2. 建议使用remix http://remix.ethereum.org
  3. 窗口介绍

世界状态

pragma solidity ^0.4.17;  //声明编译器的版本

contract Inbox{            //类似java的声明class
    string public message; 
    
    function setMessage(string newMessage) public{
        message = newMessage;
    }
    
    function getMessage() public view returns(string){
        return message;
    }
}

搭建本地solidity开发环境

  1. 安装nodejs
  2. npm install remix-ide -g
  3. remix-ide

智能合约的结构

pragma solidity ^0.4.17;

指定编译器版本 , 版本标识符, 跟nodejs的版本标记 语法一致

contract Inbox{

}

关键字 contract 跟java的class一样 智能合约是Inbox

string public message

string数据类型 message类的成员变量. 在整个智能合约生命周期都可以访问, public 是访问修饰符, 是storage类型的变量, 成员变量和局部变量

function Inbox (string initMessage) public {

}

函数以function开头.

solidity函数声明

  1. 函数名
  2. 函数签名(返回值,参数类型,修饰符)

修饰符 说明
public 公有,任何人(拥有以太坊账户的)都可以调用
private 私有, 只有智能合约内部可以调用
view/constant 函数不会修改任何contract的数据
pure 函数不使用任何智能合约的变量
payable 调用函数需要付钱,钱付给了智能合约的账户
returns 返回值 函数声明中使用

remix测试智能合约

  1. remix工作原理.
    虚拟的以太坊网络, javascript vm

  2. 控制台, 编译节点, run节点
    environment javascript vm
  3. account 虚拟账户 5个
  4. 创建智能合约,智能合约在网络上的地址是什么
  5. 调用getMessage setMessage
    • set的红色 (send) 发送 transaction请求 至少花费十几秒 (花钱!!!!)
    • get的蓝色 (call) 调用 瞬间 (免费)

智能合约的删除和重新部署

删除智能合约?

删除的是remix里面对智能合约的引用, 智能合约还是在网络上存在的.

区块链上没有删除的操作, 只有更新的操作.

重新部署

观察智能合约的地址是否发生变化

智能合约部署的流程

外部账户,创建智能合约的transaction流程

字段 描述
nonce nonce代表此账户创建的合约序号
to - 空
data 智能合约编译的bytecode
value transaction带的钱 单位wei
gasprice 油价
gaslimit 最大gas量
key 密码学相关信息

以太坊函数细节

setMessage和getMessage

does change blockchain 需要成本

doesn't change blockchain 不需要成本

函数调用call 函数调用 send transaction
不修改智能合约的数据 修改智能合约的数据
函数可以返回数据 函数不能返回数据, 因为函数需要花时间执行
立刻执行 需要几十秒才能执行完毕,返回值是transaction的hash
免费 要花钱 钱!!!

以太坊价值单位换算

1ether = 1,000,000,000,000,000,000 wei

最小的单位就是wei

http://www.itheima.com/tools/convert/index.html

常见单位 和转换关系

gas和转账 gasprice

代码的执行成本

死循环, 申请大内存. 恶意代码病毒?

function doMath(int a, int b){
   a+b;
   a-b;
   a*b;
   a==b;
}

gas costs from yellow paper eip 150 Revision

https://docs.google.com/spreadsheets/d/1n6mRqkBz3iWcOlRem_mO09GtSKEKrAsfO7Frgx18pNU/edit#gid=0

所有的transaction都需要 gasprice gaslimit

gasprice 300

gaslimit 10

开车 , 加油!

算一下doMath函数用多少的gas

通证经济学. 以太坊的任何操作都需要花钱, 谁花钱, 花钱后能得到什么?

http://ethgasstation.info

助记词

每一个都想拥有很多个账户

  • account 1 : 花钱
  • account 2 : 存钱
  • account 3 : 对外账户

由12个单词生成 public key , private key 和 address

bip39协议

https://iancoleman.io/bip39/

获取更多的ether

1.主网获取ether

2.rinkeby 网络获取

3.repston 网络获取

google faucet

高度和视野

  1. 梯子

    阿里云hk服务器一台
    yum update
    yum install python-pip
    pip install s
    vi /etc/s.json

    然后输入如下内容:
    {
    "server":"0.0.0.0",
    "server_port":3389,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"mypassword",
    "timeout":300,
    "method":"aes-256-cfb",
    "fast_open": false
    }

    ssserver -c /etc/s.json
    后台启动和停止s服务器:
    ssserver -c /etc/s.json -d start
    ssserver -c /etc/s.json -d stop

转载于:https://www.cnblogs.com/xiaocongcong888/p/9391977.html

你可能感兴趣的:(day01)