前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在公共测试网上部署智能合约

在公共测试网上部署智能合约

作者头像
Tiny熊
发布于 2022-02-22 10:01:36
发布于 2022-02-22 10:01:36
84800
代码可运行
举报
运行总次数:0
代码可运行
  • 译文出自:登链翻译计划[1]
  • 译者:翻译小组[2]
  • 校对:Tiny 熊[3]

欢迎阅读又一篇关于以太坊编程基础的文章。在之前的文章中,我们已经知道了开发去中心化应用程序的流程和基本工具,在这篇文章中,我们将讨论怎样在公共测试网上部署 dapp,我也会为大家介绍一些有帮助的以太坊开发者资源。

什么是 Infura

Infura 的主要目的是提供对以太坊和 IPFS 网络即时访问,而无需在以太坊或者 IPFS 节点上做那些繁琐的设置。

Infura 基于最新的 microservice-driven 架构,可以动态扩容以支持 API 。开发者可以通过 HTTPs 和 WebSocket 链接到以太坊和 IPFS ,请求响应时间比其他服务和自托管解决方案要快 20 倍。我们的 API 套件会始终保持最新的更新,并在所有网络更新期间保持服务可用。——来自 Infura 的产品描述[4]

部署到 kovan 测试网

这一节,我们介绍把智能合约部署到 kovan 测试网的步骤。在 Ethereum stackexchange[5] 可以找到不同以太坊测试网之间的详细对比。

  1. 在 Infura 中创建项目:在开始使用 Infura 时,你需要先创建一个账户和一个新项目,因为你需要使用项目 Id 才能向 API 发送请求(更多细节在这里[6]
  2. 在 MetaMask 中获取助记词:如果忘记保存你的助记词了,可以进入 MetaMask 设置项,选择安全与隐私,然后点击“显示助记词”并输入密码就可以看到助记词了。
  3. 创建一个用于保存如助记词、Infura 项目 id 这样的保密内容的文件:在 truffle 项目的根目录创建一个 json 文件,取名为.secrets.json ,然后添加下面的内容:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
   "mnemonic": <your mnemonic>,
   "projectId": <your project Id>
}
  1. 安装HDWalletProvider:要部署智能合约,我们必须发送一笔带有合约字节码的交易到网络上,并且,为了给这笔交易签名,我们还需要 truffle 框架的hdwallet-provider包:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install @truffle/hdwallet-provider
  1. 更新 truffle-config.js 文件:首先导入依赖项并解析.secrets.json文件。(更多配置细节请看truffle 文档[7]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const HDWalletProvider = require("@truffle/hdwallet-provider");
const fs = require("fs");
const secrets = JSON.parse(fs.readFileSync(".secrets.json").toString().trim());

在网络部分添加一个新网络:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kovan: {
   networkCheckTimeout: 10000,
   provider: () => {
      return new HDWalletProvider(
        secrets.mnemonic,
        `wss://kovan.infura.io/ws/v3/${secrets.projectId}`
      );
   },
   network_id: "42",
},

现在可以用终端来将项目部署到 Kovan 网络了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
truffle migrate --network kovan

接下来是什么

现在你已经具备写智能合约,开发 dapp 的基础知识了,你已经准备好下一步了。

这一节,我会推荐一些帮助你提升以太坊开发能力的资料:

图书:

电子书:精通以太坊-中文版[8]

Hands-On Smart Contract Development with Solidity and Ethereum: From Fundamentals to Deployment[9]

Mastering Blockchain Programming with Solidity: Write production-ready smart contracts for Ethereum…[10]

培训:

  • 6-Figure Blockchain Developer from eattheblock-pro[11].
  • Consensys academy courses[12].

其他资料:

以太坊智能合约最佳实践[13]

ConsenSys/ethereum-developer-tools-list[14]

Solidity 最新中文文档[15]

注意事项

  • 在生产环境编译智能合约时要使用 optimizer 优化生成的字节码。
  • 如果一个函数需要转移以太币给一个接收者,那么转移操作应该是这个函数执行的最后一个操作,以防接收者是一个有恶意 fallback 函数(重入攻击)的智能合约。如果有一些其他操作需要在转移之后执行,可以考虑使用 openzeppelin 的 ReentrancyGuard (详见这里[16])。
  • 不要在如循环或者 if/else 等控制结构中做以太币转账。(与上一点相同,在有恶意 fallback 函数的情况下,如果攻击者不能盗取以太币,他还可以执行 DOS 攻击)
  • 最好用撤回(取款)模式[17]来做以太币转账操作,这样可以避免重入攻击。
  • 不要在交易中使用无限循环,这可能导致一个交易因为 gas 消耗超过区块 gas 限制而永远无法被打包进区块链。(参考这里[18]
  • 如果不想让合约接收以太币,不要用address(this).balance基于合约余额写任何逻辑,因为以太币可以使用selfdestrct(recipient)强制发送给合约。
  • 使用 openzeppelin 的 SafeMath 库来避免整数溢出和下溢(Solidity 0.8 以上不需要)。
  • 如果你需要根据用户角色设定函数访问权限,你可以用 openzeppelin 库的 AccessControl 合约。
  • 不要用tx.origin授权。
  • 使用函数前,一定要用 require 语句检查参数是否有效。

结论

这是以太坊编程基础系列最后一篇文章了。如果你需要更高级的主题,可以从这些内容开始:Oracles[19], Gasless transactions[20]

你可能还想看看一些 github 上的工具:scaffold-eth[21] solidity-template[22]

原文:https://medium.com/nerd-for-tech/deploy-your-smart-contracts-to-a-public-testnet-7f9aef3f6039

参考资料

[1]

登链翻译计划: https://github.com/lbc-team/Pioneer

[2]

翻译小组: https://learnblockchain.cn/people/412

[3]

Tiny 熊: https://learnblockchain.cn/people/15

[4]

产品描述: https://infura.io/product

[5]

Ethereum stackexchange: https://ethereum.stackexchange.com/questions/27048/comparison-of-the-different-testnets

[6]

这里: https://blog.infura.io/getting-started-with-infura-28e41844cc89/

[7]

truffle文档: https://www.trufflesuite.com/docs/truffle/reference/configuration#providers

[8]

电子书:精通以太坊-中文版: https://learnblockchain.cn/goods/6

[9]

Hands-On Smart Contract Development with Solidity and Ethereum: From Fundamentals to Deployment: https://www.amazon.com/Hands-Contract-Development-Solidity-Ethereum/dp/1492045268/ref=sr_1_1?crid=1BEZJDSK8C00C&dchild=1&keywords=hands+on+smart+contract+development&qid=1614801020&sprefix=hands+on+smart+contract+%2Cdigital-text%2C661&sr=8-1

[10]

Mastering Blockchain Programming with Solidity: Write production-ready smart contracts for Ethereum…: https://www.amazon.com/Mastering-Blockchain-Programming-Solidity-production-ready-ebook/dp/B07W5F8S1L/ref=sr_1_1?dchild=1&keywords=Mastering+Blockchain+Programming+with+Solidity&qid=1614801145&sr=8-1

[11]

eattheblock-pro: https://eattheblocks-pro.teachable.com/p/6-figure-blockchain-developer

[12]

Consensys academy courses: https://learn.consensys.net/catalog

[13]

以太坊智能合约最佳实践: https://consensys.github.io/smart-contract-best-practices/

[14]

ConsenSys/ethereum-developer-tools-list: https://github.com/ConsenSys/ethereum-developer-tools-list

[15]

Solidity最新中文文档: https://learnblockchain.cn/docs/solidity/

[16]

这里: https://docs.soliditylang.org/en/v0.8.2/security-considerations.html#use-the-checks-effects-interactions-pattern

[17]

撤回(取款)模式: https://github.com/wissalHaji/solidity-coding-advices/tree/master/design-patterns/security#withdrawal-pattern

[18]

这里: https://github.com/wissalHaji/solidity-coding-advices/blob/master/best-practices/be-careful-with-loops.md

[19]

Oracles: https://ethereum.org/en/developers/docs/oracles/

[20]

Gasless transactions: https://docs.openzeppelin.com/learn/sending-gasless-transactions

[21]

scaffold-eth: https://github.com/austintgriffith/scaffold-eth

[22]

solidity-template: https://github.com/paulrberg/solidity-template

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 深入浅出区块链技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是 Infura
  • 部署到 kovan 测试网
  • 接下来是什么
  • 图书:
  • 培训:
  • 其他资料:
  • 注意事项
  • 结论
    • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档