深入解析Pancakeswap Prediction|博饼预测玩法

这篇具有很好参考价值的文章主要介绍了深入解析Pancakeswap Prediction|博饼预测玩法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

常见问题

  • 领取奖金有时间限制吗?
    没有时间限制,可以在任何时间来领取。
  • 利息是如何计算的?
    上行池的支付比率=两个池的总价值÷上行池的价值
    下行池的支付比率=两个池的总价值÷下行池的价值
    例如,如果一轮的下线有15BNB,而总奖金池为150BNB,下线支付比率将为(150/15)=10x。
    支付金额=支付比率×头寸×(1-库务费)
    在上述情况下,如果一轮以下跌结果结束,如果您向下跌头寸承诺2 BNB,您将获得(2*10)×(1-0.03)=19.4 BNB的赔付。您的利润将为174亿英镑(19.4-2英镑)。
    财政费目前设定为3%:这可能会有变化,将在PancakeSwap的官方沟通渠道上公布。国库费用用于回购和烧掉蛋糕代币。
  • 手续费是如何计算的?
    每轮总奖金的3%将被燃烧。

代码解析

    /**
     * @notice 看跌
     * @param epoch: epoch 轮数
     * @param amount: 代币竞猜数量 wei
     */
    function betBear(uint256 epoch, uint256 amount) external whenNotPaused nonReentrant notContract {
        require(epoch == currentEpoch, "Bet is too early/late");
        require(_bettable(epoch), "Round not bettable");
        require(amount >= minBetAmount, "Bet amount must be greater than minBetAmount");
        require(ledger[epoch][msg.sender].amount == 0, "Can only bet once per round");
        //对面无竞猜 不可下注
        if(roundsNumber[epoch][Position.Bear] > 0 && (roundsNumber[epoch][Position.Bull] == 0)){
            return;
        }
        //代币转入合约中
        tokens.safeTransferFrom(msg.sender, address(this), amount);
        //更新竞猜对象内容
        Round storage round = rounds[epoch];
        round.totalAmount = round.totalAmount + amount;
        round.bearAmount = round.bearAmount + amount;

        // 更新用户数据
        BetInfo storage betInfo = ledger[epoch][msg.sender];
        betInfo.position = Position.Bear;
        betInfo.amount = amount;
        userRounds[msg.sender].push(epoch);

        player[msg.sender] = true;
        roundsNumber[epoch][Position.Bear] += 1;
		//记录日志
        emit BetBear(msg.sender, epoch, amount);
    }
	/**
     * @notice 看涨
     * @param epoch: 轮数
     * @param amount: 代币竞猜数量 wei
     */
    function betBull(uint256 epoch, uint256 amount) external payable whenNotPaused nonReentrant notContract {
        require(epoch == currentEpoch, "Bet is too early/late");
        require(_bettable(epoch), "Round not bettable");
        require(amount >= minBetAmount, "Bet amount must be greater than minBetAmount");
        require(ledger[epoch][msg.sender].amount == 0, "Can only bet once per round");
        if(roundsNumber[epoch][Position.Bull] > 0 && (roundsNumber[epoch][Position.Bear] == 0)){
            return;
        }

        tokens.safeTransferFrom(msg.sender, address(this), amount);
        Round storage round = rounds[epoch];
        round.totalAmount = round.totalAmount + amount;
        round.bullAmount = round.bullAmount + amount;

        // Update user data
        BetInfo storage betInfo = ledger[epoch][msg.sender];
        betInfo.position = Position.Bull;
        betInfo.amount = amount;
        userRounds[msg.sender].push(epoch);
        
        player[msg.sender] = true;
        roundsNumber[epoch][Position.Bull] += 1;

        emit BetBull(msg.sender, epoch, amount);
    }
	/**
     * @notice 开始下一轮n,锁定第n-1轮的价格,结束第n-2轮
     * @dev 只有管理员账户可以操作
     */
    function executeRound() external whenNotPaused onlyOperator {
        require(
            genesisStartOnce && genesisLockOnce,
            "Can only run after genesisStartRound and genesisLockRound is triggered"
        );

        (uint80 currentRoundId, int256 currentPrice) = _getPriceFromOracle();

        oracleLatestRoundId = uint256(currentRoundId);

        // CurrentEpoch refers to previous round (n-1)
        _safeLockRound(currentEpoch, currentRoundId, currentPrice);
        _safeEndRound(currentEpoch - 1, currentRoundId, currentPrice);
        _calculateRewards(currentEpoch - 1);

        // Increment currentEpoch to current round (n)
        currentEpoch = currentEpoch + 1;
        _safeStartRound(currentEpoch);
    }
	/**
     * @notice 开始回合
     * @dev Callable by admin or operator
     */
    function genesisStartRound() external whenNotPaused onlyOperator {
        require(!genesisStartOnce, "Can only run genesisStartRound once");

        currentEpoch = currentEpoch + 1;
        _startRound(currentEpoch);
        genesisStartOnce = true;
    }
	/**
     * @notice 领取全部奖励
     * @param epochs: 有奖励轮数数组
     */
    function claim(uint256[] calldata epochs) external nonReentrant notContract {
        uint256 reward; // Initializes reward
        uint256 rcm1Amt;
        uint256 rcm2Amt;
        uint256 rcm3Amt;
        uint256 marketAmt;

        for (uint256 i = 0; i < epochs.length; i++) {
            require(rounds[epochs[i]].times.startTimestamp != 0, "Round has not started");
            require(block.timestamp > rounds[epochs[i]].times.closeTimestamp, "Round has not ended");

            uint256 addedReward = 0;

            // 竞猜有效
            if (rounds[epochs[i]].oracleCalled) {
                // 猜对
                if(claimable(epochs[i], msg.sender)){
                    Round memory round = rounds[epochs[i]];
                    //轮空
                    if(round.isBet){
                        require(refundable(epochs[i], msg.sender), "Not eligible for refund");
                        addedReward = ledger[epochs[i]][msg.sender].amount;
                        recommendOtherAmt[msg.sender] = ledger[epochs[i]][msg.sender].amount * failureFee / 10000;
                    }else{
                        addedReward = (ledger[epochs[i]][msg.sender].amount * round.rewardAmount) / round.rewardBaseCalAmount;
                        marketAmt = addedReward / (10000 - totalFee) * marketFee / 10000000;
                        rcm1Amt = addedReward / (10000 - totalFee) * recommend1Fee / 10000000;
                        rcm2Amt = addedReward / (10000 - totalFee) * recommend2Fee / 10000000;
                        rcm3Amt = addedReward / (10000 - totalFee) * recommend3Fee / 10000000;
                        distributionProfit(rcm1Amt, rcm2Amt, rcm3Amt, marketAmt, msg.sender);
                    }
                //猜错    
                }else if(isLotteryFailure(epochs[i], msg.sender)){
                    recommendOtherAmt[msg.sender] = ledger[epochs[i]][msg.sender].amount * failureFee / 10000;
                }
            }
            // 竞猜无效 退还金额
            else {
                require(refundable(epochs[i], msg.sender), "Not eligible for refund");
                addedReward = ledger[epochs[i]][msg.sender].amount;
            }

            ledger[epochs[i]][msg.sender].claimed = true;
            reward += addedReward;

            emit Claim(msg.sender, epochs[i], addedReward);
        }
		//发放收益
        if (reward > 0) {
            _safeTransfeTokens(tokens, address(msg.sender), reward);
        }
    }

其他问题

  • 如果没有人进入相反的预测会发生什么?
    如果一轮中只有一方持仓,那么该方就输了,损失的资金将被送到总奖池。
    例如:用户A进入向上位置,没有其他人进入向下位置。用户A输了,并且没有相反的头寸可供支付奖金。资金被送到总奖池。
  • 如果锁定价格和收盘价格完全相同,会发生什么情况?
    在锁定价格与收盘价格完全相同的极少数情况下,没有人获胜,所有进入头寸的资金都将被送到财政部,用于烧掉蛋糕回购。
  • 我可以改变或取消我的竞猜吗?
    不,一旦你进入一个位置,你就不能改变方向

笔者整理了常见的一些智能合约并进行分类,如有需要请自取。
点击跳转文章来源地址https://www.toymoban.com/news/detail-541307.html

到了这里,关于深入解析Pancakeswap Prediction|博饼预测玩法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AI股票崩盘预测模型(企业建模_论文科研)ML model for stock crash prediction

    对齐颗粒度,打通股票崩盘底层逻辑,形成一套组合拳,形成信用评级机制良性生态圈,重振股市信心!--中国股市新展望!By Toby!2024.1.3 综合介绍 股票崩盘,是指证券市场上由于某种原因,出现了证券大量抛出,导致证券市场价格无限度下跌,不知到什么程度才可以停止。

    2024年02月02日
    浏览(47)
  • UTONMOS丰富玩法实证区块链+游戏大有可为

    随着无处不在的互联网存在和智能手机普及率的飙升,全球游戏产业价值超过 3000 亿美元。区块链和游戏两个世界的碰撞,将进一步推动行业达到前所未有的高度。 区块链游戏也早就存在。在智能合约去中心化的推动下,区块链正在彻底改变在线游戏世界。范式转变正在发生

    2024年01月16日
    浏览(71)
  • 区块链游戏:Web3时代玩法的全新演绎

    随着区块链技术的蓬勃发展,区块链游戏正成为数字娱乐领域的一颗璀璨明珠。在Web3时代,区块链游戏以其去中心化、透明、可验证的特性,为玩家带来了全新的游戏体验。本文将深入探讨区块链游戏在Web3时代的崭新玩法和引领未来的可能性。 1. 去中心化的游戏经济 在传统

    2024年04月22日
    浏览(47)
  • 什么是链动2+1模式?链动2+1模式玩法解析

    链动2+1模式玩法解析 模式框架: 代理、老板 奖励机制: 平级奖、见点奖、平级奖、帮扶基金、分红奖 商业模式玩法:每一个代理晋升为老板的同时,都需要给上级代理留下“两个原始种子用户”,咱们这里就俗称“感恩机制”。 帮扶机制(平台强制任务):完成平台任务

    2024年02月09日
    浏览(35)
  • 【深入浅出Selenium库的百变玩法】: 掌握Web自动化测试的关键技术和策略,包括元素定位、页面操作、动态内容处理等,适用于初学者和高级开发者的综合指南

    Selenium是一个功能强大的库,支持多种高级操作,如处理多窗口、多标签页、键盘与鼠标事件、滚动操作等。掌握Selenium可以大大提高Web应用的测试效率和覆盖范围。希望这篇文章能帮助你开启Selenium进行自动化测试的新篇章。 Selenium也是一个广泛使用的自动化测试工具,它支

    2024年02月20日
    浏览(58)
  • 深入区块链技术(一)

    深入区块链技术(一) 区块链的技术定义 区块链是一个提供了拜占庭容错、并保证了最终一致性的分布式数据库;从数据结构上看,它是基于时间序列的链式数据块结构;从节点拓扑上看,它所有的节点互为冗余备份;从操作上看,它提供了基于密码学的公私钥管理体系来

    2024年02月02日
    浏览(26)
  • pancakeswap批量抢跑机器

    这个机器人主要是用来在pancakeswap开盘时抢先购买token。 界面图 完整代码是用vue写的,现在先来个学习版的方便小白理解 这个学习版只有单个抢先的功能,完整版在GitHub 核心代码讲解: 调用swapExactTokensForTokens和swapExactETHForTokens进行转账操作 原vue写的网页完整版在这里:ht

    2024年02月12日
    浏览(31)
  • 深入区块链技术之技术基础

    区块链的存储基于分布式数据库; 区块链主要一个特点就是去中心化 数据库是区块链的数据载体,区块链是交易的业务逻辑载体; 区块链按时间序列化区块数据,整个网络有一个最终确定状态; 区块链只对添加有效,对其他操作无效;区块链是不能删除的,这个也是不可纂

    2024年02月02日
    浏览(28)
  • 【区块链 | EVM】深入理解学习EVM - 深入了解 Solidity:堆栈

    探讨 EVM 堆栈机器,以及如何在堆栈中推入和弹出数据 原文链接: https://betterprogramming.pub/solidity-tutorial-all-about-stack-c1ec6070fe60 探讨 EVM 堆栈机器,以及如何在堆栈中推入和弹出数据 图片来源:Iva Rajović on Unsplash 这是\\\"深入Solidity数据存储位置\\\"系列的第四篇,其他三篇: 深入

    2024年02月09日
    浏览(44)
  • 探索未来区块链:深入解读`pyethapp`

    项目地址:https://gitcode.com/ethereum/pyethapp PyEthApp 是一个基于Python实现的以太坊客户端,它为开发者和用户提供了与以太坊网络交互的机会。作为一个开源项目,PyEthApp旨在提供可扩展、可配置且易于理解的代码库,从而帮助社区成员更好地理解和参与以太坊的生态系统。 Ethere

    2024年04月14日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包