From 427dd9edf5669e9cd65dd1e2d3b124c01745c30d Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Tue, 21 May 2024 16:08:17 +0800 Subject: [PATCH 1/6] Update Bridge.sol --- packages/protocol/contracts/bridge/Bridge.sol | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/protocol/contracts/bridge/Bridge.sol b/packages/protocol/contracts/bridge/Bridge.sol index 21214156e04..1aa57509fd4 100644 --- a/packages/protocol/contracts/bridge/Bridge.sol +++ b/packages/protocol/contracts/bridge/Bridge.sol @@ -448,9 +448,14 @@ contract Bridge is EssentialContract, IBridge { /// @return The minimal gas limit required for sending this message. function getMessageMinGasLimit(uint256 dataLength) public pure returns (uint32) { unchecked { - // Message struct takes 7*32=224 bytes + a variable length array. - // Since ABI.encode pads data to multiples of 32 bytes, we over-charge 32 bytes - return GAS_RESERVE + uint32((dataLength + 256) >> 4); + // The abi encoding of A = (Message calldata msg) is 10 * 32 bytes + // + 32 bytes (A is a dynamic tuple, offset to first elements) + // + 32 bytes (offset to last bytes element of Message) + // + 32 bytes (padded encoding of length of Message.data + dataLength (padded to 32 + // bytes) + // = 13 * 32 + (dataLength / 32 * 32) + 32. + // non-zero calldata cost per byte is 16. + return GAS_RESERVE + uint32(448 + dataLength / 32 * 32) << 4; } } From 93dfeae51a380e5a45121456e2e18f74108ec812 Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Tue, 21 May 2024 16:14:06 +0800 Subject: [PATCH 2/6] Update Bridge.sol --- packages/protocol/contracts/bridge/Bridge.sol | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/protocol/contracts/bridge/Bridge.sol b/packages/protocol/contracts/bridge/Bridge.sol index 1aa57509fd4..481c29edd93 100644 --- a/packages/protocol/contracts/bridge/Bridge.sol +++ b/packages/protocol/contracts/bridge/Bridge.sol @@ -455,7 +455,9 @@ contract Bridge is EssentialContract, IBridge { // bytes) // = 13 * 32 + (dataLength / 32 * 32) + 32. // non-zero calldata cost per byte is 16. - return GAS_RESERVE + uint32(448 + dataLength / 32 * 32) << 4; + + uint256 amount = (448 + dataLength / 32 * 32) << 4 + GAS_RESERVE; + return SafeCastUpgradeable.toUint32(amount); } } From 26157baaba64bd0ea776ea51c20d4052d440eb70 Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Tue, 21 May 2024 16:14:24 +0800 Subject: [PATCH 3/6] Update Bridge.sol --- packages/protocol/contracts/bridge/Bridge.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/protocol/contracts/bridge/Bridge.sol b/packages/protocol/contracts/bridge/Bridge.sol index 481c29edd93..041666f8e47 100644 --- a/packages/protocol/contracts/bridge/Bridge.sol +++ b/packages/protocol/contracts/bridge/Bridge.sol @@ -456,7 +456,7 @@ contract Bridge is EssentialContract, IBridge { // = 13 * 32 + (dataLength / 32 * 32) + 32. // non-zero calldata cost per byte is 16. - uint256 amount = (448 + dataLength / 32 * 32) << 4 + GAS_RESERVE; + uint256 amount = (dataLength / 32 * 32 + 448) << 4 + GAS_RESERVE; return SafeCastUpgradeable.toUint32(amount); } } From 775fb29320af04d61ef0f9f481d193bd6b3cb8c9 Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Tue, 21 May 2024 16:29:06 +0800 Subject: [PATCH 4/6] fix --- packages/protocol/contracts/bridge/Bridge.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/protocol/contracts/bridge/Bridge.sol b/packages/protocol/contracts/bridge/Bridge.sol index 041666f8e47..3ac8242565e 100644 --- a/packages/protocol/contracts/bridge/Bridge.sol +++ b/packages/protocol/contracts/bridge/Bridge.sol @@ -456,8 +456,8 @@ contract Bridge is EssentialContract, IBridge { // = 13 * 32 + (dataLength / 32 * 32) + 32. // non-zero calldata cost per byte is 16. - uint256 amount = (dataLength / 32 * 32 + 448) << 4 + GAS_RESERVE; - return SafeCastUpgradeable.toUint32(amount); + uint256 callDataCost = (dataLength / 32 * 32 + 448) << 4; + return SafeCastUpgradeable.toUint32(callDataCost + GAS_RESERVE); } } From 1a5b040229b58ed5e6a4ad5349e248d6ce797b24 Mon Sep 17 00:00:00 2001 From: Daniel Wang Date: Tue, 21 May 2024 16:36:15 +0800 Subject: [PATCH 5/6] Update Bridge.sol --- packages/protocol/contracts/bridge/Bridge.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/protocol/contracts/bridge/Bridge.sol b/packages/protocol/contracts/bridge/Bridge.sol index 3ac8242565e..bcc5a656d32 100644 --- a/packages/protocol/contracts/bridge/Bridge.sol +++ b/packages/protocol/contracts/bridge/Bridge.sol @@ -456,8 +456,8 @@ contract Bridge is EssentialContract, IBridge { // = 13 * 32 + (dataLength / 32 * 32) + 32. // non-zero calldata cost per byte is 16. - uint256 callDataCost = (dataLength / 32 * 32 + 448) << 4; - return SafeCastUpgradeable.toUint32(callDataCost + GAS_RESERVE); + uint256 dataCost = (dataLength / 32 * 32 + 448) << 4; + return SafeCastUpgradeable.toUint32(dataCost + GAS_RESERVE); } } From 3bd493f4b184d900795ae56a65a2aceb3f19ceb9 Mon Sep 17 00:00:00 2001 From: dantaik Date: Tue, 21 May 2024 14:44:17 +0000 Subject: [PATCH 6/6] forge fmt & update contract layout table --- pnpm-lock.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5abe0b47335..213de86190f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,6 +15,8 @@ importers: specifier: ^3.2.5 version: 3.2.5 + packages/blobstorage: {} + packages/branding: {} packages/bridge-ui: