如果你的钱包私钥泄漏被盗,可是defi协议里每天都能产生收益,一领取就被黑客转走了。你会怎么办
最近碰到一个钱包被盗的案例,客户因为私钥泄漏导致里面的钱全被转走,但是因为DeFi中的收益会定时的打到这个钱包地址上,所以找到我们来寻求帮助。在和黑客抢钱的过程中,我们从提高rpc调用次数再到使用EIP-7702技术。发现了7702很多有意思的技术,所以在这里来分享一下。
EIP-7702技术可能大家感到陌生,但其实已经有很多项目方在使用了。
简单来说通过EIP-7702技术,无需签名,就可以进行很多的操作。在你的钱包编写代码,其他人可以通过调用你的钱包做到很多事情。比如需要gas就可以转账走你钱包里的钱,或者无论你往哪个地址中转钱,但最终会转到一个地址上去。
在我们讲EIP-7702的时候。我们先来简单讲一下钱包的原理。
最早期的EVM 地址其实可以分为两种。 一种是EOA外部账户,另一种是合约账户
- 外部拥有账户(EOA)
您可以把它理解为“传统意义上的钱包”,由个人通过私钥直接控制。
当你使用MetaMask、Trust Wallet等钱包软件创建一个新钱包时,生成的就是一个EOA。您会得到一组助记词(对应私钥)和一个以太坊地址。
EOA账户的特点:
- 每个EOA地址都对应一个唯一的、由密码学生成的私钥。谁拥有私钥就是拥有这个钱包的掌控权
- EOA账户是区块链上所有交易活动的起点。我们每一次交易,转账等操作,必须是由某个钱包账户来发起的
- EOA的账户状态里只存储余额、Nonce等基本信息,没有关联任何智能合约代码。
这里需要注意的,在7702技术最大的更新,其实就相当于在EOA钱包上去存储合约代码。如果换个更形象的说法,就是在你的钱包中植入了一个病毒代码。
总结比喻: EOA就像您个人的银行账户,您用私钥(银行卡密码)控制它,可以主动向他人转账或支付账单(调用合约)。
第二个则合约账户(CA)
这类账户则是“没有私钥的地址”。它不是一个由个人直接控制的账户,而是一段部署在区块链上的、可自动执行的代码(智能合约)的化身。说白了,你们打狗的时候用的CA就是这玩意
合约账户的特点:
- 合约账户不受任何私钥的控制,全由其内部的智能合约代码逻辑决定
- 合约账户自己无法成为交易的发起者。它永远是“被调用者”。
- 合约账户被创建后,其代码就被永久地存储在该地址上。这些代码决定了该合约能做什么,以及如何响应外部的调用。
- 合约账户不仅有自己的余额,还拥有一个独立的存储空间,可以记录复杂的数据结构(比如代币余额映射、DAO的投票记录等)。
既然没有私钥,那么如何“控制”一个合约账户呢?答案是:通过其代码逻辑和权限设置。
- 合约代码中可能定义了“所有者”或“管理员”的角色,这个角色通常是一个EOA地址。
- 合约会提供一些特殊函数(如
transferOwnership、mint等),并规定只有“所有者”地址发起的调用才能执行这些函数。 - 所以,您是通过控制那个“所有者”EOA来间接管理合约账户的。
总结比喻: 合约账户就像一个自动售货机。您不能直接打开它(没有私钥),但您可以按照它预设的规则(智能合约代码)投入硬币(发送交易),它就会自动吐出商品(执行操作,如转账、铸造NFT)。售货机的所有者(一个EOA)即代币的创建者,可以通过调用合约方法去增发,燃烧,管理代币。
讲到这里,大家应该对账户有了一个比较清楚的概念了。那我们上面也说了EIP-7702的技术,就是在传统不能存放代码的钱包里,去部署了合约代码。
在钱包中部署了合约代码后,可以带来更多的方便和快捷,但是同样的也给了其他人有了作恶的空间。
下一期,小编会给大家演示一下,如果有人使用7702来做恶。究竟会怎么样。
