Uniswap去中心化交易所流动性挖矿开发功能丨Uniswap去中心化交易所流动性挖矿系统开发详细方案及代码分析

简介:   Web3.0:指移动互联网后下一阶段的互联网生态,主要通过区块链等技术手段实现去中心化的网络形式,实现可以模拟现实世界感受,能够打破虚拟与现实边界的互联网。

  Web3.0:指移动互联网后下一阶段的互联网生态,主要通过区块链等技术手段实现去中心化的网络形式,实现可以模拟现实世界感受,能够打破虚拟与现实边界的互联网。

  Web1.0→Web2.0→Web3.0

  Web1.0是Web的“可读取”阶段,用户之间的互动是有限的,就像早期的桌面网页;

  Web2.0是Web的“可交互”阶段,用户可以与网站或其他人进行交互和互动,就是如今的社交网络、移动网络、云计算等;

  Web3.0是网络的“可执行”阶段,计算机可以像人类一样解释信息,然后为用户生成个性化内容,如今正在大力发展的人工智能、边缘计算等。

  UniswapV2ERC20解析

  UniswapV2ERC20的接口实现合约如下:

  contract UniswapV2ERC20 is IUniswapV2ERC20{

  using SafeMath for uint;

  string public constant name='Uniswap V2';

  string public constant symbol='UNI-V2';

  uint8 public constant decimals=18;

  uint public totalSupply;

  mapping(address=>uint)public balanceOf;

  mapping(address=>mapping(address=>uint))public allowance;

  bytes32 public DOMAIN_SEPARATOR;

  //keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");

  bytes32 public constant PERMIT_TYPEHASH=0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;

  mapping(address=>uint)public nonces;

  event Approval(address indexed owner,address indexed spender,uint value);

  event Transfer(address indexed from,address indexed to,uint value);

  constructor()public{

  uint chainId;

  assembly{

  chainId:=chainid

  }

  DOMAIN_SEPARATOR=keccak256(

  abi.encode(

  keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),

  keccak256(bytes(name)),

  keccak256(bytes('1')),

  chainId,

  address(this)

  )

  );

  }

  function _mint(address to,uint value)internal{

  totalSupply=totalSupply.add(value);

  balanceOf[to]=balanceOf[to].add(value);

  emit Transfer(address(0),to,value);

  }

  function _burn(address from,uint value)internal{

  balanceOf[from]=balanceOf[from].sub(value);

  totalSupply=totalSupply.sub(value);

  emit Transfer(from,address(0),value);

  }

  function _approve(address owner,address spender,uint value)private{

  allowanceowner=value;

  emit Approval(owner,spender,value);

  }

  function _transfer(address from,address to,uint value)private{

  balanceOf[from]=balanceOf[from].sub(value);

  balanceOf[to]=balanceOf[to].add(value);

  emit Transfer(from,to,value);

  }

  function approve(address spender,uint value)external returns(bool){

  _approve(msg.sender,spender,value);

  return true;

  }

  function transfer(address to,uint value)external returns(bool){

  _transfer(msg.sender,to,value);

  return true;

  }

  function transferFrom(address from,address to,uint value)external returns(bool){

  if(allowancefrom!=uint(-1)){

  allowancefrom=allowancefrom.sub(value);

  }

  _transfer(from,to,value);

  return true;

  }

  function permit(address owner,address spender,uint value,uint deadline,uint8 v,bytes32 r,bytes32 s)external{

  require(deadline>=block.timestamp,'UniswapV2:EXPIRED');

  bytes32 digest=keccak256(

  abi.encodePacked(

  'x19x01',

  DOMAIN_SEPARATOR,

  keccak256(abi.encode(PERMIT_TYPEHASH,owner,spender,value,nonces[owner]++,deadline))

  )

  );

  address recoveredAddress=ecrecover(digest,v,r,s);

  require(recoveredAddress!=address(0)&&recoveredAddress==owner,'UniswapV2:INVALID_SIGNATURE');

  _approve(owner,spender,value);

  }

  }

  首先为unit类型加上SafeMath的方法

  using SafeMath for uint;

  然后定义一些所需要变量以及常量

  //token的名字

  string public constant name='Uniswap V2';

  //token的symbol

  string public constant symbol='UNI-V2';

  //token所支持的精度

  uint8 public constant decimals=18;

  //token的总供应量

  uint public totalSupply;

  //地址与余额之间的映射

  mapping(address=>uint)public balanceOf;

  //授权交易与授权交易数额之间的映射

  mapping(address=>mapping(address=>uint))public allowance;

  //EIP712所规定的DOMAIN_SEPARATOR值,会在构造函数中进行赋值

  bytes32 public DOMAIN_SEPARATOR;

  //EIP712所规定的TYPEHASH,这里直接硬编码的keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)")所得到的值

  bytes32 public constant PERMIT_TYPEHASH=0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;

  //地址与nonce之间的映射

  mapping(address=>uint)public nonces;

  定义event

  //授权event

  event Approval(address indexed owner,address indexed spender,uint value);

  //交易event

  event Transfer(address indexed from,address indexed to,uint value);

  构造函数

  constructor()public{

  //当前运行的链的标识

  uint chainId;

  assembly{

  //内联汇编,获取链的标识

  chainId:=chainid

  }

  //获取DOMAIN_SEPARATOR

  DOMAIN_SEPARATOR=keccak256(

  abi.encode(

  keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),

  keccak256(bytes(name)),

  keccak256(bytes('1')),

  chainId,

  address(this)

  )

  );

  }

  铸币方法这个方法主要的目的是向某个地址发送一定数量的token。

  function _mint(address to,uint value)internal{

  totalSupply=totalSupply.add(value);

  balanceOf[to]=balanceOf[to].add(value);

  emit Transfer(address(0),to,value);

  }

  销毁方法这个方法主要的目的是销毁某个地址的所持有的token。

  function _burn(address from,uint value)internal{

  balanceOf[from]=balanceOf[from].sub(value);

  totalSupply=totalSupply.sub(value);

  emit Transfer(from,address(0),value);

  }

  授权私有方法这个方法的逻辑也非常简单,就是修改allowance对应的映射并发出event

  function _approve(address owner,address spender,uint value)private{

  allowanceowner=value;

  emit Approval(owner,spender,value);

  }

  approve授权方法直接调用的授权的私有方法,并返回true

  function approve(address spender,uint value)external returns(bool){

  _approve(msg.sender,spender,value);

  return true;

  }

  permit授权方法该方法的参数具体含义可以查询EIP2612中的定义。

  function permit(address owner,address spender,uint value,uint deadline,uint8 v,bytes32 r,bytes32 s)external{

  //检查时效时间是否超时

  require(deadline>=block.timestamp,'UniswapV2:EXPIRED');

  //构建电子签

  bytes32 digest=keccak256(

  abi.encodePacked(

  'x19x01',

  DOMAIN_SEPARATOR,

  keccak256(abi.encode(PERMIT_TYPEHASH,owner,spender,value,nonces[owner]++,deadline))

  )

  );

  //验证签名并获取签名信息的地址

  address recoveredAddress=ecrecover(digest,v,r,s);

  //确保地址不是0地址并且等于token的owner

  require(recoveredAddress!=address(0)&&recoveredAddress==owner,'UniswapV2:INVALID_SIGNATURE');

  //进行授权

  _approve(owner,spender,value);

  }

  转账私有方法该方法实现了一个转账的逻辑,具体逻辑也非常简单,就是将from对应的banlanceOf减去value,to对应的balanceOf加上value,最后发出Transferevent

  function _transfer(address from,address to,uint value)private{

  balanceOf[from]=balanceOf[from].sub(value);

  balanceOf[to]=balanceOf[to].add(value);

  emit Transfer(from,to,value);

  }

  转账方法token的拥有这直接调用的方法,将token从拥有者身上转到to地址上去

  function transfer(address to,uint value)external returns(bool){

  _transfer(msg.sender,to,value);

  return true;

  }

  授权转账方法在执行该方法之前,需要通过approve授权方法或者permit授权方法进行授权。转账之前需要确认msg.sender在allowance中是否有值,如果有值就减去对应的金额。

  function transferFrom(address from,address to,uint value)external returns(bool){

  if(allowancefrom!=uint(-1)){

  //减去对应的授权额度

  allowancefrom=allowancefrom.sub(value);

  }

  _transfer(from,to,value);

  return true;

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
安全 区块链 数据安全/隐私保护
LP流动性质押挖矿开发模式丨dapp流动性挖矿系统开发源码现成
什么是流动性mining?流动性mining主要是通过提供通证资产进而获取收益。简单来说就是,存入某些通证资产便可对其进行mining。存入某些通证资产便可对其进行mining。之所以会被称为mining也是因为保留了BTCmining的行业说法。流动性mining是一种有助于去中心化通证流通的途径,LP(流动性提供者)通过向流动capital池提供流动性/注入capital,
|
存储 区块链
DAPP/LP/DEFI智能合约流动性质押挖矿系统开发(详细及方案)丨源码案例
智能合约事实上是由计算机代码构成的一段程序,其缔结过程是:第一步,参与缔约的双方或多方用户商定后将共同合意制定成一份智能合约;
|
存储 人工智能 边缘计算
什么是DAPP智能合约系统开发?DAPP智能合约流动性质押挖矿分红逻辑系统开发详情方案及设计
  Web 3.0:指的移动互联网后的下一个阶段的互联网生态,主要是通过区块链等技术手段,实现去中心化的网络形态,实现模拟真实世界感受、打破虚拟、现实边界的互联网;
什么是DAPP智能合约系统开发?DAPP智能合约流动性质押挖矿分红逻辑系统开发详情方案及设计
|
存储 前端开发 JavaScript
浅谈DAPP智能合约流动性质押挖矿分红系统开发技术分析及代码部署
“Web3.0”是一个用户共建、隐私保护、平台开放的生态体系。相比“Web2.0”,“Web3.0”的目标是实现一个更加开放、零信任或是低信任、无许可的价值互联网时代。其生态体系主要由“Web3.0钱包”、“稳定币”、“公链”、“NFT”、“GameFi”、“去中心化存储”、“Dapp”、“DAO”、“DeFi”构成。
浅谈DAPP智能合约流动性质押挖矿分红系统开发技术分析及代码部署
|
存储 前端开发 JavaScript
dapp/defi智能合约流动性LP质押挖矿系统开发(开发源码案例)丨成熟技术
Dapp:代表去中心化应用程序。它们是在去中心化网络或区块链上运行后端代码(主要用Solidity编写的智能合约)的应用程序。可以使用React、Vue或Angular等前端框架构建Dapp。
|
存储 算法 区块链
dapp/defi代币流动性挖矿系统开发(详情及方案)丨dapp/defi代币流动性挖矿系统开发(案例及功能)
     智能合约是运行在区块链系统可复制、共享账本上的计算机程序,可以处理信息,接收、储存和发送价值。基于区块链技术的智能合约,不仅可以发挥智能合约在成本效率方面的优势,而且可以避免恶意行为对合约正常执行的干扰。将智能合约以数字化的形式写入区块链中,由区块链技术的特性保障存储、读取、执行整个过程透明可跟踪、不可篡改。同时,由区块链自带的共识算法构建出一套状态机系统,使智能合约能够高效地运行。
|
5G 区块链 vr&ar
DAPP智能合约流动性质押挖矿分红开发案例版丨DAPP智能合约流动性质押挖矿分红系统开发(开发案例及源码)
The metauniverse is an immersive digital world created by the combination of virtual reality,augmented reality and the Internet.The connotation and key technologies of the metauniverse require further breaking the space-time limit(5G and the Internet of Things),real immersion(VR),and value transmi
|
区块链 索引
DAPP/LP代币智能合约流动性质押挖矿互助公排开发需求丨DAPP/LP代币智能合约流动性质押挖矿互助公排系统开发详细及方案
 以区块链为核心的数字科技可以推动信息技术服务,从而促进数字产业化;元宇宙可以创造和创新更广泛的应用场景,拉动信息消费促进产业数字化。因此,以区块链为核心的Web3.0技术体系推动形成的元宇宙数字生态,将对数字产业化和产业数字化提供有力支撑,为数字经济高质量发展打造新引擎。
|
区块链
区块链DEFI质押项目系统开发丨土狗币智能合约开发方案
This article is compiled and released by WeChaT: kaifa873, which is only for reference of project development requirements! telegram @ sleu88
177 0
|
人工智能 前端开发 Java
深入分析uniswap丨justswap丨pancakeswap去中心化交易所流动性质押挖矿系统开发(web3.0技术源码)
 元宇宙是上层建筑,Web3.0是基础设施,元宇宙和Web3.0均代表互联网的未来,Web3.0是技术发展方向的未来,元宇宙是应用场景和生活方式的未来,二者之间是相辅相成、一体两面的依存关系。Web3.0技术方向包含了区块链、人工智能、大数据等技术创新和DAO(即用户共识社区)网络组织模式创新。在元宇宙中,AR/VR解决元宇宙前端的技术需要,而Web3.0在后端提供强有力的技术支撑。

热门文章

最新文章