Solidity
刪除幾行後契約規模如何增長?
這肯定不是一般情況,而是具體情況。
我有一個大的智能合約(22.572 KB),我正試圖讓它更小。這是契約的一部分:
modifier onlyValidTokenId(bytes32 composedTokenId) { _onlyValidTokenId(composedTokenId); _; } function _onlyValidTokenId(bytes32 composedTokenId) internal view { bytes16[2] memory decomposedTokenId = _decomposeTokenId(composedTokenId); uint256 composedTokenIdAsNumber = uint256(composedTokenId); if (composedTokenIdAsNumber == 0 || composedTokenIdAsNumber > collectionTokenSupplyCap(decomposedTokenId[0])) { revert CardTokenInvalidTokenId(composedTokenId); } }
現在無論程式碼說什麼或做什麼,忽略契約的其餘部分,我都這樣做了:
modifier onlyValidTokenId(bytes32 composedTokenId) { bytes16[2] memory decomposedTokenId = _decomposeTokenId(composedTokenId); uint256 composedTokenIdAsNumber = uint256(composedTokenId); if (composedTokenIdAsNumber == 0 || composedTokenIdAsNumber > collectionTokenSupplyCap(decomposedTokenId[0])) { revert CardTokenInvalidTokenId(composedTokenId); } _; }
認為契約規模會縮小,因為我刪除了幾行。但編譯後,我的合約大小增加到 22.702 KB。這怎麼可能?
修飾符被內聯到它們各自的函式中(即它們的程式碼被複製)。
在您之前的範例中,程式碼大小更短,因為修飾符僅包含對內部函式的引用,而現在它包含完整的字節碼。
同時,第二個程式碼範例將使用更少的氣體(沒有跳轉到內部函式)。