![](/img/trans.png)
[英]multiple transactions on ethereum block chain by simply approving once on meta mask
[英]What does nonReentrant modifier do for multiple transactions in one block
如果nonReentrant
修飾符用於傳輸 function 或 mint function,並且在交易量大的時期,如果多個交易在一個塊中提交,那么nonReentrant
對同一塊中的后續交易做了什么? 它會還原它們嗎? nonReentrant
對同時事務的表現如何?
事務總是按順序執行,即使在同一個塊中。
nonReentrant
修飾符 ( code ) 中的單下划線 ( _;
) 將在 function 之前和 function 之后執行的代碼塊分開。
每個事務執行使用此修飾符的 function 驗證_status
為_NOT_ENTERED
(否則引發異常),將其設置為_ENTERED
,然后執行 function,然后將_status
設置回_NOT_ENTERED
。
如果交易拋出未捕獲的異常,則合約將恢復到此交易之前的 state。 在這種情況下, _status
恢復為_NOT_ENTERED
。
在這兩種情況下,當另一個事務進入時, _status
的值總是_NOT_ENTERED
。
我認為您對reentrancy有誤解。
當智能合約 function 調用另一個合約然后調用原始合約(“重新進入”)時,就會發生重入,所有這些都在一個事務中。
OpenZeppelin nonReentrant
修飾符的目的是保護智能合約 function 免受重入,根據定義,重入總是發生在同一交易中。 這並不意味着阻止 function 在其他交易中再次使用(無論它們是否在同一個塊中)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.