场景简介
委托调用是合约复用的一种有效方式。逻辑由库合约(delegate lib contract)处理,但是最终的状态数据(持久化数据)及上下文数据(msg.sender/value)还是在调用合约(caller contract)中。
但是要注意的是,调用合约要和库合约中的状态必须位置(在合约状态数据中的index)一致, 因为合约存储状态时是按照 slot的位置,而不是变量名称匹配的。
合约代码
库合约代码: 提供一个简单的斐波那契计算逻辑,计算结果讲存储在状态award中。
调用合约代码逻辑: 两个合约基本逻辑一致,唯一的区别是第二个合约的两个变量故意颠倒了下,以便复现异常。
测试逻辑
测试逻辑代码及结果如上,可以看出,第二个合约调用后得到的结果 3赋值给了 libAddress这个状态上了。