以太坊手续费之殇
以太坊本质上是一个虚拟机,交易的gas成本主要由虚拟机的运行成本组成。当你发送 Token或者执行智能合约时,以太坊在处理这笔交易的过程中需要进行计算,会根据复杂度消耗一笔gas费(ETH)。
目前以太坊上的大部分应用都是以智能合约的形态在运行,而以太坊智能合约采用solidity语言编写,因而在编写智能合约时,不仅要考虑安全,还要考虑语言的优化,以便合约应用更高效便宜,一方面也为自己的用户节省应用手续费。
如何节省手续费
设计合约
因为合约执行的复杂度和计算量直接与执行消耗的gas相关,所以在合约设计,创建合约时,最好对需要上链的数据结构进行优化设计,只将必要的数据上链存储,比如基于ERC-721的NFT标准,NFT合约只要求将NFT的唯一TokenId上链存储,TokenId与对应标记物品的关系可以用URI的方式指向传统互联网网络上的一个资源;
比如,我们设计一个基于鱼类的NFT合约,按照ERC-721标准,我们只需要实现类似如下的合约即可
Contract MyFish {
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// .......
function tokenURI(uint256 tokenId) public view returns (string memory) {
// ......
}
//......
}
以上合约中,我们只将NFT唯一TokenId在以太坊上,并通过URI标记对应物品
假如我们将鱼类的其它属性也上链存储,合约设计成如下形式
Contract MyFish {
struct Fish {
uint length;
uint weight;
uint age;
}
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping