乐趣区

关于智能合约:在币安智能链上构建使用安全数据输入的dApp

原文链接:https://blog.chain.link/build-a-dapp-on-binance-smart-chain-with-secure-data-feeds/
原文题目:Build a dApp on Binance Smart Chain With Secure Data Feeds
原文作者:Patrick Collins

2019 年 4 月,驰名加密货币交易所币安(Binance)推出了币安链(Binance Chain),这是一个为了疾速替换资产而构建和优化的网络,也是 BNB 代币诞生的中央。在币安链上你能够:

  • 发送和接管 BNB 代币
  • 发行新代币
  • 发送,接管,销毁 / 铸造和解冻 / 冻结代币
  • 提议在两个不同的代币之间创立交易对
  • 通过链上创立的交易对发送交易资产的订单

币安链非常适合这些寻求放慢交易速度的用户。然而,在设计上它并不兼容 EVM,也不反对智能合约。为了可能创立智能合约,币安团队还创立了币安智能链(BSC),该网络应用权利受权证实(PoSA)共识算法并且与 EVM 兼容,从而使智能合约开发者可能构建可编程的 dApps,且人造能与币安链进行集成。

这种双链架构一方面使得在资产替换端能疾速交易,另一方面还反对智能合约。币安团队实际上发明了一个术语“CeDeFi”或者称其为“中心化的去中心化金融”来形容这种混合办法,该办法达成了一种衡量,即在应用更少的去中心化架构以实现更大的交易吞吐量,同时仍确保开发者能以无需许可的形式部署应用程序,并且可应用以太坊中的雷同的可组合工具,例如 Solidity 和 Chainlink 喂价。

币安智能链 Chainlink 喂价可在币安主网上应用,且能用于在币安智能链(BSC)上构建须要去中心化的,防篡改的数据输出的应用程序。在本技术教程中,咱们将论述如何应用币安智能链,BNB 代币和 Chainlink 预言机,即便你没有以太坊开发教训,也可能学会如何疾速开始在币安智能链(BSC)上构建内部连贯的智能合约。

应用 BSC 开发

咱们将应用的工具

因为 BSC 与 EVM 兼容,咱们能够应用在 Solidity 开发环境中会用到的雷同的工具集,如 Truffle,Hardhat,MetaMask 等。在本教程中,咱们将应用 Python 智能合约开发框架 Brownie 在 BSC 上开发,因为币安测试网目前不反对 Chainlink 喂价,而 Brownie 框架具备能够在本地应用的弱小的分叉链个性。

如果你对在币安智能链上应用 Truffle 和 Hardhat 开发而不是应用 Brownie 感兴趣,能够查看 ganache-cli 的分叉链性能,或者跳到咱们议论分叉的中央 – 咱们将介绍如何在 ganache 上运行。事实上,咱们在测试时,Brownie 在后端应用的正是 ganache-cli 分叉。

要求

  • python3
  • nodejs
  • ganache-cli
  • brownie

查看 Python 版本,终端中输出:

python --version

对于 nodejs,输出:

node -v

能够在点击文本下载 python 和 nodejs。Node 事后装置有npm。而后通过上面的命令确保装置ganache-cli

npm install -g ganache-cli

或者

yarn global add ganache-cli

最初,用上面的命令装置 Brownie:

pip install eth-brownie

或者:

pip3 install eth-brownie

当初咱们所有就绪!

入门指南

当初咱们曾经实现了所有设置,持续拆箱 brownie 的 chainlink-mix。这是用于应用 Chainlink 智能合约的样板模板。如果你想理解更多信息,能够在浏览咱们的博客中的如何应用 python 部署任何区块链上的智能合约一文。

要应用币安智能链的主网或测试网,通常须要 BNB 代币,这相似于在以太坊区块链上应用 ETH。部署智能合约时,须要应用 BNB 代币。

咱们将 100%在本地实现所有工作,因而不须要任何测试网 ETH,LINK 或 BNB 等代币即可开始。

首先,咱们须要创立 Brownie mix 我的项目:

brownie bake chainlink-mix
cd chainlink

当初咱们进入到我的项目中。如果运行 ls 命令,咱们能够看到目录中的内容。

  • build:这是我的项目用来跟踪已部署的智能合约和已编译合约的文件夹
  • contracts:合约的源代码,通常以 Solidity 或 Vyper 语言编写
  • interfaces:和已部署合约交互所须要的接口文件夹。每次与合约的交互都须要一个 ABI 和合约地址。接口是用来获取合约的 ABI 的好办法
  • scripts:咱们创立的用于主动执行合约流程的脚本
  • tests:测试
  • brownie-config.yaml:这个文件为 Brownie 提供了了解如何看待咱们的智能合约所须要的所有信息。咱们想部署到什么区块链网络?咱们要设置任何非凡参数吗?所有这些内容都在此配置文件中设置。

requirements.txt , README.md , LICENSE , 以及 .gitignore 等文件当初能够疏忽。你将在练习过程中理解它们的用处。

咱们将把 PriceFeed.sol 部署到咱们的本地环境中,该环境将从币安主链中分叉失去。

增加分叉网络

为了应用币安链,咱们须要一个近程过程调用(RPC)链接或 host 字段。这是一个进行 API 调用以连贯币安智能链的连贯。如果感兴趣,你还能够运行本人的币安智能链节点并连贯到该节点。

咱们能够在他们的文档中找到用于币安链的 RPC 链接。咱们还须要 ChainID。当初,咱们应用上面这些:

host=https://bsc-dataseed.binance.org/ chainid=56

最初,咱们将须要具体的待应用的 Chainlink 喂价的合约地址。Brownie 的 chainlink-mix 我的项目预装置了币安 ETH/USD 喂价,然而如果你想要币安上所有 Chainlink 喂价列表,能够查看币安或者 Chainlink 文档以获取更多信息。查看 brownie-config.yaml 文件,你会在 networks 字段中看到名为 binance-fork 的局部。这里有咱们须要应用币安分叉链的所有变量。

当初,咱们要通知 Brownie 使连贯到币安链,然而咱们要分叉这条链。分叉一条链意味着复制该链并在本地运行,这样咱们就无需领取任何 gas 费用,并且能够疾速迭代测试。但这也意味着一旦分叉链掉线,所有数据都将被删除!咱们能够应用以下命令将币安链的一个分叉链增加到 Brownie 网络:

brownie networks add development binance-fork cmd=ganache-cli host=http://127.0.0.1 fork=https://bsc-dataseed1.binance.org accounts=10 mnemonic=brownie port=8545

这将在本地主机的端口 8545 上运行本地 ganache-cli 链。它将在部署时应用 [https://bsc-dataseed1.binance.org](https://bsc-dataseed1.binance.org) 作为分叉源。如果操作正确,你将看到相似上面的内容:

Brownie v1.13.0 - Python development framework for Ethereum
SUCCESS: A new network 'binance-fork' has been added
  └─binance-fork
    ├─id: binance-fork
    ├─cmd: ganache-cli
    ├─cmd_settings: {'fork': 'https://bsc-dataseed1.binance.org', 'accounts': 10, 'mnemonic': 'brownie', 'port': 8545}
    └─host: http://127.0.0.1

你能够运行 brownie networks list 来查看所有网络。

部署合约

当初所有都已设置结束,咱们能够本地 ganache 分叉链上部署和读取合约了。在 scripts 文件夹中,有一个名为 deploy_price_consumer_v3.py 的脚本。咱们能够应用以下命令运行它:

brownie run scripts/price_feed_scripts/deploy_price_consumer_v3.py  --network binance-fork

你会看到相似上面的输入内容:

Brownie v1.13.0 - Python development framework for Ethereum
ChainlinkMixProject is the active project.
Launching 'ganache-cli --accounts 10 --fork https://bsc-dataseed1.binance.org --mnemonic brownie --port 8545 --hardfork istanbul'...
Running 'scripts/price_feed_scripts/deploy_price_consumer_v3.py::main'...
Transaction sent: 0x63022ee6c741ffb31ec6f8f29d3d2412c0a81a557a316a9a9752603825b8e96d
  Gas price: 0.0 gwei   Gas limit: 6721975   Nonce: 0
  PriceFeed.constructor confirmed - Block: 4398765   Gas used: 132364 (1.97%)
  PriceFeed deployed at: 0x3194cBDC3dbcd3E11a07892e7bA5c3394048Cc87
The current price of ETH is 135462000000
Terminating local RPC client...

因而,咱们刚刚实现了:

  1. 分叉币安链并在本地运行
  2. 向其部署智能合约
  3. 并从中读取 ETH 的价格
The current price of ETH is 135462000000

祝贺!你间隔获取一些币安赏金更进了一步!

更进一步

当初你曾经晓得如何应用币安智能链部署智能合约,你还能够更深刻地钻研 BSC,或者应用 Matic,xDai 等其余侧链以及其余二层网络。如果你更喜爱 Hardhat 和 Truffle 框架,看看是否能够在这些框架中执行 ganache-cli 命令并运行一些本地测试。有许多黑客松行将举办,所以肯定加入这些黑客松寻求与这个畛域的其余人才单干的机会,博得一些奖项,并使本人成长为真正的智能约开发者。

如果你想持续扩大智能合约的性能,请拜访 Chainlink 开发者文档并退出 Discord 中的技术探讨。如果你应用币安智能链,Brownie,Truffle,Hardhat 或任何其余 Chainlink 集成构建了不错的我的项目,请确保应用 @chainlink 标记咱们,以便咱们看到你所做的杰出的工作!

English channels
Docs | Discord | Reddit | YouTube | Telegram | Events | GitHub | Price Feeds | DeFi | VRF
中文渠道
中武官网 | 知乎 | SegmentFault | CSDN | LearnBlockchain.cn

退出移动版