贡献方式及常见问题——Solidity中文文档(13)

别光`truffle unbox`了!从零手动构建你的第一个Truffle项目(含MetaCoin合约解析) 本文深入解析如何从零手动构建Truffle项目,超越简单的`truffle unbox`命令,详细讲解项目结构设计、智能合约开发与部署流程。通过MetaCoin合约实例,展示Truffle项目的核心组件配置和最佳实践,帮助开发者掌握区块链开发的底层原理与高级技巧。 阅读详情

image

写在前面:HiBlock区块链社区成立了翻译小组,翻译区块链相关的技术文档及资料,本文为Solidity文档翻译的第十三部分《贡献方式及常见问题》,特发布出来邀请solidity爱好者、开发者做公开的审校,您可以添加微信baobaotalk_com,验证输入“solidity”,然后将您的意见和建议发送给我们,也可以在文末“留言”区留言,有效的建议我们会采纳及合并进下一版本,同时将送一份小礼物给您以示感谢。

贡献方式

对于大家的帮助,我们一如既往地感激。

你可以试着 从源代码编译 开始,以熟悉 Solidity 的组件和编译流程。这对精通 Solidity 上智能合约的编写也有帮助。

我们特别需要以下方面的帮助:

1

怎样报告问题

请用 GitHub issues tracker(https://github.com/ethereum/solidity/issues) 来报告问题。汇报问题时,请提供下列细节:

  • 你所使用的 Solidity 版本

  • 源码(如果可以的话)

  • 你在哪个平台上运行代码

  • 如何重现该问题

  • 该问题的结果是什么

  • 预期行为是什么样的

将造成问题的源码缩减到最少,总是很有帮助的,并且有时候甚至能澄清误解。

2

Pull Request 的工作流

为了进行贡献,请 fork 一个 develop 分支并在那里进行修改。除了你 做了什么 之外,你还需要在 commit 信息中说明,你 为什么 做这些修改(除非只是个微小的改动)。

在进行了 fork 之后,如果你还需要从 develop 分支 pull 任何变更的话(例如,为了解决潜在的合并冲突),请避免使用 git merge ,而是 git rebase 你的分支。

此外,如果你在编写一个新功能,请确保你编写了合适的 Boost 测试案例,并将他们放在了 test/下。

但是,如果你在进行一个更大的变更,请先与 Solidity Development Gitter channel(https://gitter.im/ethereum/solidity-dev) 进行商量(与上文提到的那个功能不同,这个变更侧重于编译器和编程语言开发,而不是编程语言的使用)。

新的特性和 bug 修复会被添加到 Changelog.md 文件中:使用的时候请遵循上述方式。

最后,请确保你遵守了这个项目的 编码风格(https://raw.githubusercontent.com/ethereum/solidity/develop/CODING_STYLE.md) 。还有,虽然我们采用了持续集成测试,但是在提交 pull request 之前,请测试你的代码并确保它能在本地进行编译。

感谢你的帮助!

3

运行编译器测试

Solidity 有不同类型的测试,他们包含在应用 soltest 中。其中一些需要 cpp-ethereum 客户端运行在测试模式下,另一些需要安装 libz3。

soltest 会从保存在 ./test/libsolidity/syntaxTests 中的测试合约中获取所期待的结果。为了使 soltest 可以找到这些测试,可以使用 –testpath 命令行参数来指定测试根目录,例如 ./build/test/soltest – –testpath ./test。

若要禁用 z3 测试,可使用 ./build/test/soltest – –no-smt –testpath ./test ,若要执行不需要 cpp-ethereum 的测试子集,则用 ./build/test/soltest – –no-ipc –testpath ./test。

对于其他测试,你都需要安装 cpp-ethereum ,并在测试模式下运行它:eth –test -d /tmp/testeth。

之后再执行实际的测试文件:./build/test/soltest – –ipcpath /tmp/testeth/geth.ipc –testpath ./test。

可以用过滤器来执行一组测试子集:soltest -t TestSuite/TestName – –ipcpath /tmp/testeth/geth.ipc –testpath ./test,其中 TestName 可以是通配符 *。

另外, scripts/test.sh 里有一个测试脚本可执行所有测试,并自动运行 cpp-ethereum,如果它在 scripts 路径中的话(但不会去下载它)。

Travis CI 甚至会执行一些额外的测试(包括 solc-js 和对第三方 Solidity 框架的测试),这些测试需要去编译 Emscripten 目标代码。

编写和运行语法测试

就像前文提到的,语法测试存储在单独的合约里。这些文件必须包含注解,为相关的测试标注预想的结果。测试工具将编译并基于给定的预想结果进行检查。

例如:./test/libsolidity/syntaxTests/double_stateVariable_declaration.sol

contract test {
   uint256 variable;
   uint128 variable;

}

// ----

// DeclarationError: Identifier already declared.

一个语法测试必须在合约代码之后包含跟在分隔符 —- 之后的测试代码。上边例子中额外的注释则用来描述预想的编译错误或警告。如果合约不会出现编译错误或警告,这部分可以为空。

在上边的例子里,状态变量 variable 被声明了两次,这是不允许的。这会导致一个 DeclarationError 来告知标识符已经被声明过了。

用来进行那些测试的工具叫做 isoltest,可以在 ./test/tools/ 下找到。它是一个交互工具,允许你使用你喜欢的文本编辑器编辑失败的合约。让我们把第二个 variable 的声明去掉来使测试失败:

contract test {
   uint256 variable;

}

// ----

// DeclarationError: Identifier already declared.

再次运行 ./test/isoltest 就会得到一个失败的测试:

syntaxTests/double_stateVariable_declaration.sol: FAIL
   Contract:
       contract test {
           uint256 variable;
       }

   Expected result:
       DeclarationError: Identifier already declared.
   Obtained result:
       Success

这里,在获得了结果之后打印了预想的结果,但也提供了编辑/更新/跳过当前合约或直接退出的办法,isoltest 提供了下列测试失败选项:

  • edit:isoltest 会尝试打开先前用 isoltest –editor /path/to/editor 所指定的编辑器。如果没设定路径,则会产生一个运行时错误。如果指定了编辑器,这将打开编辑器并允许你修改合约代码。

  • update:更新测试中的合约。这将会移除包含了不匹配异常的注解,或者增加缺失的预想结果。然后测试会重新开始。

  • skip:跳过当前测试的执行。

  • quit:退出 isoltest。

在上边的情况自动更新合约会把它变为:

contract test {
   uint256 variable;

}

// ----

并重新运行测试。它将会通过:

Re-running test case...

syntaxTests/double_stateVariable_declaration.sol: OK

image

4

通过 AFL 运行 Fuzzer

Fuzzing 是一种测试技

REMIX编译DeclarationError: Identifier already declared remix编译时候错误 REMIX编译DeclarationError: Identifier already declared 可能是之前的编译生成的文件夹影响,需要删除 阅读详情

相关推荐

eth-alarm-clock-dapp:Chronos-以太坊闹钟DApp

更新:此DApp可在主网上以及Kovan和Ropsten测试网上运行。 以太坊闹钟DApp 主页: 寻找最新的安装? 想运行一个TimeNode吗? 智能合约: 开发指南 如何在本地构建和运行 如果系统上没有NPM,请安装 克隆仓库 npm install所有NodeJS依赖项 npm run dev开发服务器 在网络浏览器中打开localhost:8080 确保将您的MetaMask网络设置为Kovan才能开始使用DApp。 码头工人 如果您希望将DApp作为Docker容器运行,我们为您准备了一个Docker。 要运行容器,请使用以下命令: 构建映像docker build -t

ANSYS_APDL实战入门——从零开始掌握模态分析

本文为ANSYS APDL模态分析实战入门指南,通过一个悬臂梁案例,手把手教你从零开始掌握APDL命令流。内容涵盖从模型创建、材料定义、网格划分到边界条件设置、求解及后处理结果查看的全流程,帮助工程师快速上手结构动力学分析,避免共振风险。

egg99的博客 1132

XDS110 USB Debug Probe连接错误-260:CCS Theia环境下的诊断与修复指南

本文详细解析了CCS Theia环境下XDS110 USB Debug Probe连接错误-260的诊断与修复方法。从硬件连接到驱动状态、固件更新到软件配置,提供了全面的排查指南,帮助开发者快速解决这一常见的调试器通信障碍问题,确保嵌入式开发工作流畅进行。

hope8的博客 285

OpenGL绘制简单场景,实现旋转缩放平移和灯光效果

本项目实现了用OpenGL绘制一个简单场景,包含正方体、球体和网格,实现了物体的旋转、缩放、平移和灯光效果。附有项目完整代码,有详细注释。适合初学者熟悉opengl使用。

张竞成的博客 1万+

制造业批次管理中双计量单位动态转换的实践指南

本文详细介绍了制造业批次管理中双计量单位动态转换的实践指南,特别是在SAP系统中的配置与操作步骤。通过实际案例展示了如何解决采购与生产部门计量单位不一致的问题,提升物料管理效率。重点讲解了批次特性配置、移动类型调整及常见问题排查方法,适用于金属加工、化工等多个行业。

weixin_29228203的博客 159

uniapp+uniCloud实现微信小程序一键登录

(用户唯一标识),用户登录成功后,开发者服务器可以将openid和session_key保存,生成一个自定义登录态的token令牌响应给微信小程序,通过token可以查询openid和session_key,小程序下次请求只要携带着token就可以证明已经登录。这个API就是获取用户信息,每次请求都会弹出授权窗口(这个可能会不弹,这个要看你的版本,根据版本来定,不懂的可以留下评论),用户同意后会返回。到这里就可以实现微信一键登录了,快去试试吧,有问题可以在评论区留言,我看见会尽我知道的为你解答。

lb2917的博客 2577

PCL 欧式聚类(C++详细过程版)

为充分了解算法实现的每一个细节和有待改进的地方,使用C++代码对算法实现过程进行复现。

点云侠的博客 2449

手把手入门YOLO到改进优化教程 | 【P5进阶篇】YOLOv8损失函数改进实战-损失函数IoU之KLD Loss

在本节,将从 KLD Loss(Kullback–Leibler Divergence Loss)的理论到实战代码实现,带你把 KLD Loss融合进 YOLOv8 的训练框架中。并通过训练日志与实验结果,验证 KLD Loss 在实际工程中的优势。

嵌入式阿齐Archie 2万+

华为OD机考真题 新系统 - 数列求值(Java/Py/C/C++/Js/Go)

华为OD机试真题 新系统【数列求值】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【数列求值】多语言题解。

qq_45776114的博客 664

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

上一篇: 已知bug列表——Solidity中文文档(12)
下一篇: 众说区块链:智能合约在建材链上的落地实践
HiBlock区块链社区
博客等级 码龄9年 469粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值