在以太坊中,账户拥有4个字段:{nonce,balance,codeHash,StorageRoot}。 一共分为2种账户:外部账户、合约账户。 外部账户,Externally Owned Accounts,简称EOA,它拥有私钥,其codeHash为空。 合约账户,Contact Account,简称CA,它没有私钥,其codeHash非空。
判断一个地址是否为合约地址的方法如下:
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.2;
library Address {
function isContract(address account) internal view returns (bool) {
// According to EIP-1052, 0x0 is the value returned for not-yet created accounts
// and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
// for accounts without code, i.e. `keccak256('')`
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
// solhint-disable-next-line no-inline-assembly
assembly {
codehash := extcodehash(account)
}
return (codehash != accountHash && codehash != 0x0);
}
}
EOA还是EOA。但是合约账户之外还有智能合约钱包。
EOA 钱包指的是用户自己保管私钥、没有使用链上智能合约来控制的钱包
区块链的双刃剑:一方面,没有中心化的权威能审查或阻止你使用这个系统,另一方面,如果出了问题,因为没有中心化的机构为你负责。而且确实有出问题的时候。
再看用户会看重自主托管性,想想隐私协议 PGP:我们都在不同程度上抱怨谷歌(和 NSA)可以直接查看我们的邮件,但没有人(除了一小部分密码朋克)去使用 PGP 来保护我们的邮件,即使这种技术已经存在几十年了。或者,你想想我们是怎么同意把自己的私人信息交给 Facebook 和 Twitter 的,全都是为了换取社交网络的便利呀。我认为,拿自主托管性来换取便利的风险是非常真实的,而且当这一切真的发生时,我们作为一个生态也就失败了。
有了智能合约钱包,或者叫 “智能钱包”(与 EOA 钱包相对),就是利用智能合约来实现用户自定义的安全网。我们可以有社交恢复机制,用户丢失钱包还能有所挽回;我们还有错误监控机制,如果钱包发起了可疑的操作,可以要求额外的确认操作。这些安全措施都可以在区块链上实现。因此解锁此前没有的用户体验也无需牺牲自主托管。
时间锁往往是一段代码,用于锁定智能合约的某些功能,这样可以为功能的实现限定时间。
在区块链中,通常时间锁锁住的是从合约中转移资金的功能。
比如说:只有在特定日期、特定时间或特定区块高度时才能动用资金。
为了撇清跑路的嫌疑,时间锁已被许多项目采用,用以承诺项目会持续安全发展。
也许今后除了必要的审计报告外,项目已运用时间锁机制的通告也将成为项目上线的标配。
值得一提的是,时间锁作为安全解决方案的一种,并不能被当作是100%的保障手段。
最后SushiSwap将管理权限交由时间锁(Timelock)合约,社区成员以及投资者重新拾取了被欺诈新闻所动摇的信心。
SushiSwap也因此重新回到了DEX赛道的领先地位。
PancakeSwap则是另一个使用时间锁的典型范例,但是方式与SushiSwap略有不同。
PancakeSwap开发人员建立了时间锁合约,协议中发生的每个更改都将被公开宣布,并在其生效之前的六个小时持续在网络上广播,这使社区成员和开发人员有充分的时间审查最新的代码更改,以确保一切按照预期进行。
同时,那些密切关注项目动态的并作为想要成为进入新资金池第一位的投资者和流动性提供者,在具备一定技术知识的前提下,都可以通过监测时间锁合约来提前做好准备,获得第一时间参与的机会
UnRekt.net列出了一个已使用时间锁的项目及其合约地址的列表。
你可以通过Etherscan或BSCscan查看合约来监测该地址上发生的每一笔交易。
除此之外,运用区块链浏览器来设置提醒也是一个很好的办法。
这样一来,无论是资金变动,还是合约生效前六小时的通报,你都可以在合约地址确认交易后立即收到电子邮件。
复制以下链接至浏览器查看如何设置电子邮件通知:https://info.etherscan.com/watch-list/
时间锁合约由平台的管理员合约(称为“Governor”)控制。
该合约可以由单个管理员控制,也可为多重签名设置或者是由DAO(去中心化的自治组织)控制。
这种区别很重要,因为在时间锁上具有控制权的任何人都可以提交他们想要完成的任何交易,或者是将其设置为易受攻击的合约。
而且,另外很重要的一点是:时间锁合同并不阻止交易被确认,它只是在交易实际发生之前将此笔交易向网络进行广播。
由于这个原因,如果没有人时刻关注时间锁合约,恶意管理者完全可以在投资者们反应过来之前,就提取耗尽协议内的资产。