- Resolve stash: merge load_deployment_env path with secure-secrets and CR/LF RPC strip - create-pmm-full-mesh-chain138.sh delegates to sync-chain138-pmm-pools-from-json.sh - env.additions.example: canonical PMM pool defaults (cUSDT/USDT per crosscheck) - Include Chain138 scripts, official mirror deploy scaffolding, and prior staged changes Made-with: Cursor
136 lines
6.2 KiB
Solidity
136 lines
6.2 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.19;
|
|
|
|
import {Script, stdJson, console} from "forge-std/Script.sol";
|
|
import {DODOPMMIntegration} from "../../contracts/dex/DODOPMMIntegration.sol";
|
|
import {DODOPMMProvider} from "../../contracts/liquidity/providers/DODOPMMProvider.sol";
|
|
|
|
/**
|
|
* @title ImportProviderPoolsToIntegration
|
|
* @notice Import provider-known pools into DODOPMMIntegration using the desired-state JSON.
|
|
* @dev This is the migration path for stale provider-only pools that already exist as DODO pool
|
|
* contracts but are missing from integration.pools / allPools / poolConfigs.
|
|
*
|
|
* Required env:
|
|
* - PRIVATE_KEY
|
|
* - DODO_PMM_INTEGRATION_ADDRESS (or DODO_PMM_INTEGRATION)
|
|
* - DODO_PMM_PROVIDER_ADDRESS (or DODO_PMM_PROVIDER) for target provider compatibility
|
|
*
|
|
* Optional env:
|
|
* - DODO_PMM_PROVIDER_SOURCE_ADDRESS (or DODO_PMM_PROVIDER_SOURCE) to read from an existing provider
|
|
* - POOL_CONFIG_JSON (defaults to smom-dbis-138/config/chain138-pmm-pools.json)
|
|
* - LP_FEE_RATE / INITIAL_PRICE / K_FACTOR / ENABLE_TWAP to override JSON defaults
|
|
*/
|
|
contract ImportProviderPoolsToIntegration is Script {
|
|
using stdJson for string;
|
|
|
|
string internal constant DEFAULT_CONFIG_PATH = "config/chain138-pmm-pools.json";
|
|
|
|
function run() external {
|
|
uint256 pk = vm.envUint("PRIVATE_KEY");
|
|
address integrationAddr = vm.envAddress("DODO_PMM_INTEGRATION_ADDRESS");
|
|
if (integrationAddr == address(0)) integrationAddr = vm.envAddress("DODO_PMM_INTEGRATION");
|
|
address providerAddr = vm.envAddress("DODO_PMM_PROVIDER_ADDRESS");
|
|
if (providerAddr == address(0)) providerAddr = vm.envAddress("DODO_PMM_PROVIDER");
|
|
address providerSourceAddr = vm.envOr("DODO_PMM_PROVIDER_SOURCE_ADDRESS", address(0));
|
|
if (providerSourceAddr == address(0)) providerSourceAddr = vm.envOr("DODO_PMM_PROVIDER_SOURCE", address(0));
|
|
if (providerSourceAddr == address(0)) providerSourceAddr = providerAddr;
|
|
require(integrationAddr != address(0), "DODO_PMM_INTEGRATION_ADDRESS not set");
|
|
require(providerAddr != address(0), "DODO_PMM_PROVIDER_ADDRESS not set");
|
|
|
|
string memory path = vm.envOr("POOL_CONFIG_JSON", string(DEFAULT_CONFIG_PATH));
|
|
string memory json = vm.readFile(path);
|
|
|
|
DODOPMMIntegration integration = DODOPMMIntegration(integrationAddr);
|
|
DODOPMMProvider providerSource = DODOPMMProvider(providerSourceAddr);
|
|
|
|
uint256 lpFeeRate = vm.envOr("LP_FEE_RATE", json.readUint(".defaults.lpFeeRate"));
|
|
uint256 initialPrice = vm.envOr("INITIAL_PRICE", json.readUint(".defaults.initialPrice"));
|
|
uint256 kFactor = vm.envOr("K_FACTOR", json.readUint(".defaults.kFactor"));
|
|
bool enableTwap = vm.envOr("ENABLE_TWAP", json.readBool(".defaults.enableTwap"));
|
|
|
|
string[] memory cStars = json.readStringArray(".groups.cStarSymbols");
|
|
string[] memory officials = json.readStringArray(".groups.officialStableSymbols");
|
|
string memory wethSymbol = json.readString(".groups.wethSymbol");
|
|
bool deployCStarVsCStar = json.readBool(".groups.deploy.cStarVsCStar");
|
|
bool deployCStarVsOfficial = json.readBool(".groups.deploy.cStarVsOfficial");
|
|
bool deployCStarVsWeth = json.readBool(".groups.deploy.cStarVsWeth");
|
|
bool deployOfficialVsWeth = json.readBool(".groups.deploy.officialVsWeth");
|
|
|
|
vm.startBroadcast(pk);
|
|
|
|
if (deployCStarVsCStar) {
|
|
for (uint256 i = 0; i < cStars.length; i++) {
|
|
for (uint256 j = i + 1; j < cStars.length; j++) {
|
|
_importIfNeeded(json, providerSource, integration, cStars[i], cStars[j], lpFeeRate, initialPrice, kFactor, enableTwap);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (deployCStarVsOfficial) {
|
|
for (uint256 i = 0; i < cStars.length; i++) {
|
|
for (uint256 j = 0; j < officials.length; j++) {
|
|
_importIfNeeded(json, providerSource, integration, cStars[i], officials[j], lpFeeRate, initialPrice, kFactor, enableTwap);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (deployCStarVsWeth) {
|
|
for (uint256 i = 0; i < cStars.length; i++) {
|
|
_importIfNeeded(json, providerSource, integration, cStars[i], wethSymbol, lpFeeRate, initialPrice, kFactor, enableTwap);
|
|
}
|
|
}
|
|
|
|
if (deployOfficialVsWeth) {
|
|
for (uint256 i = 0; i < officials.length; i++) {
|
|
_importIfNeeded(json, providerSource, integration, officials[i], wethSymbol, lpFeeRate, initialPrice, kFactor, enableTwap);
|
|
}
|
|
}
|
|
|
|
for (uint256 i = 0; json.keyExists(string.concat(".explicitPairs[", vm.toString(i), "]")); i++) {
|
|
string memory baseKey = string.concat(".explicitPairs[", vm.toString(i), "].baseSymbol");
|
|
string memory quoteKey = string.concat(".explicitPairs[", vm.toString(i), "].quoteSymbol");
|
|
string memory explicitBase = json.readString(baseKey);
|
|
string memory explicitQuote = json.readString(quoteKey);
|
|
_importIfNeeded(json, providerSource, integration, explicitBase, explicitQuote, lpFeeRate, initialPrice, kFactor, enableTwap);
|
|
}
|
|
|
|
vm.stopBroadcast();
|
|
}
|
|
|
|
function _importIfNeeded(
|
|
string memory json,
|
|
DODOPMMProvider provider,
|
|
DODOPMMIntegration integration,
|
|
string memory baseSymbol,
|
|
string memory quoteSymbol,
|
|
uint256 lpFeeRate,
|
|
uint256 initialPrice,
|
|
uint256 kFactor,
|
|
bool enableTwap
|
|
) internal {
|
|
address base = json.readAddress(string.concat(".tokens.", baseSymbol));
|
|
address quote = json.readAddress(string.concat(".tokens.", quoteSymbol));
|
|
if (base == address(0) || quote == address(0) || base == quote) return;
|
|
|
|
address integrationPool = integration.pools(base, quote);
|
|
if (integrationPool != address(0)) return;
|
|
|
|
address providerPool = provider.pools(base, quote);
|
|
if (providerPool == address(0)) return;
|
|
|
|
integration.importExistingPool(
|
|
providerPool,
|
|
base,
|
|
quote,
|
|
lpFeeRate,
|
|
initialPrice,
|
|
kFactor,
|
|
enableTwap
|
|
);
|
|
|
|
console.log("Imported:", baseSymbol, "/", quoteSymbol);
|
|
console.log("Pool:", providerPool);
|
|
}
|
|
}
|