簡體   English   中英

nonReentrant 修飾符對一個塊中的多個事務有什么作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM