1、使用struct结构体
使用struct结构体会结构存储空间,编译器会自动优化struct的存储。比如uint类型,不管是uint32还是uint256,默认都会使用256存储。两个uint32也占用2个256的存储单元。但如果是在struct内部的两个uint32,则只会占用一个256存储单元。
2、对于不需要修改链上内容的函数,加上view关键词。
当玩家从外部调用一个view函数,是不需要支付一分 gas 的。
这是因为 view 函数不会真正改变区块链上的任何数据 - 它们只是读取。因此用 view 标记一个函数,意味着告诉 web3.js,运行这个函数只需要查询你的本地以太坊节点,而不需要在区块链上创建一个事务(事务需要运行在每个节点上,因此花费 gas)。
稍后我们将介绍如何在自己的节点上设置 web3.js。但现在,你关键是要记住,在所能只读的函数上标记上表示“只读”的“external view 声明,就能为你的玩家减少在 DApp 中 gas 用量。
注意:如果一个
view函数在另一个函数的内部被调用,而调用函数与view函数的不属于同一个合约,也会产生调用成本。这是因为如果主调函数在以太坊创建了一个事务,它仍然需要逐个节点去验证。所以标记为view的函数只有在外部调用时才是免费的。
本文介绍了两种优化智能合约的方法以降低以太坊 Gas 费用:1) 使用 struct 结构体可以更高效地利用存储空间,例如内部的 uint32 会占用较少的空间。2) 对于只读函数,添加 view 关键字,使得外部调用不需支付 gas,但内部调用仍会产生成本。理解并应用这些技巧能帮助玩家减少 DApp 中的 Gas 开销。

被折叠的 条评论
为什么被折叠?



