币打入合约不完全等于销毁。
有小伙伴提了一个问题,说 zk money 官方合约里80万 DAI的币,是否是别人误操作打入合约的?因为Ta听说 Token 打入合约 = 销毁,是无法取出的。
问题很好,值得花3分钟和大家一起探讨下,补习点行业基础知识,避免后续误操作。
1:普通EOA地址操作任意资产
大家用小狐狸钱包等创建的地址,叫做外部 EOA 地址,即由一个私钥控制的地址。
这个地址名下的任何资产 (ERC20、ERC721等)都可以通过私钥签名的方式,进行转移、出售等操作。
智能合约呢?默认不具备以上任何权限。
2:智能合约有多智能?
智能合约其实一点都不智能,也完全无法自动进行任何操作。
智能合约只能执行代码中设计好的动作(function),且必须由一个外部EOA触发,或另一个智能合约触发。
没错,一个智能合约可以调用另一个智能合约进行任意操作与组合,比如MEV套利合约。
这也是DeFi可组合性真正强大之处。
3:智能合约如何操作合约内的资产?
简单来说,只要合约定义了提现函数,就可以提取合约内的任意对应资产(注:ERC20和ERC721需分别定义)。
如图是某个付费mint的NFT合约,内置的 withdrawAll 函数。
onlyOwner 限制了只有合约拥有者才能提现(不然就成免费ATM了)。
第110行代码即提现核心操作。
4:Token打入合约 = 销毁 正确与否?
江湖传言把币打入合约=销毁,无法取出。这个说法在某些场景下是正确的:即当前合约代码并没有提取对应Token的相关函数。
币打入合约不完全等于销毁。
注:绝大多数合约都是没有提现功能,能提现 ERC20 资产的合约,不一定能提现 ERC721 资产。
故:务必慎之又慎。
5:把 DAI 打入 zk money合约 = 销毁吗?
回到最初的问题,80万DAI被销毁了吗?显然不是的 zk money 一开始就支持ETH、DAI、WBTC(V1版)等资产,且有相应函数来处理对应资产 但如果不慎打入其他代币,比如 USDT,会发生什么事?从代码看,可能真的销毁了,再次提醒,谨慎操作。
责任编辑:Felix