Contract-Development
當一個合約呼叫其他合約時,是不是原子操作?
如果一個合約呼叫了其他合約的多個外部方法,它是一個整體的原子交易(如果發生異常則整體還原)?
大部分是的。
當向合約發起交易時,由該交易引起的所有動作都包含在同一個交易中。這包括一切:呼叫原始合約、在該合約內部呼叫不同的函式以及對外部庫和合約的所有呼叫(以及從這些合約開始的可能呼叫)。
所有行動都需要消耗一些燃料。因此,動作越多,消耗的氣體就越多。作為交易發起者,您必須準備好通過指定足夠高的gas limit來支付所有這些操作。
然而,契約中可能存在不會導致整個交易失敗的例外情況——取決於如何啟動對其他契約的呼叫。這裡有更多資訊:revert()/require() 是否恢復對其他合約所做的更改?. 另一個例子是使用新的try/catch關鍵字:https ://blog.ethereum.org/2020/01/29/solidity-0.6-try-catch/