有小伙伴看到我有时写了 #if 有时写了 [Conditional] 问我两个不是一样的吗,何必多此一举。然而实际上两者的编译处理是不同的,因此也有不同的应用场景。 于是我写到这篇文章当中。...---- 条件编译符号和预处理符号 我们有时会使用 #if DEBUG 或者 [Conditional("DEBUG")] 来让我们的代码仅在特定的条件下编译。 而这里的 DEBUG 是什么呢?...而在将 C# 代码编译到 dll 的编译环节,这个叫做 “预处理符号”(Preprocessor symbols) 本文要讨论的是 #if 和 Conditional 的使用,这是在 C# 代码中的使用场景...; #endif 在这段代码中,#if DEBUG 和 #endif 之间的代码仅在 DEBUG 下会编译,在其他配置下是不会编译的。...场景 因为 #if DEBUG 和 #endif 仅仅影响包含在其内的代码块,因此其仅仅影响写的这点代码所在的项目(或者说程序集)。于是使用 #if 只会影响实现代码。
Hardhat 开发环境 如何编译合约并为其编写测试功能 本教程不涉及任何前端开发,但如果你有兴趣了解如何开始 Web3 dapp 开发,请随时在 dev.to 上查看教程: 在 React 中构建...Nomic Labs 的伙伴们已经低调地创造了以太坊开发环境的标准:Hardhat[7]。 它包括测试运行、编译、部署、丰富的插件系统和运行一切的本地网络。...第 3 步:导入和编译合约 让我们首先在根目录中创建一个名为 contracts 的新文件夹(Hardhat 默认使用“contracts(合约)”文件夹作为源文件夹 - 如果你想更改该名称,你需要在...我们可以使用内置的 compile 任务来执行此操作 - 我们需要做的就是运行: npx hardhat compile 当我们使用 Hardhat 编译合约时,将为每个合约生成两个文件,并放置在 artifacts...: 如何找到特定项目的智能合约代码 如何将该代码添加到本地开发环境 如何安装和设置一个简单的安全帽开发环境 如何编译合约并为其编写测试 希望这能让你对使用 Hardhat、Ethers、Chai 和 Mocha
关于Optimism 的 Rollup 是如何工作的[7],其他人已经写了更详细的。这篇文章的重点是我们可以在乐观的以太坊上做什么,如何运行和开发... 我们开始吧!...从用户和开发者的角度来看,需要考虑的主要问题之一是如何处理 L1 和 L2 网络,哪些要呈现给用户,以及如何确保钱包连接到正确的网络。...因此,我们只需要做一些小的改动,就可以使我们的现有 scaffold-eth 上的合约在 L2 上可行--我们只需要在我们的 hardhat 配置中导入Optimism 编译器[17](然后编译所有合约...有一些细微的差别--我们不能使用内置的 Hardhat 网络,必须实例化我们自己的提供者和签名者。...在 Optimism 的桥接:古英语 ERC20 虽然对于很多使用场景来说,使用他人部署的 ETH 桥和代币桥 可以满足大部分 L1 到 L2 桥接的需求,但我们也想了解如何将自己的 L1 ERC20
使用的NodeJS[3]版本要高于v16。 注意 我们使用NPM来安装依赖。...要使用此插件扩展Hardhat的功能,我们必须在Hardhat配置文件hardhat.config.ts中导入web3-v4插件。请在配置文件的顶部导入此内容。...编译、测试和部署合约 •编译、部署合约 $ npx hardhat compile 执行上面的命令会创建一个名为artifacts文件夹,其中包含着构建信息和编译好的合约。...现在是时候测试下我们的合约是否如我们所期望的了。因为我们使用Web3.js来向区块链广播和存储数据,所以我们也使用相同的协议来查询和修改数据。...项目 [5] 安装必要的依赖项(包括hardhat-web3-v4): #安装必要的依赖项包括hardhat-web3-v4 [6] 编写智能合约: #编写智能合约 [7] 编译、测试和部署合约: #编译测试和部署合约
[10]和之前一样,但要选择不同的版本。...在安装Hardhat的同一个目录下,添加一个hardhat.config.ts(我们将使用 typescript 和 solidity 0.7.6 编译器)。...在本教程中,我们将使用 hardhat-deploy-ethers 和 hardhat-deploy 插件。它们将允许你与以太坊交互,并测试合约。后面我们会解释如何使用的。...使用不同的账户 如果你需要从默认账户以外的账户发送交易来测试你的代码,你可以使用getContract的第二个参数。 import {expect} from "....要使用它,必须在合约代码中导入Hardhat的console.log。
Foundry 提供了一套在 Rust 中构建的工具,允许区块链开发者在 Solidity 中编写测试,并通过命令行部署和与合约交互。 为什么用 Foundry?...forge install jamesbachini/myVault -hh 这里我们使用的是 Github 用户名和版本库名称,加上-hh 参数,用于迁移 Hardhat 版本库。...forge init myrepo 然后就可以继续编译和测试智能合约了 forge build forge test 注意测试是如何通过的,还得到了测试交易的 Gas 成本 ---- 如何使用 Hardhat...= b"); fail(); } } 然后,我们可以在整个合约中使用这个断言,或者建立一个自定义断言库,并类似于我们先前导入标准库的方式来导入它们。...如果代码库包含许多不同的智能合约,可以使用--match-contract将单个合约和它的依赖关系分离出来,甚至可以使用--match-test命令行选项进行特定测试。
本文作者:全干攻城尸[1] 本系列课程: 第一节:使用 hardhat 开发以太坊智能合约-搭建环境[2] 第二节:使用 hardhat 开发以太坊智能合约-测试合约[3] 第三节:使用 hardhat...开发以太坊智能合约-发布合约[4] 第四节:使用 hardhat 开发以太坊智能合约-验证合约[5] 在我们实际开发智能合约的时候,以往的开发一般都是使用 remix 在线编译器,它的好处是即开即用,...该文件用于项目的配置使用,如区块链网络配置、合约编译版本配置等等,后续在讲解合约发布的时候会具体讲解里面的区块链网络配置 通过本章学习,我们使用 hardhat 搭建起了一个基本的工程项目,在下一章节里...,我会带领大家使用 hardhat 一起开发、部署合约,感兴趣的小伙伴关注一下吧~ 参考资料 [1] 全干攻城尸: https://learnblockchain.cn/people/5344 [2]...使用hardhat开发以太坊智能合约-搭建环境: https://learnblockchain.cn/article/4885 [3] 使用hardhat开发以太坊智能合约-测试合约: https:/
然而经过了一番调研,业界还是使用 HardHat 框架居多,也有更多拓展,且我关注的 Solidity 教程也更新了 Javascript 版本,于是还是打算学习一下。...我们可以通过 yarn 安装 solc 命令行工具进行编辑,并且可以选择对应版本,命令如下: yarn add [email protected] 安装完成后,,我们可以通过 solcjs 命令来进行编译...获取编译结果 编译完成后会生成 abi 和 bytecode 文件,分别以 .bin 和 .abi 为后缀。...Rinkeby 测试网络进行交互的步骤,在真正的生产项目开发中我们一般不会直接使用 ethers.js 这样的库,而是会使用 Brownie、HardHat 这样进一步封装的框架,但了解 Web3.py...后续我还会对 HardHat 框架的使用作进一步讲解。
Go编译器生成代码所针对的平台CPU架构 本机的CPU架构(例如,AMD64、Arm等) GOOS 用于指示Go编译器生成代码所针对的操作系统 本机的操作系统(例如,Linux、Darwin、Windows...用于指示存储构建结果缓存的路径,这些缓存可能会被后续的构建所使用 不同操作系统上有不同的默认值。...每个Go项目都应该有自己的目录,通常按照导入路径的结构来组织。...它告诉Go编译器在哪里找到标准库以及其他与Go相关的工具和资源。GOROOT的默认值由Go安装程序设置,通常位于系统的特定目录中,例如/usr/local/go或C:\Go。...goreturns - 添加快捷键运行goreturns来格式化和组织导入语句。 3.2 Goland 特点:Goland是JetBrains公司开发的商业IDE,专门用于Go语言开发。
Solidity 智能合约开发 - 玩转 Web3.py Solidity 智能合约开发 - 玩转 ethers.js 但是在真正的复杂业务场景中,我们往往会使用一些进一步封装的框架,如 HardHat...Hardhat 介绍 Hardhat 是一个基于 JavaScript 的智能合约开发环境,可以用于灵活地编译、部署、测试和调试基于 EVM 的智能合约,并且提供了一系列工具链来整合代码与外部工具,还提供了丰富的插件生态...优化代码格式化 VS Code 配置 我本地是通过 VS Code 进行代码开发的,可以通过安装 Solidity + Hardhat 与 Prettier 两个插件来进行代码格式化,可以使用打开 VS...yarn hardhat compile 命令来编译合约: 添加 dotenv 支持 在开始编写部署脚本之前,我们先配置一下 dotenv 插件,这样我们就可以使用 dotenv 来获取环境变量。...,如本地测试、开发、上线环境等等,Hardhat 也提供了便捷的方式来配置网络环境。
译文出自:登链翻译计划[1] 译者:翻译小组[2] 校对:Tiny 熊[3] 本教程是 NFT 系列的第一部分,将带你逐步了解如何使用以太坊和 Inter Planetary File System(IPFS...在本教程的第二部分,将讨论如何使用我们的智能合约来铸造一个 NFT,在第三部分,我们将解释如何在 MetaMask 上查看你的 NFT。...第 1 步:连接到以太坊网络 有一堆方法可以向以太坊区块链提出请求,但为了方便起见,我们将使用Alchemy[12]上的免费账户,这是一个区块链开发者平台和 API,允许我们与以太坊链进行通信,而无需运行我们自己的节点...Hardhat[20]是一个开发环境,用于编译、部署、测试和调试你的以太坊软件。...为了确保到目前为止一切正常,让我们来编译合约。
Solidity源代码文件结构 源文件可以包含任意数量的合约定义,包括指令和编译指示。...版本Pragma 源文件可以(也应该)用所谓的版本注释来注释,以拒绝被编译为未来可能引入不兼容更改的编译器版本。...版本附注使用如下: pragma solidity ^0.4.0; 这样的源代码文件不会使用早于版本0.4.0的编译器进行编译,并且它也不适用于从版本0.5.0开始的编译器(第二个条件是使用^添加的)。...可以为编译器版本指定更复杂的规则,表达式遵循npm使用的规则。...在实际编译器中使用 调用编译器时,不仅可以指定如何发现路径的第一个元素,但可以指定路径前缀重新映射,以便例如 github.com/ethereum/dapp-bin/library被重新映射到/usr
开发以太坊智能合约-发布合约[4] 第四节:使用 hardhat 开发以太坊智能合约-验证合约[5] 通过我们前面两节课程的学习,我们掌握了 hardhat 开发环境的基本搭建流程以及合约的测试方法,...下面我们来学习一下如何使用 hardhat 发布一个合约到区块链网络上 一、部署脚本 1、脚本文件说明 在工程项目 scripts 中,我们可以找到一个名为 deploy.js,这个文件就是我们部署合约使用的脚本文件...的配置文件,这个配置文件主要用来配置 solidity 编译配置以及 hardhat 需要使用的一些配置信息 solidity: "0.8.17", 上面代码配置了 solidity 编译版本,我们可以根据需要自行修改...通过本节课程的学习,我们掌握了合约的部署方法,已经如何配置区块链网络,并在真实的区块链网络上进行合约部署,下一节我们将会讲解如何使用 hardhat 进行合约验证操作 作者说: 文章是否能够顺畅阅读以及理解...有任何意见和建议欢迎评论区给我留言 参考资料 [1] 全干攻城尸: https://learnblockchain.cn/people/5344 [2] 使用hardhat开发以太坊智能合约-搭建环境
foundry:以太坊应用程序开发工具包 一个用 Rust 编写的用于以太坊应用程序开发的快速、便携和模块化的工具包。...包括: Forge:以太坊测试框架(如 Truffle、Hardhat 和 Dapptools)。 Cast:瑞士军刀,用于与 EVM 智能合约交互、发送交易和获取链数据。...特点: 快速、灵活的编译管道 Solidity 编译器版本自动检测安装 增量编译和缓存:仅重新编译更改的文件 并行编译 非标准目录结构支持 测试是用 Solidity 编写的 使用收缩输入和打印反例的快速模糊测试...快速远程 RPC forking 模式利用 Rust 的异步基础架构 灵活的 Debug 日志 Dapptools 风格,使用 DsTest 发出的日志 Hardhat 风格,使用流行的 console.sol.../gakonst/foundry chirperjax:简单的2D游戏平台 一个简单的 Rust 2D 平台游戏,使用了 Gate 和 Collider 库。
本文作者:全干攻城尸[1] 本系列课程: 第一节:使用 hardhat 开发以太坊智能合约-搭建环境[2] 第二节:使用 hardhat 开发以太坊智能合约-测试合约[3] 第三节:使用 hardhat...开发以太坊智能合约-发布合约[4] 第四节:使用 hardhat 开发以太坊智能合约-验证合约[5] 上一章我们讲解了如何搭建基本的 hardhat 开发环境,这一章我们来讲一下如何测试、部署合约 特别提醒...在 hardhat 里,我们使用 chaijs Chaijs 官网[6] 来进行断言测试, 感兴趣的朋友,可以浏览 chai 官网获取更多信息,通过使用 expect 方法,进行断言测试 describe...2.4 测试演示 接下来,让我们运行测试,来看一下测试的结果 使用如下命令来进行合约测试: npx hardhat test 从图中打印的信息我们可以清晰的看出测试结果,值得注意点是,打印也是具有层级的...,这个是因为我们循环嵌套使用 describe 产生的效果,通过嵌套使用,可以让我们测试结果变得更为清晰,推荐大家使用 通过本章的学习,我们了解了合约是如何进行测试的,以及测试需要注意的一些事项,接下来我们会讲解如何进行合约的部署
如果你是区块链开发的新手并且不知道从哪里开始,或者你只是想了解如何部署智能合约并与之交互,那么本指南适合你。...为简单起见,我们将在 Alchemy 上使用免费帐户(如果你还没有 Alchemy 帐户,请点击在此处免费注册),这是一个区块链开发平台和 API,允许我们与以太坊链进行通信,而无需运行我们自己的节点。...Hardhat 是一个用于编译、部署、测试和调试以太坊软件的开发环境。...智能合约是用一种称为 Solidity 的语言编写的,我们将使用它来编写我们的 HelloWorld.sol 智能合约。...将以下内容复制并粘贴到你的 HelloWorld.sol 文件中,并确保阅读注释以了解此合约的作用: // 使用语义版本控制指定 Solidity 的版本。
上一期,我们介绍了在本体上开发和部署 EVM 合约的工具,以及如何使用 MetaMask 插件数据客户端来管理以太坊数据客户端。这一期,我们将为您带来本体 EVM 合约开发流程演示。...第四部分 EVM 合约开发流程演示 下面我们将使用 Hardhat 工具来演示在本体网络中开发部署和测试 EVM 合约的完整流程。...例如,红包总金额是100个通证,红包的数量是10,即有10个不同的地址领取红包。为了简单起见,我们设置每个红包金额相等, 也就是每个地址可以领10个通证。...4.3 使用 Hardhat 编译和测试合约 4.3.1 创建 Hardhat 项目 mkdir hardhatdemo cd hardhatdemo npm init npm install --save-dev...下期,我们将为您提供 Web3 API 参考,并教您如何使用 Ontology Bridge 本体跨链桥实现本体数字资产与以太坊数字资产的一键互跨,敬请期待。
前言 在前文《Solidity 智能合约开发 - 基础》中,我们学习了 Solidity 的基本语法,并且了解了可以通过 Brownie 与 HardHat 等框架进行调试。...,通过一个 People 结构体对象来存储人名和他喜欢数字,通过一个数组来存储多个人的信息,并提供了添加、查找方法。...Solidity 编译程序,使用 solcx 库中的compile_standard 方法对上文读取的合约源文件进行编译,并将编译结果存入变量 compiled_sol 中。...安装完成后选择 Quick Start 即可快速启动一条本地运行的区块链网络,并初始化了十个拥有 100 ETH 的账户,开发调试过程中可使用。...,在真正的生产项目开发中我们一般不会直接使用 Web3.py 这样的库,而是会使用 Brownie、HardHat 等进一步封装的库,但了解 Web3.py 或 Web3.js 等库的使用方法也非常重要
Hardhat 是一个编译、部署、测试和调试以太坊应用的开发环境。它可以帮助开发人员管理和自动化构建智能合约和 dApps 过程中固有的重复性任务,并围绕这一工作流程轻松引入更多功能。...这意味着 hardhat 在最核心的地方是编译、运行和测试智能合约。 Hardhat 内置了 Hardhat 网络,这是一个专为开发设计的本地以太坊网络。...Hardhat Runner 是与 Hardhat 交互的 CLI 命令,是一个可扩展的任务运行器。它是围绕任务和插件的概念设计的。每次你从 CLI 运行 Hardhat 时,你都在运行一个任务。...例如,npx hardhat compile运行的是内置的compile任务。任务可以调用其他任务,允许定义复杂的工作流程。用户和插件可以覆盖现有的任务,从而定制和扩展工作流程。...Hardhat 的很多功能都来自于插件,而作为开发者,你可以自由选择想使用的插件。Hardhat 不限制使用什么工具的,但它确实有一些内置的默认值。所有这些都可以覆盖。 文档目录摘选 ?
解决方案 2 include 间接包含 示例 正确的处理方法 条件编译控制示例 编译不同产品 控制开发版本和发布版本编译 四 编译指示字 error line error 编译指示字 1 error..., 控制软件分支编译; 2.区分版本 : 区分软件调试版本 和 正式上线的版本, 开发版本肯定有很多调试信息, 正式版没有冗余的信息; 条件编译 注意点 : 1.命令行定义宏 : 可以使用 gcc...: 开发中, 可以条件编译来维护一套代码, 编译出不同的产品 ; 4.开发板和正式版区分 : 使用条件编译可以区分产品的开发调试版本 和 正式发布版本 ; ---- (2) 条件编译 示例 (简单的条件编译...条件编译控制示例 ( 编译不同产品 | 控制开发版本和发布版本编译) ---- 条件编译控制代码示例 : 1.代码 : #include //控制开发版本与发布版本 : //...#pragma 作用 : 该 编译器指示字 指示编译器完成一些特定的操作 ; 2.编译器特有, 不可移植 : #pragma 的很多指示字 参数, 这些参数 都是编译器 特有的, 编译器指示字 在 编译器之间不通用
领取专属 10元无门槛券
手把手带您无忧上云