diff --git a/packages/contracts/cli/config/assets/mainnetstaging.json b/packages/contracts/cli/config/assets/mainnetstaging.json index 3fecc0c6..14f3991f 100644 --- a/packages/contracts/cli/config/assets/mainnetstaging.json +++ b/packages/contracts/cli/config/assets/mainnetstaging.json @@ -14,5 +14,9 @@ { "symbol": "xPufETH", "contractName": "PufETH" + }, + { + "symbol": "PT-sUSDE", + "contractName": "PTSUSDE" } ] \ No newline at end of file diff --git a/packages/contracts/script/MainnetStaging.sol b/packages/contracts/script/MainnetStaging.sol index 2fdb91c4..944c7bbf 100644 --- a/packages/contracts/script/MainnetStaging.sol +++ b/packages/contracts/script/MainnetStaging.sol @@ -66,6 +66,10 @@ abstract contract MainnetAssets { ///////////////////// xTEST (xERC20) -- Whitelisted ✅ address public constant ARBITRUM_XTEST = 0xCDFAb2b2fA913385056E713D104c1b268e4898A5; address public constant ZIRCUIT_XTEST = 0xad560465f00fCcf3F10Ad3474cb8440A143b16Df; + + ///////////////////// PT-sUSDE -- Whitelisted ✅ + address public constant ETHEREUM_PTSUSDE = 0xE8483517077afa11A9B07f849cee2552f040d7b2; + bytes32 public constant SOLANA_PTSUSDE = 0x05c0ad344d082fe99030a0414acc5726b24c89e1a511eac6e58d809145dd6503; } abstract contract Everclear { diff --git a/packages/contracts/script/assets/mainnetstaging/PTSUSDE.s.sol b/packages/contracts/script/assets/mainnetstaging/PTSUSDE.s.sol new file mode 100644 index 00000000..9f9084ae --- /dev/null +++ b/packages/contracts/script/assets/mainnetstaging/PTSUSDE.s.sol @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.25; + +import {TypeCasts} from 'contracts/common/TypeCasts.sol'; + +import {IEverclear} from 'interfaces/common/IEverclear.sol'; +import {IHubStorage} from 'interfaces/hub/IHubStorage.sol'; + +import {AddAssetBase} from '../AddAsset.s.sol'; + +import {MainnetStagingEnvironment} from '../../MainnetStaging.sol'; + +contract PTSUSDE is AddAssetBase, MainnetStagingEnvironment { + using TypeCasts for address; + + function _fetchTokenSetup() + internal + override(AddAssetBase) + returns (string memory _symbol, IHubStorage.TokenSetup memory _setup) + { + /*/////////////////////////////////////////////////////////////// + TICKER HASH + //////////////////////////////////////////////////////////////*/ + + _symbol = 'PT-sUSDE'; + bytes32 _tickerHash = keccak256(bytes(_symbol)); + + /*/////////////////////////////////////////////////////////////// + TOKEN FEES + //////////////////////////////////////////////////////////////*/ + + IHubStorage.Fee[] memory _fees = new IHubStorage.Fee[](0); + // _fees[0] = IHubStorage.Fee({recipient: OWNER, fee: 100}); // 10 BPS + + /*/////////////////////////////////////////////////////////////// + ADOPTED CONFIGURATION + //////////////////////////////////////////////////////////////*/ + + IHubStorage.AssetConfig[] memory _assetConfigs = new IHubStorage.AssetConfig[](2); + + ///// Ethereum + _assetConfigs[0] = IHubStorage.AssetConfig({ + tickerHash: _tickerHash, + adopted: ETHEREUM_PTSUSDE.toBytes32(), + domain: ETHEREUM, + approval: true, + strategy: IEverclear.Strategy.DEFAULT + }); + + ///// Solana + _assetConfigs[1] = IHubStorage.AssetConfig({ + tickerHash: _tickerHash, + adopted: SOLANA_PTSUSDE, + domain: SOLANA, + approval: true, + strategy: IEverclear.Strategy.DEFAULT + }); + + /*/////////////////////////////////////////////////////////////// + TOKEN SETUP + //////////////////////////////////////////////////////////////*/ + + _setup = IHubStorage.TokenSetup({ + tickerHash: _tickerHash, + initLastClosedEpochProcessed: true, + prioritizedStrategy: IEverclear.Strategy.XERC20, + maxDiscountDbps: 0, + discountPerEpoch: 0, + fees: _fees, + adoptedForAssets: _assetConfigs + }); + } +}