web3.0入门
初始3.0
web1.0:信息投喂
互联网基本上是“只读"模式的,网民可以登录各大门户网站 浏览和阅读任何想要看到的新鲜资讯,但只能看不能互动
web2.0:信息交互
user generate content,用户可以自己制作、分发内容并成为具有重要影响力的大V,直接影响平台的数据和流量,但是由此形成的流量再转化成的经济效益却跟我们没啥关系
web3.0:信息开发与自治
用户创造内容后不是成为大厂的内容和数据,而是自己拥有其所有权,谁想使用,必须要经过授权或者是付费使用,也就是说,用户是内容的创造者也是内容的拥有者。
3.0方向:区块链的透明溯源、稳定币和中央银行数字货币、创造者经济、链游
认识区块链
一、什么是区块链
- 网络
- 数据库
- 计算机
二、区块链应用
- 众筹行为
- 公证书
- 供应链
- 股权证
理解:区块链可以当成计算机可以来运行程序,这个程序就是我们写的去中心化的DApp,通过DApp可以往区块链中存储数据,得益于区块链本身就是一个"db",用户必须在区块链上创建一个账户,将来利用账户连接到DApp上,让DApp往区块链记录信息,一旦记录,信息就会永久的存在
以太坊介绍
以太坊(Ethereum)是一个开源的有智能合约功能的公共区块链平台,通过其专用加密货币以太币(Ether,简称"ETH")提供去中心化的以太虚拟机(Ethereum Virtual Machine)来处理点对点合约
以太坊的概念首次在2013至2014年间由程序员Vitalik Buterin受比特币启发后提出,大意为下一代加密货币与去中心化应用平台
,在2014年通过ICO众筹开始得以发展,截至2018年2月,以太币是市值第二高的加密货币,仅次于比特币。
一、哈希算法(Hash Function)
将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。
构成哈希算法的条件:
- 从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法)
- 对输入数据非常敏感,哪怕原始数据只修改了一个Bit,最后得到的哈希值也大不相同
- 散列冲突的概率要很小,对于不同的原始数据,哈希值相同的概率非常小
- 哈希算法的执行效率要尽量高效,针对较长的文本,也能快速地计算出哈希值
二、Solidity语言简述
Solidity是一种智能合约高级语言,运行在Ethereum虚拟机 (EVM)之上
它的语法接近于Javascript,是一种面向对象的语言。但作为一种真正意义上运行在网络上的去中心合约,它又有很多的不同,下面列举一些:
- 以太坊底层是基于帐户,而非UTXO的,所以有一个特殊的
Address
的类型。用于定位用户,定位合约,定位合约的代码(合约本身也是一个帐户)。 - 由于语言内嵌框架是支持支付的,所以提供了一些关键字,如payable,可以在语言层面直接支持支付,而且超级简单。
- 存储是使用网络上的区块链,数据的每一个状态都可以永久存储,所以需要确定变量使用内存,还是区块链。
- 运行环境是在去中心化的网络上,会比较强调合约或函数执行的调用的方式。因为原来一个简单的函数调用变为了一个网络上的节点中的代码执行,分布式的感觉。
- 最后一个非常大的不同则是它的异常机制,一旦出现异常,所有的执行都将会被回撤,这主要是为了保证合约执行的原子性,以避免中间状态出现的数据不一致。
三、Web3.js
Web3.js是一个库,它有很多函数,使用它可以在以太坊生态系统中通过HTTP或IPC与本地或者以太坊远程节点交互,如查看链上信息等
各种高级语言编写的程序可以使用web3 interface
来与EVM
交互,在此过程中使用是的JSON-RPC (一个无状态且轻量级的远程过程调用(RPC) 传送协议,其传递内容通过JSON为主)
我们可以使用web3.js来读取和写入以太坊区块链,而不是使用ajax从Web服务器读取和写入数据
DApp
DApp的部分或全部逻辑是被存储在去中心化网络中的,而这个去中心化网络在区块链的世界里是叫做公有链。
MetaMask
MetaMask是一个浏览器插件 ,可作为MetaMask Chrome扩展或Firefox附加组件使用。它的核心是它作为以太坊钱包:通过安装它,您将可以访问一个独特的以太坊钱包地址,您可以使用它开始发送和接收以太币或ERC20通证。
但MetaMask不仅仅是以太坊钱包。作为浏览器扩展,它可以与您正在浏览的当前网页进行交互。它通过在您访问的每个网页中注入一个名为web3.js的JavaScript库来实现。 注入后, web3将通过window.web3的JavaScript代码为你访问的每个网页提供一个对象。
流程:
-
创建新钱包
-
创建密码
-
安全钱包创建助记词 助记词->私钥->公钥地址(推导,不可逆)
-
验证完毕
-
公钥:0x3b9b26Fe426A24Fe94940c760f41c81C40b38F0d 公钥可公开,这个公钥地址就是未来在区块链中交流的账号地址,也是钱包地址,别人给你转账就是通过这个地址
-
私钥:在插件里我们可以导出我们的私钥保存,不可公开,后续在新的设备可以通过导入私钥的方式添加账户,(查看账户详情可导出私钥)
总结:
MetaMask是一个浏览器插件,他的作用是能够显示在以太坊的资产,而且插件能够辅助我们和智能合约程序进行互动,在这个小的工具里连接到不同的网络中,不同的网络对应不同的区块链,链接过去形成了不同的子账号,对应的资产不一样,但是对用户展示的就是同一个账号,这个插件嵌入到浏览器,通过window.web3
就可以使用里面的方法和以太坊的区块链进行交互
本地区块链
Ganache是一个用于本地开发的区块链,可以部署本地开发的去中心化的应用程序,Ganache模拟了以太坊网络,你可以在发布到生产环境之前看到你的DApp将如何执行
所以我们需要通过ganache来帮我们模拟一个以太坊的节点。测试通过后可以直接切换使用真实的以太坊的账号和区块节点就可以了
图形化:https://trufflesuite.com/ganache/
Node:cnpm i ganache -g
,https://github.com/trufflesuite/ganache
启动:ganache
命令,生成了10个账号
我们通过ganache命令来模拟一个以太坊的节点,但是每次启动后账号就变化,所以可以使用-d参数来使用上一次的账户,保持账户不变,不用重新导入
ganache -d
流程:
-
复制一些Private key在插件中导入
-
手动添加网络选择本地地址 ganache启动后生成一个RPC地址如:
127.0.0.1:8545
还有链Id也可在控制台看到 -
网络连接到dol测试地址时,就可以看到测试账号里的金额了
转账流程:
-
本地测试的账号都有以太坊币,进行转账测试
-
进入Account3,点击发送,输入Account2账户,输入金额
-
需要燃料费给旷工,支付成功后可看到各自的金额
web3.js
https://github.com/web3/web3.js
Web3.js是一个库, 它有很多函数,使用它可以在以太坊生态系统中通过HTTP或IPC与本地或者以太坊远程节点交互,如查看链上信息等
各种高级语言编写的程序可以使用web3 interface来与EVM交互,在此过程中使用的是JSON-RPC(一个无状态且轻量级的远程过程调用(RPC)传送协议,其传递内容通过JSON为主)
我们可以使用web3.js来读取和写入以太坊区块链,而不是使用ajax从Web服务器读取和写入数据
直接使用cdn方式如下:
<script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script>