文章前言
在智能合约中数组0地址有时候用于存储某一类具备特殊意义的数据,但是有时候也用0地址来表示查询无果的情形,如果将这两者混用或误用,则可能导致逻辑设计的严重问题,本篇文章将对此进行简单介绍。
问题描述
智能合约中的add和remove两个函数用于增加和移除受益人,这里的depositariesIndex是depositaries数组的索引值:
但是在以下位置处,合约要求添加的委托人地址索引为0:
同样的问题存在于以下位置,不允许删除索引为0的受益人:
所以说这里原来的设计目的是索引为0则表示该受益人不存在,但是在增加收益人时却在索引为0的位置存放的受益人,从而导致索引为0的受益人地址覆盖,而对应的索引为0的受益人地址不可被删除~
安全建议
在索引为0的地址不存放任何受益人地址信息,将所有存储的数据往后移动一个索引位置:
原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34137.html