LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 区块链资讯 > [Chainlink] 使用 Chainlink 外部适配器构建基于区块链的梦幻体育游戏

[Chainlink] 使用 Chainlink 外部适配器构建基于区块链的梦幻体育游戏

2021-06-09 wanbizu AI 来源:区块链网络

在 2021 年 ETHDenver 黑客马拉松上,Chainlink Bounty 获胜者 Pr!ce 使用 Chainlink 外部适配器将链下 NBA 球员表现数据连接到 Chainlink 预言机,为基于区块链的梦幻体育游戏提供动力。 这种市场模型也可以应用于其他零和性能资产,很好地展示了 Chainlink 的可配置和安全的预言机基础架构如何用于将独特的链下 API 和自定义数据集连接到智能合约,从而实现体育竞技应用,游戏、DeFi 等。

在这篇博文中,Pr!ce 团队成员 Anweshi Anavadya、Ishan Ghimire、Sam Orend 和 Jasraj Bedi 解释了他们如何使用 Chainlink 准确计算并在链上交付 NBA 球员元数据,从而以半成品的形式创建“共享” -可替代的 ERC-1155 代币。 他们还介绍了他们的 dApp 如何调用 Chainlink ETH-USD 价格馈送,以安全地向游戏玩家分发奖品。

作者:Sam、Ishan、Anweshi 和 Jasraj

认识 Pr!ce,这是一个基于区块链的季节性市场,让用户可以买卖 NBA 球员的股份,甚至可以根据他们的表现获得红利。 这篇文章将从技术角度解释 Pr!ce 的工作原理,以及我们的团队如何使用 Chainlink 外部适配器和价格预言机为我们的链上市场安全地获取外部数据。

Pr!ce dApp 演示启动屏幕。 季节性市场如何运作?

在 NBA 赛季开始时,Pr!ce 发行 NBA 球员的“股份”。 这些股票是什么样子的? 我们在以太坊网络上构建了 Pr!ce,所以我们的股份是 ERC-1155(半同质化)代币。 每个令牌都包含将其与特定玩家联系起来的元数据。 然后我们通过使用 web3.js 拉取它并使用 React 组件创建它的可视化来可视化这个元数据。

Pr!ce ERC-1155 半同质代币,由 NBA 球员元数据构建。

在 NBA 赛季开始时,Pr!ce 为每位 NBA 球员铸造 100 个 ERC-1155 代币。 这些代币的元数据是使用 Chainlink 获取的,它调用我们开发的链下 API 来管理不需要链上的联赛数据,因为它在赛季期间保持不变,但因赛季而异。 在第一周,用户可以使用打包的 ERC-20 代币对他们希望购买其股票的玩家进行竞标。 第一周后,ERC-1155 代币被转移到每个用户的钱包,赛季开始。

购买本赛季凯文杜兰特股票的 Pr!ce 用户。

在赛季中,用户可以以市场价格购买/出售任何玩家的额外股份。 特定参与者的市场价格由我们的 AMM(自动做市商)决定。 AMM 根据流动性池确定一股的市场价格,类似于 Uniswap。

Pr!ce 平台股东门户 UI 显示当季拥有的股份。

最后,根据用户持有的资产表现如何,他们可能有资格收取股息。 我们系统中的性能被定义为可量化的输出。 这对于每种资产类型都是不同的——对于 NBA,我们使用了球员的统计表现。 股息是使 Pr!ce 独一无二的东西。 我们使用 Chainlink Price Feeds 来计算赛季末的股息分配。

计算链下股息

就像金融市场一样,Pr!ce 奖励您持有表现最佳的 NBA 球员的股份。 为此,我们将部分佣金作为股息支付给股东。 股息支付基于用户持有的运动员的梦幻运动表现。

为了首先收集球员的表现数据,我们使用 Flask 构建了一个自定义的网页抓取 API,以获取篮球怪物网站上前 50 名 NBA 梦幻球员的梦幻体育数据。 然而,计算我们的股息价值比仅仅获取数据更复杂。 它需要统计计算,涉及用户拥有的股份数量、流通的股份总数、我们的股息基金的价值以及玩家的幻想输出。

当我们开发 Pr!ce 时,我们遇到了一个关于如何经济有效地计算股息的问题。 如果我们在链上进行股息计算,则处理我们的股息支付的 gas 费用将是可观的,并且我们将面临 gas 费用可能超过实际支付价值的风险,具体取决于网络拥塞。

出于这个原因,我们决定利用 Chainlink 来获取我们需要的链下数据,并在将其上链之前计算我们的股息支出价值。 这使我们能够保持较低的 gas 费用并为用户提供更大的支出。 这是我们如何做到的。

函数 giveDividendPerPlayer(string memory request_uri) public hasSeasonStarted { require(lastDividendWithdrawn)[msg.sender] < currWeekStart); 最后一次股息提取[msg.sender] = 块.时间戳; requestDividendWorthyEntities(request_uri); } https://gist.github.com/beshup/19ab2115c47a3e5de8f3a34115a8146c

当用户在我们的应用程序前端单击“收集股息”时,我们会在 Solidity 智能合约中运行此方法以开始该过程。 我们首先要求用户本周尚未为该玩家提取红利。 然后我们记录用户今天在当前的 block.timestamp 提取他们的股息,然后拨打我们的电话查看他们的持股是否有资格获得股息。

function requestDividendWorthyEntities(string memory request_uri) public onlyOwner { Chainlink.Request memory request = buildChainlinkRequest(nba_JOBID, address(this), this.fulfill.selector); // 设置 URL 以在 request.add(“get”, request_uri); 上执行请求 request.add(“path”, “to_send”); bytes32 reqID = sendChainlinkRequestTo(nba_ORACLE, request, fee); 作业标识映射[reqID] = msg.sender; } 函数完成(bytes32 reqID, uint256 payout)公共记录ChainlinkFulfillment(reqID){ require(jobIdMapping)[reqID] != 地址(0x0)); 应付(jobIdMapping)[reqID]).转账(支付); 作业标识映射[reqID] = 地址(0x0); //支付给jobIdMapping[randomID]
}https://gist.github.com/beshup/9060296662a21449cd0e60569efd0fac

在这个函数中,我们构建了我们的 Chainlink 请求,它将确定我们向用户支付的股息的价值。 单个参数 request_uri 是在别处构造的,它包含在查询参数中计算我们的股息所需的数据,稍后将看到。 值得注意的是以下几行:

我们在 Chainlink 请求中添加了一个“get”请求。 这将决定我们派息的价值。

request.add(“get”, request_uri);

我们还在我们的请求中添加了“路径”,它指定了我们想要的数据 to_send。 我们的端点返回我们将在 to_send 中发送给用户的支付值。 将此添加为路径有助于我们将所需的数据转换为返回给用户的内容。

request.add(“path”, “to_send”);

我们存储从请求 ID 到请求股息支付的用户地址的映射。 当执行运行时,我们将计算出的支出转移给消息发送者(请求分红的用户)。

我们将刚刚构建的 Chainlink 请求发送到 Flask API 中的这个端点。 让我们分解一下,因为这是我们节省汽油费的地方!

@app.route(‘/to_send_per_entity////‘, methods=[‘GET’]) @cross_origin() def to_send(entity_id,shares_owned,shares_in_circulation,distributed_fund): 如果 entity_id > LEAGUE_SIZE: entity_id -= LEAGUE_SIZE League = League_data() entity_held_score = float(league)[entity_id – 1][‘fantasy_points’]) sum_scores = 0.0 对于联盟中的实体: sum_scores += float(entity[“fantasy_points”]) res = (shares_owned/shares_in_circulation)*(entity_held_score / sum_scores)*dividend_fund return {“to_send”: int(res)}https://gist.github.com/beshup/cf68ca20dd3de7b3989263b24a40e953

简而言之,该端点正在计算“to_send”给用户的 ETH 数量,作为股息支付。 此付款计算首先涉及将每个 NBA 球员在一周内获得的累积幻想点数相加。

对于联盟中的实体: sum_scores += float(entity[“fantasy_points”])

然后,我们根据累积的幻想点数、拥有的股份、流通中的总股份和我们的股息基金的价值来计算由此产生的支出。

res=(shares_owned/shares_in_circulation)*(entity_held_score/ sum_scores)*dividend_fund

然后在“to_send”中返回股息支付金额

返回 {“to_send”: int(res)}

但是由于我们在上面的 Chainlink 请求中添加了“路径”,它会立即启动向用户发送“to_send”ETH 的过程。

通过在链下执行此操作,我们避免了与此计算相关的 gas 费用,我们通常会在 Solidity 智能合约中以单独的方法处理此计算时产生这些费用。

最后,在赛季结束时,我们会向每个玩家资产的顶级利益相关者发布“冠军 NFT”。 这鼓励了市场中的竞争和良性波动,并允许用户在季后保留商品。

Pr!ce 的下一步是什么?

展望未来,我们计划扩展我们通过该项目构建的混合智能合约架构,并继续在加密生态系统中创建半可替代的代币市场。 我们目前正在开发一个激动人心的项目,希望很快发布,敬请期待!

有关此主题的更多信息

智能合约开发者使用 Chainlink 的主要方式 如何计算 DeFi 方差掉期的价格波动 链下计算:使用 Chainlink 进行统计分析

如果您是开发人员并希望将您的智能合约连接到底层区块链之外的现有数据和基础设施,请点击此处或访问开发人员文档。

网站 | 推特 | 不和谐 | 红迪网 | 优酷 | 电报 | 活动 | GitHub | 价格信息 | 去金融机构

>> 在 Chainlink 上查看

加入我们的 Telegram

在推特上关注我们

在 Facebook 上关注我们

帖子 [Chainlink] 使用 Chainlink 外部适配器构建基于区块链的梦幻体育游戏首先出现在 AZCoin 新闻上。

—-

原文链接:https://azcoinnews.com/chainlink-build-a-blockchain-based-fantasy-sports-game-using-a-chainlink-external-adapter.html

原文作者:Chainlink News

编译者/作者:wanbizu AI

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

LOADING...
LOADING...