web1.0~3.0,很多年前,互联网没有那么发达,刚出来的时候,仅仅只能在网上浏览观看信息,这就是1.0,后来出现了很多的软件,人们不仅可以浏览还可以发表自己的看法,手机app百花齐放,每个应用都有自己的数据库,存储数据,这就是2.0,现如今出现了3.0,去中心化的思想摆脱了数据库,即可实现不用数据库也可以使用的DAPP。
用户创造内容后不是成为大厂的内容和数据,而是自己拥有其所有权,谁想使用,必须要经过授权或是付费只用,也就是说内容的创造者也是内容的拥有者。
web3.0生态包括:
去中心化身份,用户界面,去中心化应用,去中心化存储,去中心化通信计算,零信任。低信任交互协议(区块链)
区块链的透明溯源,稳定币和中央银行数字货币,创造者经济,链游。
什么是区块链?
区块链是一种新型去中心化协议,能安全地存储比特币交易或其它数据,信息不可伪造和篡改,可以自动执行智能合约,无需任何中心化机构的审核。 交易既可以是比特币这样的数字货币,也可以是债权、股权、版权等数字资产,区块链技术解决了拜占庭将军问题,大大降低了现实经济的信任成本与会计成本,重新定义了互联网时代的产权制度。
区块链(Blockchain)是由节点参与的分布式数据库系统, 它的特点是不可更改,不可伪造,也可以将其理解为账簿系统(ledger)。它是比特币的一个重要概念,完整比特币区块链的副本,记录了其代币(token)的每一笔交易。通过这些信息,我们可以找到每一个地址,在历史上任何一点所拥有的价值。
区块链是由一串使用密码学方法产生的数据块组成的,每一个区块都包含了上一个区块的哈希值(hash),从创始区块(genesis block)开始连接到当前区块,形成块链。每一个区块都确保按照时间顺序在上一个区块之后产生,否则前一个区块的哈希值是未知的。 这些特征使得比特币的双花(double-spending)非常困难。区块链是比特币的核心创新。
区块链概念的出现,首先是在中本聪的比特币白皮书[2]中提到的,但是以工作量证明链(proof-of-work chain)的形式而存在,以下是中本聪对区块链概念的描述:
时间戳服务器通过对以区块(block)形式存在的一组数据,实施随机散列而加上时间戳,并将该随机散列进行广播,就像在新闻或世界性新闻组网络(Usenet)的发帖一样 。 显然,该时间戳能够证实特定数据必然于某特定时间是的确存在的,因为只有在该时刻存在了才能获取相应的随机散列值。 每个时间戳应当将前一个时间戳纳入其随机散列值中,每一个随后的时间戳都对之前的一个时间戳进行增强(reinforcing),这样就形成了一条链(Chain)。
区块链应用:众筹行为,公证书,供应链,股权证等。我们所写的驱动区块链的程序就是DAPP。区块链就像是database,所有的操作都将被记录在区块链上,不可删除。
以太坊
以太坊是一个开源的有智能合约功能的公共区块链平台,通过其专业加密货币以太币Ether,简称ETH,提供去中心化的一台虚拟机来处理点对点合约。我们可以利用以太坊平台来部署我们自己的智能合约,但是每一次的交易被记录下来都需要算法,需要花一定的费用支付给矿工,简单理解就是每次的交易都会生成一道算法题,然后能够解决的矿工会收取一定的费用或者小费,同时交易记录会被记录在区块链上。
哈希算法
将任意长度的二进制值串映射为固定长度的二进制值串,这个映射的的规则就是哈希算法,而通过原始数据映射之后得到的二进制值串就是哈希值。
构成哈希算法的条件:
从哈希值不能反向推导出原始数据(所以哈希算法也叫单项哈希算法)
对输入数据非常敏感,哪怕原始数据修改了一个Bit,最后得到的哈希值也大不相同
散列冲突的概率要很小,对于不同的原始数据,哈希值相同的概率非常小
哈职算法的执行效率要尽量高效,针对较长的文本,也能快速的计算出哈希值
智能合约
solidity应该属于后端语言,是一种智能合约高级语言,运行在Ethereum虚拟机(EVM)上,借鉴了很多语言,包括js,c++等,但是和传统的后端语言java等web2.0的后端有很大区别,web3.0提出 去中心化,通俗来说,就是指不再有传统后端那种,请求服务器,从数据库存储或者读取数据,而是在区块链的基础上记录每一个发生的事件,不需要数据库的存储。
以太坊底层是基于账户,而非UTXO的,所以有一个特殊的Address的类型,用于定位用户,定位合约,定位合约的代码(合约本身也是一个账户)。
由于语言内嵌框架是支持支付的,所以提供了一些关键字,如payable,可以在语言层面直接支持支付,而且超级简单。
存储是使用网络上的区块链,数据的额每一个状态都可以永久储存,所以需要确定变量使用内存,还是区块链。
运行环境是在去中心化的网络上,会比较强调合约或函数执行的调用方式。因为原来一个简单的函数调用变为了一个网络上的节点中的代码执行,分布式的感觉。
最后一个非常大的不同则是它的异常机制,一旦出现异常,所有的执行都将会被撤回,这主要是为了保证合约执行的原子性,以避免中间状态出现的数据不一致。
paragma solidity ^0.4.0
contract Helloworld{
uint balance;
fuunction update(uint amount) returns (address,uint){
balance+=amount;
return (msg.sender,balance)
}
}
Web3.js
智能合约写好以后,部署到以太坊,前端不需要发送请求,但是要和合约交互,那么就需要Web3.js库
Web3.js是一个库,他有很多的函数,使它可以在以太坊生态系统中通过HTTP或IPC与本地或者以太坊远程节点交互,如查看链上信息等。
各种高级语言编写的程序可以适应web3 interface来与EVM交互,再次过程中使用时JSON-RPC(一个无状态且轻量级的远程过程调用(RPC)传送协议,其传递内容透过JSON为主)
可以使用web3.js来读取和写入以太坊区块链,而不是使用ajax从web服务器读取和写入数据。
const web3 = new Web3(
web3.givenProvider || "http://localhost:8584"
);
//获取当前节点下的账号信息
const accounts = await web3.eth.requestAccount()//会返回当前的账号
console.log("accounts",accounts)
DApp
DApp的部分或者全部逻辑是被存储在去中心化的网络中,而这个去中心化的网络在区块链的时间叫做公有链。前端加智能合约,构成DApp
MetaMask
MetaMask是一个浏览器插件,可作为MetaMask Chrome扩展或Firefox附加组件使用。它的核心是它作为以太坊钱包:通过安装它,可以访问一个独特的以太坊钱包地址,使用它开始发送和接收以太币或ERC20通证。可以交易查看自己的以太坊币。
但MetaMask不仅仅是以太坊钱包,作为浏览器扩展,他可以与你正在浏览的当前网页进行交互。它通过在访问的每个网页注入一个名为web3.js的javascript库来实现,注入后,web3将通过window.web3的js代码为访问的每个页面提供一个对象。