接下来,本文将从这18种设计模式中选择最为通用常见的举办先容,这些设计模式在实际开拓经验中获得了大量检讨。
//强制要求每个地点只能挪用一次
//计数
}
}
除此之外,合约的果真性、回调机制,每一个特点都可被操作,作为进攻手法,稍有不慎,轻则合约形同虚设,重则要面对企业机要泄露的风险。所以,在业务合约上链前,需要预先对合约的安详性、可维护性等方面作充实思量。
_calls++;
}
}
安详性(Security)
幸运的是,通过近些年Solidity语言的大量实践,开拓者们不绝提炼和总结,已经形成了一些"设计模式",来指导应对日常开拓常见的问题。
}
这些设计模式涵盖了安详性、可维护性、生命周期打点、鉴权等多个方面。
//挪用账户的回调函数跟着区块链技能成长,越来越多的企业与小我私家开始将区块链与自身业务相团结。
智能合约设计模式概述
_addService.addByOne();AdderInterface adder = AdderInterface(msg.sender);
contract BadAdder is AdderInterface{
//回调
进攻者只需要陈设一个合约BadAdder,就可通过它来挪用AddService,就可以到达进攻结果。BadAdder合约如下:
假如缺乏防人之心,那些“故意叵测”的外部代码就大概将你的合约粉碎殆尽。好比,外部挪用可通过恶意回调,使代码被重复执行,从而粉碎合约状态,这种进攻手法就是著名的Reentrance Attack(重放进攻)。
假如AddService如此陈设,恶意进攻者可以等闲节制AddService中的_count数目,使该计数器完全失效。
进攻进程的时序图如下:
uint private _calls;
智能合约
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。