在智能合约中数组0地址有时候用于存储某一类具备特殊意义的数据,但是有时候也用0地址来表示查询无果的情形,如果将这两者混用或误用,则可能导致逻辑设计的严重问题,本篇文章将对此进行简单介绍。
智能合约中的add和remove两个函数用于增加和移除受益人,这里的depositariesIndex是depositaries数组的索引值:


但是在以下位置处,合约要求添加的委托人地址索引为0:

同样的问题存在于以下位置,不允许删除索引为0的受益人:

所以说这里原来的设计目的是索引为0则表示该受益人不存在,但是在增加收益人时却在索引为0的位置存放的受益人,从而导致索引为0的受益人地址覆盖,而对应的索引为0的受益人地址不可被删除~
在索引为0的地址不存放任何受益人地址信息,将所有存储的数据往后移动一个索引位置:
