726
社区成员
![](https://csdnimg.cn/release/cmsfe/public/img/topic.427195d5.png)
![](https://csdnimg.cn/release/cmsfe/public/img/me.40a70ab0.png)
![](https://csdnimg.cn/release/cmsfe/public/img/task.87b52881.png)
![](https://csdnimg.cn/release/cmsfe/public/img/share-circle.3e0b7822.png)
开发环境
Web2 开发人员依靠开发环境来管理构建应用程序的端到端过程。开发环境通常为一个综合应用程序中的软件编辑、测试、构建和打包来提供资源。
Web3 没有任何不同,并且存在多个用于管理 dapp 开发生命周期的开发环境。这些与 web2 开发环境非常相似,并提供用于编写、调试和优化代码的实用程序。它们还提供特定于 web3 应用程序开发的功能,包括:
Dapp 项目模板和默认文件结构
将智能合约编译为字节码的脚本
用于将智能合约部署到区块链网络的脚本
灵活的插件来定制本地开发环境
除了开发环境外,通常还需要本地区块链实例进行测试。这些可以是轻量级的、一次性使用的实例,它们在单个命令中出生和消亡,或者是整个以太坊区块链(或任何 EVM 兼容区块链)从创世纪开始的完整持久分叉。例如,Hardhat 擅长创建一次性本地实例,而 Ganache 使用 ganache --fork 可以轻松创建具有存档节点访问权限的本地区块链实例。
这些开发工具甚至可能不需要存在于您的本地机器上。类似的工具链,如 Remix 和 ChainIDE,为开发生命周期的每个部分提供了一系列在线工具。
ConsenSys 为 web3 开发人员创建了首批开发环境工具套件之一,Truffle。从那时起,Truffle 已经发展成为一套开发人员工具,包括 Truffle CLI、本地区块链模拟器 Ganache、Truffle 调试器、用于 VS Code 扩展的 Truffle 和
Truffle 仪表板。Truffle Suite 的目标是提供开发人员从头到尾构建功能性 dapp 所需的所有必要工具,并创建一个简单的管道,以便利用 Infura 和 Alchemy 等节点提供商部署到测试网和主网。
以下是不同区块链生态系统和相关开发环境的列表。请注意,其中一些框架和环境对于跨不同链构建 dapps 很有用,而其他框架和环境是为特定生态系统设计的。
智能合约测试
由于大多数智能合约处理某种形式的货币兑换,因此在部署到区块链之前对它们进行全面彻底的测试至关重要。测试对于确保智能合约的安全至关重要,特别是因为公共区块链的不变性阻止了发布后的错误修复。您可以模拟升级 dapp 的业务逻辑,但这需要复杂的过程,并且可能引入隐藏的漏洞。
因此,“快速行动并打破常规”不是 web3 开发人员的选择;最好是简单地 "一次做完并做对"。最好的开始方式?彻底测试您的代码以确保它不会任意失败,或在运行时产生意外结果。
前面讨论的许多开发环境和 IDE,尤其是 Truffle、Brownie、Foundry 和 Remix,都提供了用于运行单元测试的实用程序。使用这些工具,您可以编写测试来捕获不同的用户交互(恶意和良性),并分析您的智能合约在这些条件下的行为。
但您可能还需要更高级的测试功能,例如根据广泛的输入类别测试合约的选项,以查看是否有任何功能中断或触发错误。基于属性的测试可以说是这里最理想的选择,因为它可以验证安全假设在各种执行场景下是否成立(或不成立)。
QuickCheck、Hypothesis 和 American Fuzzy Lop (AFL) 是 Web2 开发人员熟悉的一些基于属性的工具。虽然这些工具几乎不适合分析合约代码,但有一些类似的变体是为智能合约而设计的。这些包括:
测试网
与传统开发一样,web3 开发人员可以访问称为测试网络 (testnet) 的阶段化环境。测试网是一个类似于生产的环境,用于与合约交互以了解它们在现实世界条件下的行为。通过在测试网上部署——在本地开发环境中运行测试之后——您可以在向主网络 (mainnet) 上的用户发布您的 dapp 之前轻松检测出智能合约中的错误。
您可以在不让资金面临风险的情况下完成所有这些,因为测试网上的资金没有实际价值。尽管如此,您仍需要在发送测试网交易之前筹集这些资金,这就是水龙头的用武之地。水龙头会免费提供您在测试网上进行交易(例如调用合约)所需的代币。
Infura 为需要 ETH 的开发人员发布了一个水龙头,以便在以太坊 Goerli testnet 上部署和测试合约。下表列出了不同区块链生态系统的不同测试网,以及您可以在何处找到获取测试网代币的水龙头。
Blockchain |
Testnet |
Faucet(s) |
Ethereum |
Sepolia |
Infura Sepolia Faucet |
Polygon |
Mumbai |
Polygon (Mumbai) faucet |
Celo |
Alfajores |
Alfajores faucet, Stakely Celo faucet |
Avalanche |
Fuji |
Fuji faucet |
NEAR |
NEAR Testnet |
NEAR faucet |
Binance Smart Chain |
BSC Testnet |
BNB Smart Chain faucet |
Solana |
Solana Testnet |
Sol faucet, Solana community testnet faucet |
Aurora |
Aurora Testnet |
Aurora faucet |
Cosmos |
Theta Testnet |
Stakely Cosmos faucet |
Polkadot |
Westend Testnet |
Westend faucet |
Arbitrum |
Arbitrum Goerli |
Triangle Faucet, Goerli faucet |
Optimism |
Optimism Goerli |
Coinbase (Optimism Goerli) faucet, Paradigm multifaucet |
StarkNet |
StarkNet Goerli |
StarkNet faucet |
去中心化存储
与流行的观念相反,并非所有 web3 应用程序生成的数据都需要存储在区块链上。包括敏感信息,例如 KYC(Know-Your-Customer)配置文件、用户生成的数据(例如博客文章、声誉评分和社交图谱)和多媒体文件(例如图像和音频)。
鉴于区块链存储的限制和需要支付交易费用,在链上存储这些类型的数据会产生巨大的成本。然而,可以使用去中心化的存储解决方案,在链外存储 web3 应用程序数据,而不会引入影响中心化数据库的可用性、完整性和一致性问题。
去中心化存储网络在分布式点对点网络中的各节点之间复制文件,以确保数据的高可用性和持久性。其中一些平台还通过在不同的节点之间拆分文件和分发分片来确保 web3 应用程序的弹性和正常运行时间。此外,还采用了加密经济机制和密码学来实现相互不信任的各方之间的交互。其结果是一个去中心化的存储市场,开发人员可以向世界各地的节点付费,以租赁未使用的硬盘空间。去中心化存储网络非常适合基于 NFT 的游戏或基于区块链的社交网络等生成大量数据但需要去中心化且具有成本效益的存储解决方案的应用程序。
一些流行的去中心化存储解决方案包括:
以下是如何使用 Infura 通过命令行将文件上传到 IPFS:
curl -X POST -F file=@myfile \ -u "PROJECT_ID:PROJECT_SECRET"\"https://ipfs.infura.io:5001/api/v0/add" |
改进 Web3 应用程序的链下数据存储和访问
即使存在去中心化存储平台,一些开发人员仍然选择中心化数据库,如 Amazon Simple Storage Service (S3) 或 Fauna 进行链下存储。 发生这种情况的原因有很多:
1. 隐私:虽然去中心化存储网络使用了某种形式的加密,但在 p2p 网络中存储数据会阻止应用程序保证用户的完全隐私。
2. 不可改变性:与区块链一样,去中心化存储网络使存储的信息不可变。例如,将 NFT 元数据上传到 IPFS 可以防止将来对其进行修改。虽然不变性当然是必要的,但某些用例(例如动态 NFT)可能需要部分数据是可变的。
3. 查询和索引问题:与传统的、特定于应用程序的数据库不同,像 IPFS 这样的去中心化存储网络缺乏有效查询、排序和索引信息的实用程序。这可能会给处理需要有效访问信息的用例(例如链上游戏或去中心化社交网络)的开发人员带来问题。
4. 可组合性:dapps 存储在链下存储网络上的数据——例如,用户的社交资料——不能被其他应用程序重复使用。这重新引入了 web2 的孤岛式架构,使 Web3 用户很难真正拥有自己的数据。
一些项目已经在致力于创建链下存储解决方案,将去中心化与传统数据库管理的有用功能相结合。此类功能包括基于角色和基于应用程序的访问控制、用于高效查询信息的实用程序(如 SQL)、高级排序和索引功能等。
例如,Ceramic 是一个建立在 IPFS 上的去中心化数据存储层,允许开发人员使用“流”存储可变数据。每个流存储特定类型的信息(例如用户配置文件、链上声誉、社交媒体帖子等)。Ceramic 使用密码学来确保只有正确的一方才能更新流,同时使用版本控制功能来捕获对数据所做的更改。
Tableland 是一个早期项目,构建具有 SQL 集成和智能合约兼容性的 web2 样式关系数据库。与 Ceramic 一样,Tableland 利用 Arweave、Filecoin 和 IPFS 等流行的数据持久层来存储数据。然而,它引入了新的链下基础设施来支持数据查询(使用熟悉的 SQL),并使用 EVM 链来促进访问控制(以及改变元数据的能力)。
Ceramic 和 Tableland 都将可组合性引入到 web3 数据存储中。例如,Ceramic 让 dapps 创建“数据模型”(即用于存储特定信息的流)。开发人员可以为用户的身份元数据创建数据模型,而另一个开发人员可以通过将数据模型插入 dapp 来重用相同的数据。同样,Tableland 通过使“表”(即各个存储层)可以相互操作来保证不同 dapp 之间的数据可组合性。
预言机
作为去信任的必要条件,区块链是确定性状态机。这意味着不同的区块链节点可以计算智能合约状态的变化(使用相似的数据)并得出相同的结果。这就是像 EVM 这样的分布式计算平台如何在没有任何实体充当“真相来源”的情况下就共享状态达成共识的方式。但是,这对 web3 应用程序来说是一种权衡,因为它阻止了智能合约访问链下数据。由于现实世界的信息(例如 ETH 的价格)经常随时间变化,节点无法在执行智能合约交易后不得出冲突结果的情况下使用它。预言机通过将区块链连接到外部系统来解决这个问题,使智能合约能够根据链下数据执行功能。
预言机包括链上组件(预言机合约)和链下组件(预言机节点)。预言机节点获取链下信息(例如,资产价格和资本市场数据),这些信息存储在预言机合约的存储中。然后其他智能合约在执行操作时可以向预言机合约查询信息。
例如,DeFi 借贷协议可能需要代币的当前价格来计算用户存入的抵押品的价值。由于此信息存储在链上,因此重新执行交易的节点可以引用相同的值并避免结果冲突和共识破裂。
链下计算是区块链预言机的另一个用例。预言机节点可以执行资源密集型计算(例如为区块链游戏安全地生成可验证的随机值)并在链上发布结果以供智能合约使用。这种操作在链上进行在经济上是不可行的,但可以在链下环境中以低廉的成本执行。
一些流行的预言机网络包括:
身份管理
身份和访问管理 (IAM) 是任何应用程序的核心部分——应用程序需要验证用户的身份并确认他们访问平台的权利。在 web2 中,这可以使用自定义解决方案来处理,该解决方案将与用户相关的信息存储在数据库中,并使用它来验证用户登录。
使用 OAuth(开放授权)表单是内部身份系统的一种流行替代方法。用户的身份凭证存储在 Facebook、Google 或 Twitter 等第三方服务中,一旦用户完成 OAuth 表单,应用程序就可以访问此信息。
虽然这改善了用户体验(例如,通过消除记住长密码的需要),但它让大型科技公司能够控制用户的个人数据。更糟糕的是,公司将这些数据用于谋取私利(利润),甚至可能阻止用户随意访问这些信息。
相比之下,web3 赋予用户对其在线身份和数据的权力(通常被描述为去中心化或自主权身份)。这需要一个新的用户身份验证系统——一个不依赖于中心化数据库或身份提供者的系统。
基于 Web3 钱包的身份验证
当创建一个新的区块链账户时,用户会生成一个公私密钥对。公钥是公开的,用于验证用相应私钥签名的交易。私钥存储在钱包中,帮助用户证明资产的所有权。
钱包也是在 web3 中管理身份和声誉的构件。由于外部拥有账户 (EOA) 由个人控制(合约账户没有私钥),因此用户可以通过证明账户所有权来使用 dapp 验证其身份。例如,用户可以在消息上签名(在点击“连接钱包”之后),同时后端解码消息并使用公钥验证签名。
我们之前讨论过的 Ethers.js 为基于 Web3 的身份验证提供实用程序。您还可以使用 Web3Auth、WalletConnect 和 SpruceID(以及其他)提供的 SDK 以最少的配置设置基于钱包的身份验证。以太坊命名服务 (ENS) 还提供 Javascript 库,用于检索用户的 ENS 记录以验证身份数据。
去中心化标识符 (DID) 和可验证凭证 (VC)
钱包可以为一次性会话提供基本身份验证,但是如果您想要一个更加分层的用户身份验证系统怎么办?例如,DAO 可以分配声誉分数以识别知名贡献者,而玩 play-to-earn 游戏可以颁发徽章以简化登录工作流程、通知应用程序逻辑或解锁某些功能。这是去中心化标识符 (DID) 和可验证凭证 (VC) 可以提供帮助的地方。
与传统标识符(例如电子邮件地址或社交媒体帐户)不同,去中心化标识符将一个人的身份与任何中央机构或身份提供者分离。DID 为个人提供了一种完全控制其在线身份的方法——在用户认为合适的时间和地点共享信息。
尽管去中心化标识符有不同的形式,但区块链帐户在 web3 中通常被用作 DID。公私密钥密码术使组织能够向用户颁发凭据,任何人都可以在不联系颁发者的情况下进行验证。以下是 dapp 开发人员的工作方式:
1. dapp 向用户发布可验证凭证 (VC)——证明其身份声明的文件(例如,DAO 或去中心化社交网络的成员或游戏中的级别)。
2. dapp 通过使用私钥签名将其 DID 附加到凭证。这简化了身份验证,因为可以使用关联的公钥(存储在区块链上)验证签名。它还使可验证的凭据免受篡改和更改。
3. 凭据可以用用户的 DID 加密并安全地存储在链外(使用 Ceramic 或 IPFS 之类的东西)。这保护了用户隐私(没有其他人可以解密信息)并保证了身份数据的自我所有权(与传统数据库不同,Ceramic 和 IPFS 是去中心化数据存储)。
4. 当用户下次登录 dapp(使用钱包)时,dapp 可以检索和验证与用户的 DID 相关联的凭证(即公钥)。这可以显著改善用户体验,尤其是与会话密钥配对时,可以与 dapp 进行持续交互(无需在会话期间重新验证身份)。
去中心化标识符提供了一个 web3 原生系统,用于管理身份配置文件和以信任最小化的方式对用户进行身份验证。然而,如果没有必要的工具,可能很难从头开始构建一个强大的去中心化识别系统。幸运的是,一些项目正在解决这个难以实现的特性(其中一些已经投入生产):
区块链自动化
区块链自动化工具使开发人员能够通过“监听”区块链网络上的条件触发器来自动化流程。只要预定义的事件发生在链上(有时是链下),这些服务就会运行特定的操作,为 web3 应用程序提供 web2 风格的 IFTTT/Zapier 自动化。
重要的是,区块链自动化工具可以无缝集成 dapp 基础设施的组件,以提高性能和效率。此类组件可能包括但不限于智能合约、前端应用程序、链上/链下事件、API 和其他服务。以下是在开发栈中包含 web3 自动化工具的其他一些优势:
1. 改进 dapp 用户体验:一些 web3 自动化服务充当主动监控系统,报告重要信息——比如智能合约或区块链状态的变化。通过这种方式,您可以通过为用户提供及时方便的链上信息(与您的应用程序相关)访问来改善 dapp 用户体验。
通常,web3 自动化工具允许您围绕用户何时何地收到链上活动通知定义定制化规则。例如,您可能希望通过向 Discord 或 Telegram 发布消息来通知用户 gas 价格的变化(在每个区块更新)。
2. 管理协议操作:确保您的协议无缝运行需要定期执行管理操作。这些操作通常对协议的健康和实用性至关重要,必须定期执行。这里有些例子:
清算 DeFi 借贷协议中的负债务头寸
在区块链游戏中触发每日赔付
在 DAO 中分配链上支付
从价格预言机更新价值
启动和停止 NFT 铸币等
由于智能合约无法自行执行,因此需要有人定期触发这些维护操作。例如,一些内部团队将手动检查智能合约并调用合约中的管理功能来执行维护操作。也就是说,这种方法通常需要在人力和基础设施成本上进行大量投资,并且可能容易出现用户错误和停机时间。
或者,项目可以将智能合约管理委托给第三方自动化服务。这些通常是受激励的运营商(又名“守护者”)网络,它们根据工作描述在智能合约中执行管理功能。该过程是自动化的,因为运营商订阅链上事件并在满足任务中指定的条件时立即执行管理功能。
以下是一些用于自动化智能合约监控和执行的工具:
开始构建 Web3 技术栈
如您所见,web3 开发刚刚起步但范围广泛。web3 技术栈引入了许多新技术,所有这些都是以去中心化和可组合性为基础的。
如果您来自 web2,那么您已经处于优势地位。您已经使用的许多前端技术都直接适用于 web3。了解这些技术如何与新的 web3 技术栈一起工作将增强您为 web3 生态系统开发应用程序的技能。
开发智能合约涉及更陡峭的学习曲线,但您可以利用许多旨在减少新 web3 开发人员学习困难的资源。ConsenSys Academy 为那些在结构化学习环境中茁壮成长的人提供了多个在线课程。
无论您的学习方式如何,关键是开始并坚持不懈——尝试 #30DaysOfWeb3 挑战或开始构建一些项目。web3 是一场革命,但您成为这场革命的一部分的旅程在您的掌控之中。
在 ConsenSys,我们相信 web3 可以为明天的数字经济创建一个无需信任、开源和去中心化的基础。这就是我们继续投资基础设施以帮助开发人员和企业构建下一代 web3 应用程序的原因。
准备好开始构建 web3 技术栈了吗?查看 ConsenSys 产品套件系列的产品,包括 Linea、Infura、Hal、Quorum、Truffle、MetaMask 和 Diligence。
祝您构建快乐!
咨询我们的区块链专家
我们的全球解决方案团队提供区块链培训、战略咨询、实现服务和合作机会。
请与我们联系,了解更多资讯:wechat@consensys.net