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流动性质押挖矿分红系统开发实现技术原理及详情
Web3.0这个名字出现得比区块链更早。但在区块链兴起之前,Web3.0因缺乏解决方案只能停留在概念阶段。随着区块链技术的发展和加密货币投资者的增多,以太坊、Polkadot等区块链生态中涌现出一批与Web3.0相关的项目。因此,区块链技术奠定了Web3.0发展的基础。就整个区块链行业而言,多链并存的格局还会持续很长时间。在这种情况下,不同区块链生态的Web3.0用户有进行交互的需求,跨链技术会在这个过程中发挥重要作用。
关于智能合约DAPP流动性质押挖矿分红系统开发实现技术原理及详情
|
存储 人工智能 边缘计算
什么是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
|
区块链
区块链DEFI质押项目系统开发丨土狗币智能合约开发方案
This article is compiled and released by WeChaT: kaifa873, which is only for reference of project development requirements! telegram @ sleu88
169 0