在币安智能链上构建使用安全数据输入的dApp

原文链接:https://blog.chain.link/build-a-dapp-on-binance-smart-chain-with-secure-data-feeds/...

原文链接:[https://blog.chain.link/build-a-dapp-on-binance-smart-chain-with-secure-data-feeds/](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](https://blog.chain.link/author/patrick/) ![](https://img.learnblockchain.cn/2021/02/24_/469222879.png) 2019年4月,著名加密货币交易所币安(Binance)推出了[币安链(Binance Chain](https://academy.binance.com/en/articles/an-introduction-to-binance-smart-chain-bsc)),这是一个为了快速交换资产而构建和优化的网络,也是BNB代币诞生的地方。在币安链上你可以: - 发送和接收BNB代币 - 发行新代币 - 发送,接收,销毁/铸造和冻结/解冻代币 - 提议在两个不同的代币之间创建交易对 - 通过链上创建的交易对发送买卖资产的订单 币安链非常适合这些寻求加快交易速度的用户。但是,在设计上它并不兼容EVM,也不支持智能合约。为了能够创建智能合约,币安团队还创建了[币安智能链](https://www.binance.com/en/blog/421499824684900933/Binance-Smart-Chain-Launches-Today)(BSC),该网络使用权益授权证明(PoSA)共识算法并且与EVM兼容,从而使智能合约开发者能够构建可编程的dApps,且天然能与币安链进行集成。 这种双链架构一方面使得在资产交换端能快速交易,另一方面还支持智能合约。币安团队实际上创造了一个术语“CeDeFi”或者称其为“中心化的去中心化金融”来描述这种混合方法,该方法达成了一种权衡,即在使用更少的去中心化架构以实现更大的交易吞吐量,同时仍确保开发者能以无需许可的方式部署应用程序,并且可使用以太坊中的相同的可组合工具,例如Solidity和[Chainlink喂价](https://data.chain.link/)。 [币安智能链Chainlink喂价](https://docs.chain.link/docs/binance-smart-chain-addresses)可在币安主网上使用,且能用于在币安智能链(BSC)上构建需要去中心化的,防篡改的数据输入的应用程序。在本技术教程中,我们将阐述如何使用币安智能链,BNB代币和Chainlink预言机,即使你没有以太坊开发经验,也能够学会如何快速开始在币安智能链(BSC)上构建外部连接的智能合约。 # 使用BSC开发 ## 我们将使用的工具 由于BSC与EVM兼容,我们可以使用在Solidity开发环境中会用到的相同的工具集,如[Truffle](https://www.trufflesuite.com/),[Hardhat](https://hardhat.org/),[MetaMask](https://metamask.io/)等。在本教程中,我们将使用Python智能合约开发框架[Brownie](https://github.com/eth-brownie/brownie)在BSC上开发,因为币安测试网目前不支持Chainlink喂价,而Brownie框架具有可以在本地使用的强大的分叉链特性。 如果你对在币安智能链上使用Truffle和Hardhat开发而不是使用Brownie感兴趣,可以查看[ganache-cli的分叉链功能](https://github.com/trufflesuite/ganache-cli),或者跳到我们谈论分叉的地方--我们将介绍如何在ganache上运行。事实上,我们在测试时,Brownie在后端使用的正是ganache-cli分叉。 ## 要求 - python3 - nodejs - ganache-cli - brownie 检查Python版本,终端中输入: ```bash python --version ``` 对于nodejs,输入: ```bash node -v ``` 可以在点击文本下载[python](https://www.python.org/downloads/)和[nodejs](https://nodejs.org/en/)。Node预先安装有`npm`。然后通过下面的命令确保安装`ganache-cli`: ```bash npm install -g ganache-cli ``` 或者 ```bash yarn global add ganache-cli ``` 最后,用下面的命令安装Brownie: ```bash pip install eth-brownie ``` 或者: ```bash pip3 install eth-brownie ``` 现在我们一切就绪! ## 入门指南 现在我们已经完成了所有设置,继续拆箱[brownie的chainlink-mix](https://github.com/smartcontractkit/chainlink-mix)。这是用于使用Chainlink智能合约的样板模板。如果你想了解更多信息,可以在阅读[我们的博客中的如何使用python部署任何区块链上的智能合约一文](https://blog.chain.link/develop-python-defi-project/)。 要使用币安智能链的主网或测试网,通常需要BNB代币,这类似于在以太坊区块链上使用ETH。部署智能合约时,需要使用BNB代币。 我们将100%在本地完成所有工作,因此不需要任何测试网ETH,LINK或BNB等代币即可开始。 首先,我们需要创建Brownie mix项目: ```bash brownie bake chainlink-mix cd chainlink ``` 现在我们进入到项目中。如果运行`ls`命令,我们可以看到目录中的内容。 - `build`:这是项目用来跟踪已部署的智能合约和已编译合约的文件夹 - `contracts`:合约的源代码,通常以Solidity或Vyper语言编写 - `interfaces`:和已部署合约交互所需要的接口文件夹。每次与合约的交互都需要一个[ABI](https://ethereum.stackexchange.com/questions/234/what-is-an-abi-and-why-is-it-needed-to-interact-with-contracts)和合约地址。接口是用来获取合约的ABI的好方法 - `scripts`:我们创建的用于自动执行合约流程的脚本 - `tests`:测试 - `brownie-config.yaml`:这个文件为Brownie提供了理解如何对待我们的智能合约所需要的所有信息。我们想部署到什么区块链网络?我们要设置任何特殊参数吗?所有这些内容都在此配置文件中设置。 `requirements.txt` , `README.md` , `LICENSE` , 以及 `.gitignore` 等文件现在可以忽略。你将在练习过程中了解它们的用途。 我们将把`PriceFeed.sol`部署到我们的本地环境中,该环境将从币安主链中分叉得到。 ## 添加分叉网络 为了使用币安链,我们需要一个[远程过程调用(RPC)链接](https://en.wikipedia.org/wiki/Remote_procedure_call)或`host`字段。这是一个进行API调用以连接币安智能链的连接。如果感兴趣,你还可以运行自己的币[安智能链节点](https://docs.binance.org/smart-chain/developer/fullnode.html)并连接到该节点。 我们可以[在他们的文档中找到用于币安链](https://docs.binance.org/smart-chain/developer/rpc.html)的RPC链接。我们还需要ChainID。现在,我们使用下面这些: ```bash host=https://bsc-dataseed.binance.org/ chainid=56 ``` 最后,我们将需要具体的待使用的Chainlink喂价的合约地址。Brownie的`chainlink-mix`项目预安装了币安 ETH/USD喂价,但是如果你想要币安上所有Chainlink喂价列表,可以查看币安或者[Chainlink文档](https://docs.chain.link/docs/binance-smart-chain-addresses)以获取更多信息。查看`brownie-config.yaml`文件,你会在`networks`字段中看到名为`binance-fork`的部分。这里有我们需要使用币安分叉链的所有变量。 现在,我们要告诉Brownie使连接到币安链,但是我们要分叉这条链。分叉一条链意味着复制该链并在本地运行,这样我们就无需支付任何gas费用,并且可以快速迭代测试。但这也意味着一旦分叉链掉线,一切数据都将被删除!我们可以使用以下命令将币安链的一个分叉链添加到Brownie网络: ```bash 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](https://github.com/smartcontractkit/chainlink-mix/tree/master/scripts/price_feed_scripts)文件夹中,有一个名为[deploy_price_consumer_v3.py](https://github.com/smartcontractkit/chainlink-mix/blob/master/scripts/price_feed_scripts/deploy_price_consumer_v3.py)的脚本。我们可以使用以下命令运行它: ```bash brownie run scripts/price_feed_scripts/deploy_price_consumer_v3.py --network binance-fork ``` 你会看到类似下面的输出内容: ```bash 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. 分叉币安链并在本地运行 1. 向其部署智能合约 1. 并从中读取ETH的价格 ```bash The current price of ETH is 135462000000 ``` 恭喜!你距离获取一些币安赏金更进了一步! #### 更进一步 现在你已经知道如何使用币安智能链部署智能合约,你还可以更深入地研究BSC,或者使用Matic,xDai等其他侧链以及其他二层网络。如果你更喜欢Hardhat和Truffle框架,看看是否可以在这些框架中执行`ganache-cli`命令并运行一些本地测试。有许多黑客松即将举办,所以一定参加这些黑客松寻求与这个领域的其他人才合作的机会,赢得一些奖项,并使自己成长为真正的智能约开发者。 如果你想继续扩展智能合约的功能,请访问[Chainlink开发者文档](https://docs.chain.link/)并加入[Discord](https://discordapp.com/invite/aSK4zew)中的技术讨论。如果你使用币安智能链,Brownie,Truffle,Hardhat或任何其他Chainlink集成构建了不错的项目,请确保使用@chainlink标记我们,以便我们看到你所做的出色的工作! **English channels** [Docs](https://docs.chain.link/docs/getting-started) |[ ](https://www.reddit.com/r/Chainlink/)[Discord](https://discordapp.com/invite/aSK4zew) | [Reddit](https://www.reddit.com/r/Chainlink/) | [YouTube](https://www.youtube.com/channel/UCnjkrlqaWEBSnKZQ71gdyFA) | [Telegram](https://t.me/chainlinkofficial) | [Events](https://blog.chain.link/tag/events/) | [GitHub](https://github.com/smartcontractkit/chainlink) | [Price Feeds](https://feeds.chain.link/) | [DeFi](https://www.chain.link/solutions/defi) | [VRF](https://chain.link/solutions/chainlink-vrf) **中文渠道** [中文官网](https://zh.chain.link/) | [知乎](https://www.zhihu.com/people/chainlink/posts) | [SegmentFault](https://segmentfault.com/u/chainlink/articles) | [CSDN](https://blog.csdn.net/ChainlinkO) | [LearnBlockchain.cn](https://learnblockchain.cn/people/398)

原文链接: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

在币安智能链上构建使用安全数据输入的dApp插图

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

区块链技术网。

  • 发表于 2021-02-24 09:44
  • 阅读 ( 1046 )
  • 学分 ( 17 )
  • 分类:ChainLink

评论