From fd1f755328e4a2152cc4917e5a3f432f831d7c72 Mon Sep 17 00:00:00 2001 From: adnanhq Date: Tue, 24 Feb 2026 16:03:13 +0600 Subject: [PATCH] Update platform adapter references to dynamically fetch current adapter address --- src/CampaignInfo.sol | 7 +++++++ src/TreasuryFactory.sol | 5 +---- src/interfaces/ICampaignInfo.sol | 7 +++++++ src/treasuries/AllOrNothing.sol | 4 ++-- src/treasuries/KeepWhatsRaised.sol | 4 ++-- src/treasuries/PaymentTreasury.sol | 4 ++-- src/treasuries/TimeConstrainedPaymentTreasury.sol | 4 ++-- src/utils/BasePaymentTreasury.sol | 7 ++++--- src/utils/BaseTreasury.sol | 7 ++++--- src/utils/CampaignAccessChecker.sol | 3 --- 10 files changed, 31 insertions(+), 21 deletions(-) diff --git a/src/CampaignInfo.sol b/src/CampaignInfo.sol index cd650eb..63da6d9 100644 --- a/src/CampaignInfo.sol +++ b/src/CampaignInfo.sol @@ -336,6 +336,13 @@ contract CampaignInfo is return _getGlobalParams().getPlatformAdminAddress(platformHash); } + /** + * @inheritdoc ICampaignInfo + */ + function getPlatformAdapter(bytes32 platformHash) external view override returns (address) { + return _getGlobalParams().getPlatformAdapter(platformHash); + } + /** * @inheritdoc ICampaignInfo */ diff --git a/src/TreasuryFactory.sol b/src/TreasuryFactory.sol index f2afad1..784f195 100644 --- a/src/TreasuryFactory.sol +++ b/src/TreasuryFactory.sol @@ -118,11 +118,8 @@ contract TreasuryFactory is Initializable, ITreasuryFactory, AdminAccessChecker, clone = Clones.clone(implementation); - // Fetch the platform adapter (trusted forwarder) from GlobalParams - address platformAdapter = _getGlobalParams().getPlatformAdapter(platformHash); - (bool success,) = clone.call( - abi.encodeWithSignature("initialize(bytes32,address,address)", platformHash, infoAddress, platformAdapter) + abi.encodeWithSignature("initialize(bytes32,address)", platformHash, infoAddress) ); if (!success) { revert TreasuryFactoryTreasuryInitializationFailed(); diff --git a/src/interfaces/ICampaignInfo.sol b/src/interfaces/ICampaignInfo.sol index 9fc9854..e65326a 100644 --- a/src/interfaces/ICampaignInfo.sol +++ b/src/interfaces/ICampaignInfo.sol @@ -86,6 +86,13 @@ interface ICampaignInfo is IERC721 { */ function getPlatformAdminAddress(bytes32 platformHash) external view returns (address); + /** + * @notice Retrieves the adapter (trusted forwarder) address for a platform from GlobalParams. + * @param platformHash The bytes32 identifier of the platform. + * @return The adapter address for ERC-2771 meta-transactions, or address(0) if none is set. + */ + function getPlatformAdapter(bytes32 platformHash) external view returns (address); + /** * @notice Retrieves the campaign's launch time. * @return The timestamp when the campaign was launched. diff --git a/src/treasuries/AllOrNothing.sol b/src/treasuries/AllOrNothing.sol index fb9391d..5f869da 100644 --- a/src/treasuries/AllOrNothing.sol +++ b/src/treasuries/AllOrNothing.sol @@ -121,8 +121,8 @@ contract AllOrNothing is IReward, BaseTreasury, TimestampChecker, ReentrancyGuar */ constructor() {} - function initialize(bytes32 _platformHash, address _infoAddress, address _trustedForwarder) external initializer { - __BaseContract_init(_platformHash, _infoAddress, _trustedForwarder); + function initialize(bytes32 _platformHash, address _infoAddress) external initializer { + __BaseContract_init(_platformHash, _infoAddress); } /** diff --git a/src/treasuries/KeepWhatsRaised.sol b/src/treasuries/KeepWhatsRaised.sol index 673e039..8fc1520 100644 --- a/src/treasuries/KeepWhatsRaised.sol +++ b/src/treasuries/KeepWhatsRaised.sol @@ -314,8 +314,8 @@ contract KeepWhatsRaised is IReward, BaseTreasury, TimestampChecker, ICampaignDa */ constructor() {} - function initialize(bytes32 _platformHash, address _infoAddress, address _trustedForwarder) external initializer { - __BaseContract_init(_platformHash, _infoAddress, _trustedForwarder); + function initialize(bytes32 _platformHash, address _infoAddress) external initializer { + __BaseContract_init(_platformHash, _infoAddress); } /** diff --git a/src/treasuries/PaymentTreasury.sol b/src/treasuries/PaymentTreasury.sol index 4063fce..6de23e7 100644 --- a/src/treasuries/PaymentTreasury.sol +++ b/src/treasuries/PaymentTreasury.sol @@ -19,8 +19,8 @@ contract PaymentTreasury is BasePaymentTreasury { */ constructor() {} - function initialize(bytes32 _platformHash, address _infoAddress, address _trustedForwarder) external initializer { - __BaseContract_init(_platformHash, _infoAddress, _trustedForwarder); + function initialize(bytes32 _platformHash, address _infoAddress) external initializer { + __BaseContract_init(_platformHash, _infoAddress); } /** diff --git a/src/treasuries/TimeConstrainedPaymentTreasury.sol b/src/treasuries/TimeConstrainedPaymentTreasury.sol index cf2f182..b473bfe 100644 --- a/src/treasuries/TimeConstrainedPaymentTreasury.sol +++ b/src/treasuries/TimeConstrainedPaymentTreasury.sol @@ -20,8 +20,8 @@ contract TimeConstrainedPaymentTreasury is BasePaymentTreasury, TimestampChecker */ constructor() {} - function initialize(bytes32 _platformHash, address _infoAddress, address _trustedForwarder) external initializer { - __BaseContract_init(_platformHash, _infoAddress, _trustedForwarder); + function initialize(bytes32 _platformHash, address _infoAddress) external initializer { + __BaseContract_init(_platformHash, _infoAddress); } /** diff --git a/src/utils/BasePaymentTreasury.sol b/src/utils/BasePaymentTreasury.sol index f7e45f4..acaa0d9 100644 --- a/src/utils/BasePaymentTreasury.sol +++ b/src/utils/BasePaymentTreasury.sol @@ -348,19 +348,20 @@ abstract contract BasePaymentTreasury is hasLimit = true; } - function __BaseContract_init(bytes32 platformHash, address infoAddress, address trustedForwarder_) internal { + function __BaseContract_init(bytes32 platformHash, address infoAddress) internal { __CampaignAccessChecker_init(infoAddress); PLATFORM_HASH = platformHash; PLATFORM_FEE_PERCENT = INFO.getPlatformFeePercent(platformHash); - _trustedForwarder = trustedForwarder_; } /** * @dev Override _msgSender to support ERC-2771 meta-transactions. * When called by the trusted forwarder (adapter), extracts the actual sender from calldata. + * The adapter address is read dynamically from GlobalParams via CampaignInfo so that + * adapter rotations take effect immediately for all deployed treasuries. */ function _msgSender() internal view virtual override returns (address sender) { - if (msg.sender == _trustedForwarder && msg.data.length >= 20) { + if (msg.sender == INFO.getPlatformAdapter(PLATFORM_HASH) && msg.data.length >= 20) { assembly { sender := shr(96, calldataload(sub(calldatasize(), 20))) } diff --git a/src/utils/BaseTreasury.sol b/src/utils/BaseTreasury.sol index dc22468..6633d54 100644 --- a/src/utils/BaseTreasury.sol +++ b/src/utils/BaseTreasury.sol @@ -73,19 +73,20 @@ abstract contract BaseTreasury is Initializable, ICampaignTreasury, CampaignAcce */ error TreasuryCampaignInfoIsPaused(); - function __BaseContract_init(bytes32 platformHash, address infoAddress, address trustedForwarder_) internal { + function __BaseContract_init(bytes32 platformHash, address infoAddress) internal { __CampaignAccessChecker_init(infoAddress); PLATFORM_HASH = platformHash; PLATFORM_FEE_PERCENT = INFO.getPlatformFeePercent(platformHash); - _trustedForwarder = trustedForwarder_; } /** * @dev Override _msgSender to support ERC-2771 meta-transactions. * When called by the trusted forwarder (adapter), extracts the actual sender from calldata. + * The adapter address is read dynamically from GlobalParams via CampaignInfo so that + * adapter rotations take effect immediately for all deployed treasuries. */ function _msgSender() internal view virtual override returns (address sender) { - if (msg.sender == _trustedForwarder && msg.data.length >= 20) { + if (msg.sender == INFO.getPlatformAdapter(PLATFORM_HASH) && msg.data.length >= 20) { assembly { sender := shr(96, calldataload(sub(calldatasize(), 20))) } diff --git a/src/utils/CampaignAccessChecker.sol b/src/utils/CampaignAccessChecker.sol index dd0869e..437fd4b 100644 --- a/src/utils/CampaignAccessChecker.sol +++ b/src/utils/CampaignAccessChecker.sol @@ -13,9 +13,6 @@ abstract contract CampaignAccessChecker is Context { // Immutable reference to the ICampaignInfo contract, which provides campaign-related information and admin addresses. ICampaignInfo internal INFO; - /// @dev Trusted forwarder address for ERC-2771 meta-transactions (set by derived contracts) - address internal _trustedForwarder; - /** * @dev Throws when the caller is not authorized. */