以太坊采用不同的事务类型来定义不同的操作,例如,将以太币发送至某个地址、部署合约等等。
在最近的柏林升级之前,以太坊主要有4种不同的事务「类型」:
·带有收款方地址、数据字段的常规事务
·不带有收款方地址的合约部署事务,其数据字段填写的是合约代码
·签名?v?值不含链ID的事务
·签名?v?值含有链ID的事务??
上述事务类型都采用相同的格式。不同的以太坊客户端、库和其它工具必须分析每个事务来判断它属于哪个类型。这四种不同的事务类型引入了很多复杂的情况。我们需要查看事务的所有字段来判断其所属类型。这是人们在提议新的事务类型时不得不面对的重大难题,直到EIP2718出现才打破这一困境。
以太坊现在有了新的事务标准TypedTransactionEnvelope,由?EIP2718?的提议者?MicahZoltu?定义。该标准为以太坊上的一些新功能和即将开发的功能奠定了基础。在本文中,我们将回顾柏林升级引入的一些标准以及未来有可能引入的其它标准。
Beosin:SEAMAN合约遭受漏洞攻击简析:金色财经报道,根据区块链安全审计公司Beosin旗下Beosin EagleEye 安全风险监控、预警与阻断平台监测显示,2022年11月29日,SEAMAN合约遭受漏洞攻击。Beosin分析发现是由于SEAMAN合约在每次transfer函数时,都会将SEAMAN代币兑换为凭证代币GVC,而SEAMAN代币和GVC代币分别处于两个交易对,导致攻击者可以利用该函数影响其中一个代币的价格。
攻击者首先通过50万BUSD兑换为GVC代币,接下来攻击者调用SEAMAN合约的transfer函数并转入最小单位的SEAMAN代币,此时会触发合约将能使用的SEAMAN代币兑换为GVC,兑换过程是合约在BUSD-SEAMAN交易对中将SEAMAN代币兑换为BUSD,接下来在BUSD-GVC交易对中将BUSD兑换为GVC,攻击者通过多次调用transfer函数触发_splitlpToken()函数,并且会将GVC分发给lpUser,会消耗BUSD-GVC交易对中GVC的数量,从而抬高了该交易对中GVC的价格。最后攻击者通过之前兑换的GVC兑换了50.7万的BUSD,获利7781 BUSD。Beosin Trace追踪发现被盗金额仍在攻击者账户(0x49fac69c51a303b4597d09c18bc5e7bf38ecf89c),将持续关注资金走向。[2022/11/29 21:10:04]
标准化的事务封套??
Beosin:EthTeamFinance项目遭受到了漏洞攻击事件简析:据Beosin EagleEye 安全预警与监控平台检测显示,ETH链上的EthTeamFinance项目遭受漏洞攻击,攻击合约0xCFF07C4e6aa9E2fEc04DAaF5f41d1b10f3adAdF4通过LockToken合约的migrate函数没有正确验证_id和params的漏洞,将WTH,CAW,USDC,TSUKA代币从V2流动性池非法升级到V3流动性池,并且通过sqrtPriceX96打乱V3流动池的Initialize的价格,从而获取大量refund套利。共计套利了约1300多万美元。[2022/10/27 11:49:12]
过去,以太坊的事务都采用同一种格式。每个以太坊事务都有6个字段:nonce、gasprice、gaslimit、toaddress、value、data、v、r和s。这些字段需要经过?RLP编码,如下所示:
RLP()
Beosin:ULME代币项目遭受黑客攻击事件简析:金色财经报道,10月25日,据Beosin EagleEye 安全预警与监控平台检测显示,ULME代币项目被黑客攻击,目前造成50646 BUSD损失,黑客首先利用闪电贷借出BUSD,由于用户前面给ULME合约授权,攻击者遍历了对合约进行授权的地址,然后批量转出已授权用户的BUSD到合约中,提高价格ULME价格,然后黑客卖掉之前闪电贷借出的ULME,赚取BUSD,归还闪电贷获利离场。Beosin安全团队建议用户用户取消BUSD对ULME合约的授权并及时转移资金减少损失。[2022/10/25 16:38:21]
EIP2718?为类型化事务定义了一种新的通用封套。在新的标准下,事务如下所示:
TransactionType?||?TransactionPayload
上述字段的定义是:
·TransactionType:0至0x7f范围内的某个值,最多可代表128种事务类型。
安全团队:获利约900万美元,Moola协议遭受黑客攻击事件简析:10月19日消息,据Beosin EagleEye Web3安全预警与监控平台监测显示,Celo上的Moola协议遭受攻击,黑客获利约900万美元。Beosin安全团队第一时间对事件进行了分析,结果如下:
第一步:攻击者进行了多笔交易,用CELO买入MOO,攻击者起始资金(182000枚CELO).
第二步:攻击者使用MOO作为抵押品借出CELO。根据抵押借贷的常见逻辑,攻击者抵押了价值a的MOO,可借出价值b的CELO。
第三步:攻击者用贷出的CELO购买MOO,从而继续提高MOO的价格。每次交换之后,Moo对应CELO的价格变高。
第四步:由于抵押借贷合约在借出时会使用交易对中的实时价格进行判断,导致用户之前的借贷数量,并未达到价值b,所以用户可以继续借出CELO。通过不断重复这个过程,攻击者把MOO的价格从0.02 CELO提高到0.73 CELO。
第五步:攻击者进行了累计4次抵押MOO,10次swap(CELO换MOO),28次借贷,达到获利过程。
本次遭受攻击的抵押借贷实现合约并未开源,根据攻击特征可以猜测攻击属于价格操纵攻击。截止发文时,通过Beosin Trace追踪发现攻击者将约93.1%的所得资金 返还给了Moola Market项目方,将50万CELO 捐给了impact market。自己留下了总计65万个CELO作为赏金。[2022/10/19 17:32:31]
·TransactionPayload:由事务类型定义的任意一个字节数组。??
慢雾:Harmony Horizon bridge遭攻击简析:据慢雾安全团队消息,Harmony Horizon bridge 遭到黑客攻击。经慢雾 MistTrack 分析,攻击者(0x0d0...D00)获利超 1 亿美元,包括 11 种 ERC20 代币、13,100 ETH、5,000 BNB 以及 640,000 BUSD,在以太坊链攻击者将大部分代币转移到两个新钱包地址,并将代币兑换为 ETH,接着将 ETH 均转回初始地址(0x0d0...D00),目前地址(0x0d0...D00)约 85,837 ETH 暂无转移,同时,攻击者在 BNB 链暂无资金转移操作。慢雾 MistTrack 将持续监控被盗资金的转移。[2022/6/24 1:28:30]
将上述字段连接起来,即可得到一个类型化事务。EIP2718?没有为事务的有效负载定义格式。因此,事务的有效负载可以是任意一段经过编码的字节序列,只要采用符合新的事务类型定义的编码器即可。之所以选择简单的字节相连方式,是因为读取字节数组的第一个字节非常简单,无需使用任何库或工具。也就是说,你不需要使用RLP或SSZ解析器来判断事务类型。
这个方法可以避免新的EIP在引入新的事务类型时增加现有事务格式的复杂性,并让不同的以太坊工具更容易区分不同的事务。
在增加复杂性这一点上,EIP-155?就是一个很好的例子。它通过在事务中引入链ID来实现重放攻击保护。由于在事务参数中增加新的字段会破坏向后兼容性,链ID被编码进了事务签名的恢复参数,就像我在上一篇关于数字签名的文章中解释的那样。实行EIP2718后,我们可以在不影响向后兼容性的情况下定义新的事务类型。??
向后兼容性和传统事务
EIP2718的一大特点就是向后兼容。EIP2718是完全向后兼容的。也就是说,现有的工具、库、钱包和事务都是开箱即用的,但是它们无法使用EIP2718提供的新「功能」。以太坊网络上的新事务依然可以使用旧的事务格式。
新的事务类型最多可达0x7f种。选择这一上限是为了保证向后兼容传统事务。经过RLP编码的事务的第一个字节始终大于或等于0xc0,因此类型化事务永远不会与传统事务产生冲突,而且类型化事务和传统事务之间可以通过第一个字节来区分。??
EIP2718本身并未定义任何事务类型,不过已经出现了一些采用这一新标准的EIP:
·EIP1559:改革ETH1.0链的交易费市场。你肯定听说过这个EIP。
·EIP2711:代付事务、限期事务和批量事务。这个EIP同样由MicahZoltu提出,EIP-2718中定义的标准就是为此创建的。
·EIP2930:可选访问列表。??
我们将在下文详细解释其中一些标准。??
为什么要引入新的事务类型?
新的事务类型可以实现原本需要借助于Solidity合约或第三方解决方案的功能集成。以限期事务为例。在现有解决方案中,你可以将资金发送至Solidity合约,签署一个事务并将其发送到专门的节点,让该事务获得额外的参数。然后,该节点会处理该事务,确保它在有效期之前执行,否则该事务不会被广播。一些dApp和合约内置该功能,但是对于大多数事务而言很难实现。
EIP2711可以将该功能添加到以太坊网络上,同时保证向后兼容传统事务,而且无需使用智能合约或专门的节点。但是,EIP2711目前还是草案,我们还无法确定它近期是否会在以太坊网络上实行。EIP2711也有可能被拆分成几个小的EIP。??
?-图源:f2pool-??
EIP1559提出的新的事务格式
在EIP1559中,gas的运作方式发生了巨大变化:gas会被部分销毁,不再全部支付给矿工。本文不会具体阐述EIP1559的所有变化,但是EIP1559确实提出了一种新的事务格式:??
0x02||RLP()??
最显著的变化包括:
·用「每单位gas的最高优先费用」和「每单位gas的最高费用」来代替gasprice。
·链ID是单独编码的,不再包含在签名v值内。这实际上是使用更简单的实现来代替EIP155。
·签名v值变成了一个简单的校验位,不是0就是1,具体取决于使用椭圆曲线上的哪个点。??
EIP1559还提供了一种基于EIP2930指定访问列表的方法。这样可以减少事务的gas成本。
由于EIP1559极大地改变了gas费的运作方式,它并不能直接兼容传统事务。为了保证向后兼容性,EIP1559提出了一种将传统事务升级成兼容EIP1559事务的方法,即,使用「每单位gas的最高优先费用」和「每单位gas的最高费用」来代替?「gas价格」。??
原生元事务和批量事务
元事务诞生已经有几年了,但是到目前为止都需要依靠智能合约。和限期事务一样,元事务也要求用户将以太币发送至专为元事务创建的智能合约。
EIP2711使得原生元事务和批量事务成为可能,无需依赖于智能合约。这里定义了一个新的事务格式,事务类型是?0x02。交易如下所示:??
0x02?||?RLP()??
EIP2711主要包括gas付款方的有效负载和签名。这样一来,即使不持有任何以太币的地址也能发送ERC20代币。
发送方的有效负载和签名等均基于事务子类型定义。例如,如果交易类型为?1,发送方的有效负载被定义为:??
,?nonce,?ChainId,?ValidUntil,?gasLimit,?gasPrice]??
ChildTransaction?被定义为?,可以在单个事务内指定收款方地址、值和数据。例如,ChildTransaction?可以用来在单笔事务中调用ERC20的?approve?和?transferFrom。
如果你想了解更多关于EIP2711的事务子类型的信息,我建议你阅读?EIP2711的规范。??
结论
类型化事务为以太坊网络带来了更多可能性。我们在创建类型化事务时不会增加以太坊客户端、库和其它工具的复杂性。
目前,由于EIP2718最近才被添加到网络中,新的事务类型还没有得到广泛应用,但是目前还有一些很棒的EIP正在开发中,例如,EIP2711提出了限期事务、批量事务和代付事务。由于以太坊上可以定义新的事务类型,提出新的EIP也会变得更容易。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。