{"content":{"title":"​​ApeWorX: 新的基于 Python 语言的智能合约开发框架","body":"**Brownie 是 Python 开发人员经常使用智能合约框架。 现在出现了一个 Brownie 的继任者，可以让 Python Web3 开发人员获得更好的体验。**\r\n\r\n在本文中，我将讨论这个 Brownie 的继任者 [ApeWorX](https://www.apeworx.io/)，也称为“Ape”。\r\n\r\nApeWorX 是一个基于 Python 的智能合约开发和部署框架，有很强的可定制性和安全的私钥管理机制。\r\n\r\n你们中的许多人都知道我（Patrick Collins）很喜欢 Python，所以在进入 Web3 领域后，我爱上了 Brownie 框架。自从我进入这个领域以来，似乎所有原创的 Web3 框架都是两种结果：已经成功或者被另一个竞争对手替换：\r\n- [DappTools 正式承认](https://github.com/dapphub/dapptools/pull/927/files) [Foundry](https://github.com/foundry-rs/foundry) 作为其继任者。\r\n- 在 [Truffle](https://trufflesuite.com/) 流行过很长一段时间之后，[Hardhat](https://hardhat.org/) 成为了 DeFi 中最常用的框架。\r\n- [ApeWorX](https://www.apeworx.io/) 似乎有朝一日会成为 Brownie 框架的继任者。\r\n\r\n以太坊 Python 社区是协作性最强、成员之间联系最紧密的社区之一。在 [Ape contributor](https://github.com/ApeWorX/ape/graphs/contributors) 中可以看到许多 [Vyper](https://vyper.readthedocs.io/en/stable/index.html) 和 [Brownie](https://github.com/eth-brownie/brownie/graphs/contributors) 的 contributor，包括 [Doggie B](https://github.com/fubuloubu)、[Banteg](https://twitter.com/bantg) 和 [Skellet0r](https://github.com/skellet0r)（甚至还有我自己！）\r\n\r\n此外，Python 爱好者和 [Curve](https://curve.fi/) 等 DeFi 协议都[开始使用 Ape](https://github.com/curvefi/metaregistry) 作为其智能合约的框架。\r\n\r\n今天，我们将从 Brownie 用户的角度对 ApeWorX 进行快速的了解和学习。\r\n\r\n## 快速了解\r\n*你可以在 Chainlink 的 repo [ApeWorX-starter-kit](https://github.com/smartcontractkit/apeworx-starter-kit) 中找到一个最简 ApeWorX & Vyper 模板，其中包含代码示例以帮助你快速了解。*\r\n\r\n使用 `pipx install eth-ape` 或 `pip` 安装 ape 后，你就可以访问 ape 命令行界面了。\r\n\r\n初始化一个新项目的最快方法是使用 `ape init`，它会生成一个空白配置的项目文件夹，如下所示：\r\n```\r\n.\r\n\r\n├── ape-config.yaml\r\n\r\n├── contracts\r\n\r\n├── scripts\r\n\r\n└── tests\r\n```\r\n\r\n以下是每个文件夹包含的内容：\r\n\r\n- Contracts：你所有的 Vyper、Solidity 或其他合约文件都将放在这里。\r\n- Scripts：所有 Python 代码的存放位置。\r\n- Tests：你的 Python 测试文件。\r\n- ape-config.yaml：项目的配置文件。就类似于 brownie-config.yaml 或 hardhat.config.js。\r\n\r\n在 scripts 文件夹中，你可以写一个如下的文件：\r\n```\r\ndef main():\r\n\r\n print(\"Hello!\")\r\n```\r\n\r\n在 ape 中想要运行任何一个 Python 脚本，运行：\r\n```\r\nape run scripts/my_script.py\r\n```\r\n\r\n## Ape 的插件系统\r\n默认情况下，Ape 没有 Vyper、Solidity 或任何其他东西，而是需要使用[插件系统](https://docs.apeworx.io/ape/stable/userguides/installing_plugins.html)使得 ApeWorX 完全可定制，以满足开发者特定的智能合约开发需求。两个最受欢迎的插件是用于 [Solidity](https://github.com/ApeWorX/ape-solidity) 和 [Alchemy](https://github.com/ApeWorX/ape-alchemy) 的插件，它们允许你编译 Solidity 智能合约并且轻松通过 Alchemy 部署。\r\n```\r\nape plugins install solidity alchemy\r\n```\r\n当你完成配置以后，你可以在 Contracts 文件夹中编写 Solidity 的合约然后对其进行编译。\r\n```\r\nape compile\r\n```\r\n\r\n## Networks\r\nApe 采用特定方法处理 network。大多数框架，包括 Hardhat、Brownie 和 Foundry，都以类似的方式处理 EVM 链，但 ApeWorX 是不同的。\r\n\r\nApeWorX 将 network 分成**生态系统和链**。例如，以太坊生态系统分为 **mainnet、ropsten、kovan、goerli** 等。如果你想使用 Fantom 之类的 network，你可以安装 fantom 的 network 插件：\r\n```\r\nape plugins install fantom\r\n```\r\n然后在 ape 网络中，你会看到一个新的 network 列表：\r\n```\r\nfantom                                                                                                      \r\n\r\n├── opera                                                                                                   \r\n\r\n│   └── geth  (default)                                                                                     \r\n\r\n├── testnet                                                                                                 \r\n\r\n│   └── geth  (default)                                                                                     \r\n\r\n└── local  (default)                                                                                        \r\n\r\n   └── test  (default)\r\n```\r\n如果你不想为某个 network 安装插件，也可以使用临时方法，只需将 RPC URL 配置到network 中。这样 ape 就会认为这个网络是可以发送交易的。\r\n```\r\nape run scripts/my_script.py --network https://my_rpc_url.com\r\n```\r\n\r\n## 账户\r\n框架之间最大的区别之一是它们如何处理帐户。大多数框架都让你设置一个 .env 文件来存储私钥。但是，将您的私钥放在 .env 中其实[一直困扰着开发人员](https://twitter.com/heyOnuoha/status/1522542744954191872)。你*也可以*在 ape 中执行此操作，但 ape 的默认的设置方式更加安全。\r\n\r\nApe 允许你导入私钥，然后它将私钥加密并将存储在你的计算机上。每当您想使用该帐户或私钥时，您都需要密码来解密。这意味着再也不会不小心将你的密钥 push 到 GitHub 了！\r\n```\r\nape accounts import my_key\r\n```\r\n然后它会提示你输入密钥和密码。在你的 Python 脚本中，您可以使用 load 函数来获取你的私钥。\r\n```\r\nfrom ape import accounts\r\n\r\naccounts.load(\"local-default\")\r\n```\r\n当你运行这个脚本的时候，会有提示让你输入密码。\r\n## 其他\r\n框架的其余部分可能和你预期的使用习惯差不多。你可以使用 [pytest](https://docs.pytest.org/en/7.1.x/)（最流行的 Python 测试框架之一）编写测试。你可以进入 [ape console](https://docs.apeworx.io/ape/stable/commands/console.html)，在 Python 环境中使用 shell 与你所选择的网络交互。\r\n\r\nApe 中有你希望从智能合约开发框架中获得的所有功能。\r\n\r\nApe 是框架领域的新成员，它也是一个很棒的 Repo，你可以去 contribute。如果你喜欢 Python 并且对如何改进 ape 有想法，请去提一个 issue、PR，或者给他们一个 star！\r\n\r\nHappy Ape-ing!\r\n\r\n这篇文章中表达的观点仅代表作者，并不反映 Chainlink。\r\n\r\n欢迎关注 Chainlink 预言机并且私信加入开发者社区，有大量关于智能合约的学习资料以及关于区块链的话题！"},"author":{"user":"https://learnblockchain.cn/people/398","address":null},"history":null,"timestamp":1669210545,"version":1}