主页 > imtoken钱包下 > 基于以太坊 ICO 的安全合约架构
基于以太坊 ICO 的安全合约架构
基于以太坊 ICO 的安全合约架构概述
随着比特币和以太坊的兴起,越来越多的项目通过ICO筹集早期资金。 其中,大部分项目使用基于以太坊的ERC20代币发行代币。 基于ERC20代币的代币占据了数字货币市场的半壁江山,从而支撑了以太坊价格的上涨。
以太坊合约的图灵完备性给ICO带来了极大的自由和便利,但也引起了人们对ICO安全性的关注。 综合来看,通过合约控制ICO流程需要解决的几个问题如下:
* 代币是如何创建的,由谁创建?
* 如何在众筹期间创建代币?
* 如何控制用户转出的ETH?
带着上面的问题,如果我们想了解基于以太坊的ICO的技术细节,让我们继续。
ERC20代币
ERC20代币是以太坊平台上的数字货币标准,本质上是一种智能合约。 使用ERC20代币的优势在于:
* 众筹过程公开透明
* 众筹规则可控
* 交易时间可控
以上特性均基于以太坊的图灵完备性,通过合约进行控制。
众筹合同框架
考虑到整个ICO过程的可控性、安全性和监管要求,ICO过程会涉及三个合约:众筹合约、ERC20 Token标准合约、钱包合约,以及用于创建这三个合约的主账户。
* 主账户
主账户是一个普通的以太坊账户,负责创建三个合约
* 众筹合约
控制众筹时间、众筹总额,发起代币创建
为了方便描述四者的关系,这里我们用C代表众筹合约,T代表ERC20 Token标准合约,W代表钱包合约,M代表主账户。 它们的关系如下图所示:
流程说明:
1、创建合约:通过主账户M创建三个合约C、T、W。此时三个合约的所有者为主账户M。(对于一些敏感操作,只有所有者才有操作权限)
2. 切换T的所有者:众筹合约为了分发代币,需要将代币合约T的所有者更换为众筹合约C。(只有完成这一步才能触发后续操作)
3.代币分配:用户参与众筹时,将Ether转入众筹合约C,C根据规则计算要发行的代币数量,并给用户分配代币
4. ETH转账:在分发代币的同时,用户转账的ETH会转入预设的钱包合约W(钱包合约有自己的提现规则)
安全
整个ICO流程看似复杂,其实复杂的背后是有安全考虑的。 其设计过程主要是为了解决以下问题:
* 代币是如何创建的,由谁创建?
* 如果代币只能由合约所有者创建,众筹合约如何顺利创建代币?
* 如何控制用户转出的ETH?
1. 代币是如何创建的,由谁创建的?
显然,不是每个人都可以创建代币! 一般的做法是让代币合约的创建者,即所有者,创建代币。
2. 如何让众筹合约顺利创建代币?
因为用户必须通过众筹合约C参与ICO,所以在用户转入ICO后,众筹合约C需要帮助用户创建代币(代币合约T中为用户存入代币数量)。
由于第一个限制,我们需要想办法让众筹合约C成为代币合约T的所有者。方法是这样的:
1、调用代币合约T中的changeOwner方法,将其所有者变更为众筹合约C;
2.调用众筹合约C的acceptTokenOwner方法接受成为代币合约T的所有者;
这样,众筹合约C就成为了代币合约T的所有者,拥有了创建代币的权限。
如果我以后要进行第二轮众筹,变更众筹合约又想使用之前的token合约怎么办? 很简单,就像上面的方法一样以太坊合约怎么做,众筹合约也可以将自己对token合约的owner权限转移给下一个众筹合约。 原则上,所有者的转移可以永远进行下去。
如何控制用户转出的ETH?
一般团队需要对众筹获得的ETH进行控制,比如锁定一定时间、限制提现金额、双重签名验证等,都可以通过钱包合约进行控制。
总结
基于以太坊ICO的安全考虑,主要针对三种合约(众筹合约、代币合约、钱包合约)进行安全审查。 ICO涉及的资金数额巨大,任何一个合约出现漏洞都会带来巨大的损失。
AE被盗超过100,000 ETH,因为它使用了Parity泄漏的官方钱包。 这足以让我们提高警惕,不要太相信所谓的“官方”,在ICO之前,项目组必须对合约代码进行多次审核以太坊合约怎么做,确保没有漏洞才可以发布。
引用
以太坊白皮书