首页 > 其他分享 >Web3.0-DApp开发热门技术项目实战课程+智能合约编写+交易所的实战项目

Web3.0-DApp开发热门技术项目实战课程+智能合约编写+交易所的实战项目

时间:2023-10-21 09:44:40浏览次数:47  
标签:实战 Web3.0 以太 DApp 哈希 中心化 web3 区块 合约

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服务器读取和写入数据。

  1.   const web3 = new Web3(
  2.   web3.givenProvider || "http://localhost:8584"
  3.   );
  4.   //获取当前节点下的账号信息
  5.   const accounts = await web3.eth.requestAccount()//会返回当前的账号
  6.   console.log("accounts",accounts)

 DApp

DApp的部分或者全部逻辑是被存储在去中心化的网络中,而这个去中心化的网络在区块链的时间叫做公有链。前端加智能合约,构成DApp

MetaMask

MetaMask是一个浏览器插件,可作为MetaMask Chrome扩展或Firefox附加组件使用。它的核心是它作为以太坊钱包:通过安装它,可以访问一个独特的以太坊钱包地址,使用它开始发送和接收以太币或ERC20通证。可以交易查看自己的以太坊币。

但MetaMask不仅仅是以太坊钱包,作为浏览器扩展,他可以与你正在浏览的当前网页进行交互。它通过在访问的每个网页注入一个名为web3.js的javascript库来实现,注入后,web3将通过window.web3的js代码为访问的每个页面提供一个对象。

 

标签:实战,Web3.0,以太,DApp,哈希,中心化,web3,区块,合约
From: https://www.cnblogs.com/add1188/p/17778484.html

相关文章

  • 接入层高可用架构设计:EdgeOne实战
    1. 背景接触多家客户后,发现大家的接入层架构大都如下图所示,WAF/DDoS组件客户要么选其中之一,要么都不选或自荐。CLB后面挂CVM,CVM上面部署Nginx或者Kong等组件。从这个架构图可以看出,客户有考虑高可用,但仅关注自己的组件层面,没有关注外部基础设施(如DNS)、政策法规的影响、运营商......
  • hadoop集群 大数据项目实战_电信用户行为分析_day04
    进行HIVE环境配置1.上传相关的包 2.对上传的包进行下载和创建软连接 3.配置相关的文件4.分别发送给其他机子 假设你需要在所有机器执行同一个指令,则你就需要相关设置  5.在hive的onf文件中创建hive-site.xml进行相关设置```xml<configuration><--元数据存......
  • 游戏服务器性能压测实战分析
    今天遇到一个性能压测的问题,也是很多同学做游戏服务器开发经常会遇到的,今天记录一下分享给大家。 性能压测遇到的问题 服务器硬件情况: 8核16G服务器,  带宽1000M,redis假设在独立的内网云服务上,通过内网连接;性能压测:压测功能接口1: 查询当前服务器的时间戳,并返......
  • Java对接科大讯飞星火大模型实战
    Java对接讯飞认知大模型教程,先注册账号领取免费测试额度获取个人免费额度个人免费购买星火认知大模型V2.0获取秘钥平台地址:讯飞开放平台pom.xml文件<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>s......
  • 实战攻防演练--利用微软自带Certutil命令ByPassAV上传C2
    CertutilCertutil.exe是Windows操作系统中的合法程序,主要用于管理证书相关操作。它提供了转储和显示证书颁发机构(CA)的配置信息、配置证书服务、备份和还原CA组件,以及验证证书、密钥对和证书链等功能,然而,由于其功能强大,很多攻击者滥用Certutil.exe程序将其用于攻击辅助,常用于远程......
  • 数组和切⽚ - Go语言从入门到实战
    数组和切⽚-Go语言从入门到实战数组的声明packagemainimport"fmt"funcmain(){vara[3]int//声明并初始化为默认零值a[0]=1fmt.Println("a:",a)//输出:a:[100]b:=[3]int{1,2,3}//声明同时初始化fmt.Println("b:",b)//......
  • Map声明、元素访问及遍历、⼯⼚模式、实现 Set - GO语言从入门到实战
    Map声明、元素访问及遍历-GO语言从入门到实战Map声明的方式m:=map[string]int{"one":1,"two":2,"three":3} //m初始化时就已经设置了3个键值对,所以它的初始长度len(m)是3。m1:=map[string]int{}//m1被初始化为一个空的map,然后通过m1["one"]=1添加了一个键值......
  • shell脚本自动化实战
    Shell脚本自动化部署实战(二)原创 叶凡Jonas 软件测试成长之路 2023-09-0100:00 发表于上海收录于合集#UI自动化系列54个三丶shell语法4.程序结构2.循环结构说明:在上一篇博客中讲到了for循环,现在开始讲解while循环a)格式while[条件]do 命令done示例1:变量......
  • Flex 布局项目实战,好像没那么难!
    在上篇文章别再用float布局了,flex才是未来!中,我们聊到Flex布局才是目前主流的布局方式。在文章最后,我们还贴了一个案例,并且还浅浅地讲解了一下。有些小伙伴说,这讲解得太粗了,要是能够再深入讲解一下,顺便把代码分享分享就好了。那么,今天我们就继续来扒一扒这个项目的布局实现。......
  • 【matplotlib 实战】--气泡图
    气泡图是一种多变量的统计图表,可以看作是散点图的变形。与散点图不同的是,每一个气泡都表示三个维度的数据,除了像散点图一样有X,Y轴,气泡的大小可以表示另一个维度的数据。例如,x轴表示产品销量,y轴表示产品利润,气泡大小代表产品市场份额百分比。它可以帮助我们发现变量之间的模式、趋......