PAXG子母单双币系统开发/算力分红/智能合约开发/方案项目/详细逻辑/玩法设计/源码成熟

简介: 以太坊采用了Solidity作为智能合约语言,Solidity是一门为实现智能合约而创建的高级编程语言,能在允许以太坊程序的节点上运行。

  智能合约技术

以太坊采用了Solidity作为智能合约语言,Solidity是一门为实现智能合约而创建的高级编程语言,能在允许以太坊程序的节点上运行。

  该语言吸收了C++、JavaScript的一些特性,例如它是静态类型语言,支持继承、库等。

  区块链本质上是一种去中心化的分布式数据库,是分布式数据存储、多中心的点对点传输、共识机制和加密算法等多种技术在互联网时代的创新应用模式。

  区块链(Blockchain)是一种由多方共同维护,使用密码学保证传输和访问安全,能够实现数据一致存储、难以篡改、防止抵赖的记账技术,也称为分布式账本技术(Distributed Ledger Technology)。

  从本质上看,区块链是通过去中心化和去信任化,集体维护、分布式存储的可靠数据库。

  智能合约就是可编程的合同,也可以理解为一段自动执行的条文合同,在计算机中,就是一段自动执行的程序片段。它更易于合约保存,并且由确定的算法运行,给定输入,就得到对应的输出,极大保障了合约的执行力。

  address pair = UniswapV2Library.pairFor(factory, token, WETH); // 计算该代币对的地址
TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
IWETH(WETH).deposit{value: amountETH}(); // ETH已经转入本合约了,再通过本合约转给WETH合约,转换成WETH
assert(IWETH(WETH).transfer(pair, amountETH));
liquidity = IUniswapV2Pair(pair).mint(to);
// refund dust eth, if any
if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH); // 如果转入的ETH多了,退回去
}

// **** REMOVE LIQUIDITY ****
function removeLiquidity(
    address tokenA,
    address tokenB,
    uint liquidity,
    uint amountAMin,
    uint amountBMin,
    address to,
    uint deadline
) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
    address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
    IUniswapV2Pair(pair).transferFrom(msg.sender, pair, liquidity); // 调用V2Pair下的ERC20合约的transfeerFrom函数转移UNI2代币 *注意此处是transferFrom函数,本合约使用资金需要获得msg.sender的approve 之后将UNI2转到本合约
    (uint amount0, uint amount1) = IUniswapV2Pair(pair).burn(to);// 将UNI2转入该合约,该合约将UNI2销毁并计算即将换出多少amount0、1,并将对应的token转到对应账户上
    (address token0,) = UniswapV2Library.sortTokens(tokenA, tokenB); // 当一个函数返回多个值,但我们只对其中的一些感兴趣时,这就是我们只获得那些值的方式。从gas的角度来说,这比读取一个值并且从不使用它要便宜一些。
    (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
    require(amountA >= amountAMin, 'UniswapV2Router: INSUFFICIENT_A_AMOUNT');
    require(amountB >= amountBMin, 'UniswapV2Router: INSUFFICIENT_B_AMOUNT');
    // 最后返回能获得多少amountA,amountB
}
function removeLiquidityETH(
    address token,
    uint liquidity,
    uint amountTokenMin,
    uint amountETHMin,
    address to,
    uint deadline
) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) { // 流程:UNI2->本合约->销毁UNi2->将token,ETH转到本合约->token、ETH转给用户
        (amountToken, amountETH) = removeLiquidity(
        token,
        WETH,
        liquidity,
        amountTokenMin,
        amountETHMin,
        address(this), // 注意此函数的to是address(this),而不是直接返还用户,如果to是用户的话则直接转给用户
        deadline
    ); // 同理,此处也需要获得用户approve才有使用权限 
    TransferHelper.safeTransfer(token, to, amountToken);
    IWETH(WETH).withdraw(amountETH); // 流动性池是使用WETH,用户存入的是ETH,合约将其换成了WETH在存进流动性池。因此此处是将WETH换回ETH再给用户 
    TransferHelper.safeTransferETH(to, amountETH); //转给to
}
// 这些函数通过中继元事务,允许没有以太币的用户使用许可机制从池中退出。(TODO:没有ETH支付gas费?)
// 以太坊上的交易需要以太币(ETH),这相当于真实的货币。如果你有ERC-20代币但没有ETH,你不能发送交易,所以你不能用它们做任何事情
// 因此permit消息允许其他ETh持有者帮忙发送此次流动性移除交易
function removeLiquidityWithPermit( 
    address tokenA,
    address tokenB,
    uint liquidity,
    uint amountAMin,
    uint amountBMin,
    address to,
    uint deadline,
    bool approveMax, uint8 v, bytes32 r, bytes32 s
) external virtual override returns (uint amountA, uint amountB) {
    address pair = UniswapV2Library.pairFor(factory, tokenA, tokenB);
    uint value = approveMax ? uint(-1) : liquidity;
    // V2Pair下的ERC20合约中实现了permit()函数,验证此approve消息是否真实。可查看[core-ERC20部分](https://blog.csdn.net/weixin_43380357/article/details/129779650?spm=1001.2014.3001.5501)
    IUniswapV2Pair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);  
    // TODO:这一套下来跟直接调用removeLiquidity有什么不一样吗?
    // perimit结束意味着msg.sender给本合约进行了授权,本合约可以支配其资金 即将①msg.sender给合约权限 ②合约转账两笔交易二合一了;否则要先执行 ①approve ②removeLiquidity
    (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline); 
}
相关文章
|
7月前
|
新零售 供应链 数据挖掘
推三返一系统开发|成熟案例|源码部署
“新零售”的商业生态构建将涵盖网上页面
|
7月前
|
存储 算法 分布式数据库
持币生息DAPP系统开发|模式方案|源码
区块链将所有信息存储在分类账系统中。此外,任何类型的数据交换都称为“交易”
|
7月前
|
前端开发 区块链
swap丨dapp智能合约只涨不跌项目系统开发成熟技术/案例设计/逻辑方案/源码指南
合约:import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";
|
7月前
|
自然语言处理 监控 搜索推荐
佛萨奇2.0/3.0Metaforce原力元宇宙系统开发步骤逻辑丨方案项目丨案例设计丨成熟技术丨源码功能
佛萨奇(VoZaChi)是一个虚拟助手系统,其发展至2.0和3.0版本会有一些特定需求和逻辑
|
安全 Go
链游系统开发案例详情/NFT元宇宙链游系统开发方案项目/成熟技术/源码逻辑
Step 1: Requirements analysis and planning. At this stage, the development team needs to have in-depth communication with clients, understand their needs and expectations, and then develop development plans and project plans.
|
区块链 安全
dapp丨defi丨lp智能合约系统开发规则玩法/逻辑说明/项目案例/方案设计/源码程序
Single and dual currency pledge mining is an economic incentive mechanism based on cryptocurrency projects. Under this mechanism, participants can obtain mining rewards by pledging a single cryptocurrency or a pair of cryptocurrencies (dual currency) they hold.
|
存储 前端开发 安全
BSC链盲盒游戏系统开发实现技术原理丨dapp盲盒游戏系统开发案例规则/源码设计/方案项目
  智能合约:它们是存储在区块链上的计算机程序,在满足预定条件时运行,智能合约是用Solidity语言编写的
|
存储 机器人 大数据
量化交易机器人系统开发(开发策略)及案例丨数字货币区块链交易所系统开发详细项目/方案设计/开发逻辑/源码版
  区块链的核心技术之一就是公开且透明的交易信息。一般情况下,在区块链内产生、流转和存储的信息是对所有节点用户开放的,其高度的透明化也使得区块内的所有人都能够查看数据的所有相关信息同时使用其应用。因此,区块链技术在信息共享与数据交换领域具有一定的优势。
|
算法 机器人 区块链
数字货币量化机器人系统开发(项目案例)/功能说明/逻辑方案/源码平台
  简单地说,量化交易机器人就是能够自动执行交易策略的交易软件。它借助于计算机技术和数学模型,对市场行情进行分析预测,并根据程序设定的规则和条件自动执行交易策略,完成交易操作。Compared with traditional manual trading,quantitative trading robots have faster trading speed,lower transaction costs,and higher trading efficiency.
|
算法 安全 区块链
OPsea CeDefi智能合约分红系统开发(开发方案)/案例项目/方案设计/源码功能
  区块链(Blockchain)是一种去中心化的分布式账本技术,它通过使用密码学算法、点对点网络和共识机制等技术手段,实现了对数据的不可篡改、可追溯和去中心化的管理。区块链中的“链”指的是由一系列区块组成的链式结构,每个区块包含着一些交易记录和一些元数据,同时还包括着上一个区块的哈希值。