From 4d2cee04f426311914fca1381331234aeb34c162 Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Thu, 29 Dec 2022 13:10:19 +0800 Subject: [PATCH 1/2] protocol: i++ to ++j to reduce 5 gas --- packages/protocol/contracts/L1/libs/LibProving.sol | 4 ++-- packages/protocol/contracts/L1/libs/LibVerifying.sol | 4 ++-- packages/protocol/contracts/L2/TaikoL2.sol | 4 ++-- .../protocol/contracts/libs/LibReceiptDecoder.sol | 4 ++-- packages/protocol/contracts/libs/LibTxDecoder.sol | 8 ++++---- packages/protocol/contracts/libs/LibTxUtils.sol | 2 +- .../contracts/test/thirdparty/TestLibRLPReader.sol | 2 +- .../protocol/contracts/thirdparty/LibBytesUtils.sol | 4 ++-- .../protocol/contracts/thirdparty/LibMerkleTrie.sol | 4 ++-- .../protocol/contracts/thirdparty/LibRLPReader.sol | 2 +- .../protocol/contracts/thirdparty/LibRLPWriter.sol | 12 ++++++------ 11 files changed, 25 insertions(+), 25 deletions(-) diff --git a/packages/protocol/contracts/L1/libs/LibProving.sol b/packages/protocol/contracts/L1/libs/LibProving.sol index e1ccc47704..d9733c27da 100644 --- a/packages/protocol/contracts/L1/libs/LibProving.sol +++ b/packages/protocol/contracts/L1/libs/LibProving.sol @@ -246,7 +246,7 @@ library LibProving { bytes32 blockHash = evidence.header.hashBlockHeader(); - for (uint256 i = 0; i < config.zkProofsPerBlock; i++) { + for (uint256 i = 0; i < config.zkProofsPerBlock; ++i) { if (!config.skipProofValidation) { LibZKP.verify({ verificationKey: ConfigManager( @@ -309,7 +309,7 @@ library LibProving { "L1:tooLate" ); - for (uint256 i = 0; i < fc.provers.length; i++) { + for (uint256 i = 0; i < fc.provers.length; ++i) { require(fc.provers[i] != prover, "L1:prover:dup"); } } diff --git a/packages/protocol/contracts/L1/libs/LibVerifying.sol b/packages/protocol/contracts/L1/libs/LibVerifying.sol index b4dfaaaf45..406cdf4c02 100644 --- a/packages/protocol/contracts/L1/libs/LibVerifying.sol +++ b/packages/protocol/contracts/L1/libs/LibVerifying.sol @@ -157,7 +157,7 @@ library LibVerifying { TkoToken tkoToken ) private { uint sum = 2 ** fc.provers.length - 1; - for (uint i = 0; i < fc.provers.length; i++) { + for (uint i = 0; i < fc.provers.length; ++i) { uint weight = (1 << (fc.provers.length - i - 1)); uint proverReward = (reward * weight) / sum; @@ -223,7 +223,7 @@ library LibVerifying { function _cleanUp(TaikoData.ForkChoice storage fc) private { fc.blockHash = 0; fc.provenAt = 0; - for (uint i = 0; i < fc.provers.length; i++) { + for (uint i = 0; i < fc.provers.length; ++i) { fc.provers[i] = address(0); } delete fc.provers; diff --git a/packages/protocol/contracts/L2/TaikoL2.sol b/packages/protocol/contracts/L2/TaikoL2.sol index d9a3b3698f..620697c88b 100644 --- a/packages/protocol/contracts/L2/TaikoL2.sol +++ b/packages/protocol/contracts/L2/TaikoL2.sol @@ -49,7 +49,7 @@ contract TaikoL2 is AddressResolver, ReentrancyGuard, IHeaderSync { bytes32[255] memory ancestors; uint256 number = block.number; - for (uint256 i = 0; i < 255 && number >= i + 2; i++) { + for (uint256 i = 0; i < 255 && number >= i + 2; ++i) { ancestors[i] = blockhash(number - i - 2); } @@ -159,7 +159,7 @@ contract TaikoL2 is AddressResolver, ReentrancyGuard, IHeaderSync { uint256 number = block.number; uint256 chainId = block.chainid; - for (uint256 i = 2; i <= 256 && number >= i; i++) { + for (uint256 i = 2; i <= 256 && number >= i; ++i) { ancestors[(number - i) % 255] = blockhash(number - i); } diff --git a/packages/protocol/contracts/libs/LibReceiptDecoder.sol b/packages/protocol/contracts/libs/LibReceiptDecoder.sol index d02ebab469..50ab4e4cc2 100644 --- a/packages/protocol/contracts/libs/LibReceiptDecoder.sol +++ b/packages/protocol/contracts/libs/LibReceiptDecoder.sol @@ -62,7 +62,7 @@ library LibReceiptDecoder { ) internal pure returns (Log[] memory) { Log[] memory logs = new Log[](logsRlp.length); - for (uint256 i = 0; i < logsRlp.length; i++) { + for (uint256 i = 0; i < logsRlp.length; ++i) { LibRLPReader.RLPItem[] memory rlpItems = LibRLPReader.readList( logsRlp[i] ); @@ -79,7 +79,7 @@ library LibReceiptDecoder { ) internal pure returns (bytes32[] memory) { bytes32[] memory topics = new bytes32[](topicsRlp.length); - for (uint256 i = 0; i < topicsRlp.length; i++) { + for (uint256 i = 0; i < topicsRlp.length; ++i) { topics[i] = LibRLPReader.readBytes32(topicsRlp[i]); } diff --git a/packages/protocol/contracts/libs/LibTxDecoder.sol b/packages/protocol/contracts/libs/LibTxDecoder.sol index c7b35a2ba1..fd4d24c434 100644 --- a/packages/protocol/contracts/libs/LibTxDecoder.sol +++ b/packages/protocol/contracts/libs/LibTxDecoder.sol @@ -84,7 +84,7 @@ library LibTxDecoder { LibRLPReader.RLPItem[] memory txs = LibRLPReader.readList(encoded); Tx[] memory _txList = new Tx[](txs.length); - for (uint256 i = 0; i < txs.length; i++) { + for (uint256 i = 0; i < txs.length; ++i) { _txList[i] = decodeTx(chainId, LibRLPReader.readBytes(txs[i])); } @@ -213,7 +213,7 @@ library LibTxDecoder { LibRLPReader.RLPItem[] memory accessListRLP ) internal pure returns (AccessItem[] memory accessList) { accessList = new AccessItem[](accessListRLP.length); - for (uint256 i = 0; i < accessListRLP.length; i++) { + for (uint256 i = 0; i < accessListRLP.length; ++i) { LibRLPReader.RLPItem[] memory items = LibRLPReader.readList( accessListRLP[i] ); @@ -222,7 +222,7 @@ library LibTxDecoder { items[1] ); bytes32[] memory slots = new bytes32[](slotListRLP.length); - for (uint256 j = 0; j < slotListRLP.length; j++) { + for (uint256 j = 0; j < slotListRLP.length; ++j) { slots[j] = LibRLPReader.readBytes32(slotListRLP[j]); } accessList[i] = AccessItem(addr, slots); @@ -233,7 +233,7 @@ library LibTxDecoder { TxList memory txList ) internal pure returns (uint256 sum) { Tx[] memory items = txList.items; - for (uint256 i = 0; i < items.length; i++) { + for (uint256 i = 0; i < items.length; ++i) { sum += items[i].gasLimit; } } diff --git a/packages/protocol/contracts/libs/LibTxUtils.sol b/packages/protocol/contracts/libs/LibTxUtils.sol index df4b31a065..22273a4019 100644 --- a/packages/protocol/contracts/libs/LibTxUtils.sol +++ b/packages/protocol/contracts/libs/LibTxUtils.sol @@ -57,7 +57,7 @@ library LibTxUtils { transaction.txType == 0 ? txRLPItems.length : txRLPItems.length - 3 ); - for (uint256 i = 0; i < list.length; i++) { + for (uint256 i = 0; i < list.length; ++i) { // For Non-legacy transactions, accessList is always the // fourth to last item. if (transaction.txType != 0 && i == list.length - 1) { diff --git a/packages/protocol/contracts/test/thirdparty/TestLibRLPReader.sol b/packages/protocol/contracts/test/thirdparty/TestLibRLPReader.sol index cfd14bf9d7..e2e6eca860 100644 --- a/packages/protocol/contracts/test/thirdparty/TestLibRLPReader.sol +++ b/packages/protocol/contracts/test/thirdparty/TestLibRLPReader.sol @@ -10,7 +10,7 @@ contract TestLibRLPReader { function readList(bytes memory _in) public pure returns (bytes[] memory) { LibRLPReader.RLPItem[] memory decoded = LibRLPReader.readList(_in); bytes[] memory out = new bytes[](decoded.length); - for (uint256 i = 0; i < out.length; i++) { + for (uint256 i = 0; i < out.length; ++i) { out[i] = LibRLPReader.readRawBytes(decoded[i]); } return out; diff --git a/packages/protocol/contracts/thirdparty/LibBytesUtils.sol b/packages/protocol/contracts/thirdparty/LibBytesUtils.sol index fe11d3cca9..92afabd82d 100644 --- a/packages/protocol/contracts/thirdparty/LibBytesUtils.sol +++ b/packages/protocol/contracts/thirdparty/LibBytesUtils.sol @@ -141,7 +141,7 @@ library LibBytesUtils { ) internal pure returns (bytes memory) { bytes memory nibbles = new bytes(_bytes.length * 2); - for (uint256 i = 0; i < _bytes.length; i++) { + for (uint256 i = 0; i < _bytes.length; ++i) { nibbles[i * 2] = _bytes[i] >> 4; nibbles[i * 2 + 1] = bytes1(uint8(_bytes[i]) % 16); } @@ -154,7 +154,7 @@ library LibBytesUtils { ) internal pure returns (bytes memory) { bytes memory ret = new bytes(_bytes.length / 2); - for (uint256 i = 0; i < ret.length; i++) { + for (uint256 i = 0; i < ret.length; ++i) { ret[i] = (_bytes[i * 2] << 4) | (_bytes[i * 2 + 1]); } diff --git a/packages/protocol/contracts/thirdparty/LibMerkleTrie.sol b/packages/protocol/contracts/thirdparty/LibMerkleTrie.sol index cd667a2466..8d4b62aeba 100644 --- a/packages/protocol/contracts/thirdparty/LibMerkleTrie.sol +++ b/packages/protocol/contracts/thirdparty/LibMerkleTrie.sol @@ -166,7 +166,7 @@ library LibMerkleTrie { TrieNode memory currentNode; // Proof is top-down, so we start at the first element (root). - for (uint256 i = 0; i < _proof.length; i++) { + for (uint256 i = 0; i < _proof.length; ++i) { currentNode = _proof[i]; currentKeyIndex += currentKeyIncrement; @@ -285,7 +285,7 @@ library LibMerkleTrie { LibRLPReader.RLPItem[] memory nodes = LibRLPReader.readList(_proof); TrieNode[] memory proof = new TrieNode[](nodes.length); - for (uint256 i = 0; i < nodes.length; i++) { + for (uint256 i = 0; i < nodes.length; ++i) { bytes memory encoded = LibRLPReader.readBytes(nodes[i]); proof[i] = TrieNode({ encoded: encoded, diff --git a/packages/protocol/contracts/thirdparty/LibRLPReader.sol b/packages/protocol/contracts/thirdparty/LibRLPReader.sol index 3309b893e1..7da6e7fee2 100644 --- a/packages/protocol/contracts/thirdparty/LibRLPReader.sol +++ b/packages/protocol/contracts/thirdparty/LibRLPReader.sol @@ -423,7 +423,7 @@ library LibRLPReader { } // Copy over as many complete words as we can. - for (uint256 i = 0; i < _length / 32; i++) { + for (uint256 i = 0; i < _length / 32; ++i) { assembly { mstore(dest, mload(src)) } diff --git a/packages/protocol/contracts/thirdparty/LibRLPWriter.sol b/packages/protocol/contracts/thirdparty/LibRLPWriter.sol index f1622b38d1..09dfd2f74e 100644 --- a/packages/protocol/contracts/thirdparty/LibRLPWriter.sol +++ b/packages/protocol/contracts/thirdparty/LibRLPWriter.sol @@ -152,7 +152,7 @@ library LibRLPWriter { encoded = new bytes(lenLen + 1); encoded[0] = bytes1(uint8(lenLen) + uint8(_offset) + 55); - for (i = 1; i <= lenLen; i++) { + for (i = 1; i <= lenLen; ++i) { encoded[i] = bytes1( uint8((_len / (256 ** (lenLen - i))) % 256) ); @@ -172,14 +172,14 @@ library LibRLPWriter { bytes memory b = abi.encodePacked(_x); uint256 i = 0; - for (; i < 32; i++) { + for (; i < 32; ++i) { if (b[i] != 0) { break; } } bytes memory res = new bytes(32 - i); - for (uint256 j = 0; j < res.length; j++) { + for (uint256 j = 0; j < res.length; ++j) { res[j] = b[i++]; } @@ -200,7 +200,7 @@ library LibRLPWriter { uint256 i = 0; bytes memory res = new bytes(32); - for (uint256 j = 0; j < res.length; j++) { + for (uint256 j = 0; j < res.length; ++j) { res[j] = b[i++]; } @@ -253,7 +253,7 @@ library LibRLPWriter { uint256 len; uint256 i = 0; - for (; i < _list.length; i++) { + for (; i < _list.length; ++i) { len += _list[i].length; } @@ -263,7 +263,7 @@ library LibRLPWriter { flattenedPtr := add(flattened, 0x20) } - for (i = 0; i < _list.length; i++) { + for (i = 0; i < _list.length; ++i) { bytes memory item = _list[i]; uint256 listPtr; From 52d35d765c8f9f2bcf1f9b8b9b1b982c17fd2b0e Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Fri, 30 Dec 2022 09:43:38 +0800 Subject: [PATCH 2/2] more --- packages/protocol/contracts/thirdparty/LibMerkleTrie.sol | 2 +- packages/protocol/contracts/thirdparty/LibRLPWriter.sol | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/protocol/contracts/thirdparty/LibMerkleTrie.sol b/packages/protocol/contracts/thirdparty/LibMerkleTrie.sol index 8d4b62aeba..41472ee5bc 100644 --- a/packages/protocol/contracts/thirdparty/LibMerkleTrie.sol +++ b/packages/protocol/contracts/thirdparty/LibMerkleTrie.sol @@ -355,7 +355,7 @@ library LibMerkleTrie { ) private pure returns (uint256 _shared) { uint256 i = 0; while (_a.length > i && _b.length > i && _a[i] == _b[i]) { - i++; + ++i; } return i; } diff --git a/packages/protocol/contracts/thirdparty/LibRLPWriter.sol b/packages/protocol/contracts/thirdparty/LibRLPWriter.sol index 09dfd2f74e..69821770e9 100644 --- a/packages/protocol/contracts/thirdparty/LibRLPWriter.sol +++ b/packages/protocol/contracts/thirdparty/LibRLPWriter.sol @@ -146,7 +146,7 @@ library LibRLPWriter { uint256 lenLen; uint256 i = 1; while (_len / i != 0) { - lenLen++; + ++lenLen; i *= 256; }