AAA
[18]OpenZeppelin Contracts: https://openzeppelin.com/contracts/
在每个合约、库或接口中,利用以下顺序
在开始编写本身的、自界说的智能合约之前,明智的做法是查抄是否存在任何尺度或开源组件。假如存在这样的尺度合约,而且颠末适当的测试和审计,它们可以将您的措施中的风险降到最低。
3.fallback 函数 (假如存在)
明晰标志函数和状态变量的可见性。可以将函数拟定为 external, public, internal, 或 private. 请相识它们之间的区别。
不要返回 null。不要将 null 通报给函数。
· 代码示例[10]
发起对所有民众接口(ABI 中的所有内容)利用 NatSpec 对 Solidty 合约举办完全注释。
[22]Truffle: https://www.trufflesuite.com/truffle
· 保持一个存储库,所有代码都存放在个中,任何人都可以获恰当前和以前的版本(譬喻 Git)
· NatSpec[11]
· 代码示例[15]
优化 gas 本钱大概是一项值得尽力的事情,以淘汰您本身的陈设以及最终用户的本钱。跟着当前 gas 本钱到达巅峰,网络利用量正在慢慢增加。跟着生态系统的不绝成长,gas 优化的代价也将随之增长。我们将在另一篇博客文章中更具体地先容这些内容。
安详 & 代码阐明
当在 Solidity 代码中激发异常时,所有状态变动都将回滚并遏制进一步执行。幸运的是,Solidity 内置了异常处理惩罚成果(自 0.6 版本开始)。这仅合用于外部挪用(external calls)。
测试疏散
[33]Solidity Patterns: https://fravoll.github.io/solidity-patterns/
[37]Wesley van Heije: https://www.wslyvh.com将您的合约模块化,使其保持较小的局限,并操作现有的尺度和库(拜见章节“尺度&库”)。
[30]eth-gas-reporter: https://github.com/cgewecke/eth-gas-reporter
它基于一系列要害原则。
· 合约果真了行为并埋没了数据 (抽象地说。实际上并未向其他人埋没数据。实际上,区块链上没有数据被埋没,请拜见章节-合约)。这使得在不变动现有行为的环境下添加新的工具变得容易。这也使得很难向现有工具添加新行为。
[21]Brownie: https://github.com/eth-brownie/brownie
4.Functions
Testing智能合约阐明东西有助于识别智能合约裂痕。这些东西运行一套裂痕检测器,打印出发明的任何问题汇总。
编写好的测试来确保你的应用措施按预期事情是不足的。假如你没有丈量任何对象,很难说到底有几多代码正在被测试。测试包围率(或代码包围率)是查找代码库中未测试部门的有用东西。
[20]OpenZeppelin Test environment: https://docs.openzeppelin.com/test-environment/
[13]Solhint: https://github.com/protofire/solhint
查察我的 Clean Contracts[31] 每个章节顶用于支持代码示例的客栈。
[32]Clean Code: https://amzn.to/30RsoKk
· Solhint[13]
· 以太坊改造发起(Ethereum Improvement Proposals,EIPs)描写了以太坊平台的尺度,包罗合约尺度 describe standards for the Ethereum platform, including contract standards. 最终的 ERC[17]
[11]NatSpec: https://solidity.readthedocs.io/en/latest/natspec-format.html
[14]VS Code Solidity: https://github.com/juanfranblanco/vscode-solidity/
· 数据布局果真数据,没有显著的行为。这使得向现有数据布局添加新行为变得容易,但向现有函数添加新数据布局却变得坚苦。
· Slither[29] – Solidity 静态阐明东西
错误处理惩罚
[35]Best Practices for Smart Contract Development: https://yos.io/2019/11/10/smart-contract-development-best-practices/
名目
7.private
[9]NatSpec: https://solidity.readthedocs.io/en/latest/natspec-format.html
[27]Mythril: https://github.com/ConsenSys/mythril
“Truth can only be found in one place: the code”(真理只能在代码中发明)- Robert C. Martin
2.receive 函数 (假如存在)
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。