chore: sync submodule state (parent ref update)

Made-with: Cursor
This commit is contained in:
defiQUG
2026-03-02 12:14:09 -08:00
parent 50ab378da9
commit 5efe36b1e0
1100 changed files with 155024 additions and 8674 deletions

View File

@@ -0,0 +1,78 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import {Script, console} from "forge-std/Script.sol";
import {DODOPMMIntegration} from "../../contracts/dex/DODOPMMIntegration.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
/**
* @title AddLiquidityPMMPoolsChain138
* @notice Add liquidity to the three DODO PMM pools on Chain 138 (cUSDT/cUSDC, cUSDT/USDT, cUSDC/USDC).
* @dev Env: PRIVATE_KEY, RPC_URL_138, DODO_PMM_INTEGRATION_ADDRESS (or DODO_PMM_INTEGRATION),
* POOL_CUSDTCUSDC, POOL_CUSDTUSDT, POOL_CUSDCUSDC,
* ADD_LIQUIDITY_BASE_AMOUNT, ADD_LIQUIDITY_QUOTE_AMOUNT (e.g. 1000000e6 for 1M units, 6 decimals).
* Optional: ADD_LIQUIDITY_CUSDTCUSDC_BASE, ADD_LIQUIDITY_CUSDTCUSDC_QUOTE, etc. for per-pool amounts.
*/
contract AddLiquidityPMMPoolsChain138 is Script {
function run() external {
uint256 pk = vm.envUint("PRIVATE_KEY");
address integrationAddr = vm.envAddress("DODO_PMM_INTEGRATION");
if (integrationAddr == address(0)) integrationAddr = vm.envAddress("DODO_PMM_INTEGRATION_ADDRESS");
require(integrationAddr != address(0), "DODO_PMM_INTEGRATION not set");
address poolCusdtCusdc = vm.envOr("POOL_CUSDTCUSDC", address(0));
address poolCusdtUsdt = vm.envOr("POOL_CUSDTUSDT", address(0));
address poolCusdcUsdc = vm.envOr("POOL_CUSDCUSDC", address(0));
uint256 defaultBase = vm.envOr("ADD_LIQUIDITY_BASE_AMOUNT", uint256(0));
uint256 defaultQuote = vm.envOr("ADD_LIQUIDITY_QUOTE_AMOUNT", uint256(0));
DODOPMMIntegration integration = DODOPMMIntegration(integrationAddr);
address cusdt = integration.compliantUSDT();
address cusdc = integration.compliantUSDC();
address usdt = integration.officialUSDT();
address usdc = integration.officialUSDC();
vm.startBroadcast(pk);
if (poolCusdtCusdc != address(0) && (defaultBase > 0 || defaultQuote > 0)) {
uint256 b = vm.envOr("ADD_LIQUIDITY_CUSDTCUSDC_BASE", defaultBase);
uint256 q = vm.envOr("ADD_LIQUIDITY_CUSDTCUSDC_QUOTE", defaultQuote);
if (b > 0 && q > 0) {
_approveAndAdd(integration, cusdt, cusdc, poolCusdtCusdc, b, q);
console.log("Added liquidity to cUSDT/cUSDC pool:", poolCusdtCusdc);
}
}
if (poolCusdtUsdt != address(0) && (defaultBase > 0 || defaultQuote > 0)) {
uint256 b = vm.envOr("ADD_LIQUIDITY_CUSDTUSDT_BASE", defaultBase);
uint256 q = vm.envOr("ADD_LIQUIDITY_CUSDTUSDT_QUOTE", defaultQuote);
if (b > 0 && q > 0) {
_approveAndAdd(integration, cusdt, usdt, poolCusdtUsdt, b, q);
console.log("Added liquidity to cUSDT/USDT pool:", poolCusdtUsdt);
}
}
if (poolCusdcUsdc != address(0) && (defaultBase > 0 || defaultQuote > 0)) {
uint256 b = vm.envOr("ADD_LIQUIDITY_CUSDCUSDC_BASE", defaultBase);
uint256 q = vm.envOr("ADD_LIQUIDITY_CUSDCUSDC_QUOTE", defaultQuote);
if (b > 0 && q > 0) {
_approveAndAdd(integration, cusdc, usdc, poolCusdcUsdc, b, q);
console.log("Added liquidity to cUSDC/USDC pool:", poolCusdcUsdc);
}
}
vm.stopBroadcast();
}
function _approveAndAdd(
DODOPMMIntegration integration,
address baseToken,
address quoteToken,
address pool,
uint256 baseAmount,
uint256 quoteAmount
) internal {
IERC20(baseToken).approve(address(integration), type(uint256).max);
IERC20(quoteToken).approve(address(integration), type(uint256).max);
integration.addLiquidity(pool, baseAmount, quoteAmount);
}
}

View File

@@ -0,0 +1,43 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import {Script, console} from "forge-std/Script.sol";
import {DODOPMMIntegration} from "../../contracts/dex/DODOPMMIntegration.sol";
/**
* @title CreateCUSDCUSDCPool
* @notice Call createCUSDCUSDCPool on existing DODOPMMIntegration (Chain 138).
* @dev Requires caller to have POOL_MANAGER_ROLE. Run with --broadcast.
*/
contract CreateCUSDCUSDCPool is Script {
uint256 constant LP_FEE_BPS = 3;
uint256 constant INITIAL_PRICE_1E18 = 1e18;
uint256 constant K_50PCT = 0.5e18;
bool constant USE_TWAP = true;
function run() external {
uint256 pk = vm.envUint("PRIVATE_KEY");
address integrationAddr = vm.envAddress("DODO_PMM_INTEGRATION");
if (integrationAddr == address(0)) {
integrationAddr = vm.envAddress("DODO_PMM_INTEGRATION_ADDRESS");
}
require(integrationAddr != address(0), "DODO_PMM_INTEGRATION not set");
address deployer = vm.addr(pk);
uint64 nextNonce = uint64(vm.envOr("NEXT_NONCE", uint256(0)));
if (nextNonce > 0) {
vm.setNonce(deployer, nextNonce);
}
DODOPMMIntegration integration = DODOPMMIntegration(integrationAddr);
vm.startBroadcast(pk);
address pool = integration.createCUSDCUSDCPool(
LP_FEE_BPS,
INITIAL_PRICE_1E18,
K_50PCT,
USE_TWAP
);
console.log("cUSDC/USDC pool created at:", pool);
vm.stopBroadcast();
}
}

View File

@@ -0,0 +1,43 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import {Script, console} from "forge-std/Script.sol";
import {DODOPMMIntegration} from "../../contracts/dex/DODOPMMIntegration.sol";
/**
* @title CreateCUSDTCUSDCPool
* @notice Call createCUSDTCUSDCPool on existing DODOPMMIntegration (Chain 138).
* @dev Requires caller to have POOL_MANAGER_ROLE. Run with --broadcast.
*/
contract CreateCUSDTCUSDCPool is Script {
uint256 constant LP_FEE_BPS = 3;
uint256 constant INITIAL_PRICE_1E18 = 1e18;
uint256 constant K_50PCT = 0.5e18;
bool constant USE_TWAP = true;
function run() external {
uint256 pk = vm.envUint("PRIVATE_KEY");
address integrationAddr = vm.envAddress("DODO_PMM_INTEGRATION");
if (integrationAddr == address(0)) {
integrationAddr = vm.envAddress("DODO_PMM_INTEGRATION_ADDRESS");
}
require(integrationAddr != address(0), "DODO_PMM_INTEGRATION not set");
address deployer = vm.addr(pk);
uint64 nextNonce = uint64(vm.envOr("NEXT_NONCE", uint256(0)));
if (nextNonce > 0) {
vm.setNonce(deployer, nextNonce);
}
DODOPMMIntegration integration = DODOPMMIntegration(integrationAddr);
vm.startBroadcast(pk);
address pool = integration.createCUSDTCUSDCPool(
LP_FEE_BPS,
INITIAL_PRICE_1E18,
K_50PCT,
USE_TWAP
);
console.log("cUSDT/cUSDC pool created at:", pool);
vm.stopBroadcast();
}
}

View File

@@ -0,0 +1,43 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import {Script, console} from "forge-std/Script.sol";
import {DODOPMMIntegration} from "../../contracts/dex/DODOPMMIntegration.sol";
/**
* @title CreateCUSDTUSDTPool
* @notice Call createCUSDTUSDTPool on existing DODOPMMIntegration (Chain 138).
* @dev Requires caller to have POOL_MANAGER_ROLE. Run with --broadcast.
*/
contract CreateCUSDTUSDTPool is Script {
uint256 constant LP_FEE_BPS = 3;
uint256 constant INITIAL_PRICE_1E18 = 1e18;
uint256 constant K_50PCT = 0.5e18;
bool constant USE_TWAP = true;
function run() external {
uint256 pk = vm.envUint("PRIVATE_KEY");
address integrationAddr = vm.envAddress("DODO_PMM_INTEGRATION");
if (integrationAddr == address(0)) {
integrationAddr = vm.envAddress("DODO_PMM_INTEGRATION_ADDRESS");
}
require(integrationAddr != address(0), "DODO_PMM_INTEGRATION not set");
address deployer = vm.addr(pk);
uint64 nextNonce = uint64(vm.envOr("NEXT_NONCE", uint256(0)));
if (nextNonce > 0) {
vm.setNonce(deployer, nextNonce);
}
DODOPMMIntegration integration = DODOPMMIntegration(integrationAddr);
vm.startBroadcast(pk);
address pool = integration.createCUSDTUSDTPool(
LP_FEE_BPS,
INITIAL_PRICE_1E18,
K_50PCT,
USE_TWAP
);
console.log("cUSDT/USDT pool created at:", pool);
vm.stopBroadcast();
}
}

View File

@@ -14,22 +14,21 @@ contract DeployDODOPMMIntegration is Script {
function run() external {
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
address deployer = vm.addr(deployerPrivateKey);
// Load environment variables
// Load environment variables (required for deploy)
address admin = vm.envOr("DODO_INTEGRATION_ADMIN", deployer);
// DODO contracts (check DODO documentation for actual addresses per chain)
address dodoVendingMachine = vm.envAddress("DODO_VENDING_MACHINE_ADDRESS");
address dodoVendingMachine = vm.envOr("DODO_VENDING_MACHINE_ADDRESS", address(0));
address dodoApprove = vm.envOr("DODO_APPROVE_ADDRESS", address(0)); // Optional
// Official token addresses
address officialUSDT = vm.envOr("OFFICIAL_USDT_ADDRESS", address(0));
address officialUSDC = vm.envOr("OFFICIAL_USDC_ADDRESS", address(0));
// Compliant token addresses
address compliantUSDT = vm.envAddress("COMPLIANT_USDT_ADDRESS");
address compliantUSDC = vm.envAddress("COMPLIANT_USDC_ADDRESS");
address compliantUSDT = vm.envOr("COMPLIANT_USDT_ADDRESS", address(0));
address compliantUSDC = vm.envOr("COMPLIANT_USDC_ADDRESS", address(0));
if (dodoVendingMachine == address(0) || compliantUSDT == address(0) || compliantUSDC == address(0)) {
console.log("Skipping DODO PMM deploy: set DODO_VENDING_MACHINE_ADDRESS, COMPLIANT_USDT_ADDRESS, COMPLIANT_USDC_ADDRESS in .env");
return;
}
console.log("Deploying DODOPMMIntegration with deployer:", vm.toString(deployer));
console.log("Admin:", vm.toString(admin));
console.log("DODO Vending Machine:", vm.toString(dodoVendingMachine));
@@ -38,7 +37,7 @@ contract DeployDODOPMMIntegration is Script {
console.log("Official USDC:", vm.toString(officialUSDC));
console.log("Compliant USDT:", vm.toString(compliantUSDT));
console.log("Compliant USDC:", vm.toString(compliantUSDC));
vm.startBroadcast(deployerPrivateKey);
DODOPMMIntegration integration = new DODOPMMIntegration(

View File

@@ -0,0 +1,23 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import {Script, console} from "forge-std/Script.sol";
import {DVMFactoryAdapter} from "../../contracts/dex/DVMFactoryAdapter.sol";
/**
* @title DeployDVMFactoryAdapter
* @notice Deploy adapter so DODOPMMIntegration (createDVM) can use official DODO DVMFactory (createDODOVendingMachine)
*/
contract DeployDVMFactoryAdapter is Script {
function run() external {
address dodoFactory = vm.envAddress("DODO_DVM_FACTORY");
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
vm.startBroadcast(deployerPrivateKey);
DVMFactoryAdapter adapter = new DVMFactoryAdapter(dodoFactory);
vm.stopBroadcast();
console.log("DVMFactoryAdapter deployed at:", address(adapter));
console.log("Set DODO_VENDING_MACHINE_ADDRESS=%s", address(adapter));
}
}

View File

@@ -0,0 +1,25 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import {Script, console} from "forge-std/Script.sol";
import {MockDVMFactory} from "../../contracts/dex/MockDVMFactory.sol";
/**
* @title DeployMockDVMFactory
* @notice Deploy mock DVM factory on Chain 138 so PMM integration can run when no official DODO DVM exists
*/
contract DeployMockDVMFactory is Script {
function run() external {
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
address deployer = vm.addr(deployerPrivateKey);
vm.startBroadcast(deployerPrivateKey);
MockDVMFactory factory = new MockDVMFactory();
vm.stopBroadcast();
console.log("MockDVMFactory deployed at:", address(factory));
console.log("\nAdd to .env:");
console.log("DODO_VENDING_MACHINE_ADDRESS=%s", address(factory));
console.log("\nThen run: scripts/deployment/run-pmm-and-pools.sh");
}
}

View File

@@ -0,0 +1,69 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;
import {Script, console} from "forge-std/Script.sol";
import {PrivatePoolRegistry} from "../../contracts/dex/PrivatePoolRegistry.sol";
import {DODOPMMIntegration} from "../../contracts/dex/DODOPMMIntegration.sol";
/**
* @title DeployPrivatePoolRegistryAndPools
* @notice Deploy PrivatePoolRegistry and optionally create XAU-anchored private pools (Master Plan Phase 2).
* @dev Env: PRIVATE_KEY, (optional) PRIVATE_POOL_REGISTRY_ADMIN, DODOPMM_INTEGRATION_ADDRESS,
* XAU_ADDRESS_138, COMPLIANT_USDT_ADDRESS, COMPLIANT_USDC_ADDRESS, cEURT_ADDRESS_138.
* Deployer must have POOL_MANAGER_ROLE on DODOPMMIntegration to create pools.
*/
contract DeployPrivatePoolRegistryAndPools is Script {
uint256 constant LP_FEE_BPS = 3;
uint256 constant INITIAL_PRICE_1E18 = 1e18;
uint256 constant K_50PCT = 0.5e18;
bool constant USE_TWAP = true;
function run() external {
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY");
address deployer = vm.addr(deployerPrivateKey);
address admin = vm.envOr("PRIVATE_POOL_REGISTRY_ADMIN", deployer);
vm.startBroadcast(deployerPrivateKey);
PrivatePoolRegistry registry = new PrivatePoolRegistry(admin);
console.log("PrivatePoolRegistry deployed at:", vm.toString(address(registry)));
address integrationAddr = vm.envOr("DODOPMM_INTEGRATION_ADDRESS", address(0));
address xau = vm.envOr("XAU_ADDRESS_138", address(0));
if (integrationAddr != address(0) && xau != address(0)) {
address cUSDT = vm.envOr("COMPLIANT_USDT_ADDRESS", address(0));
address cUSDC = vm.envOr("COMPLIANT_USDC_ADDRESS", address(0));
address cEURT = vm.envOr("cEURT_ADDRESS_138", address(0));
DODOPMMIntegration integration = DODOPMMIntegration(integrationAddr);
if (cUSDT != address(0)) {
try integration.createPool(cUSDT, xau, LP_FEE_BPS, INITIAL_PRICE_1E18, K_50PCT, USE_TWAP) returns (address pool) {
registry.register(cUSDT, xau, pool);
console.log("Created and registered cUSDT/XAU pool:", vm.toString(pool));
} catch {}
}
if (cUSDC != address(0)) {
try integration.createPool(cUSDC, xau, LP_FEE_BPS, INITIAL_PRICE_1E18, K_50PCT, USE_TWAP) returns (address pool) {
registry.register(cUSDC, xau, pool);
console.log("Created and registered cUSDC/XAU pool:", vm.toString(pool));
} catch {}
}
if (cEURT != address(0)) {
try integration.createPool(cEURT, xau, LP_FEE_BPS, INITIAL_PRICE_1E18, K_50PCT, USE_TWAP) returns (address pool) {
registry.register(cEURT, xau, pool);
console.log("Created and registered cEURT/XAU pool:", vm.toString(pool));
} catch {}
}
} else {
console.log("Skipping pool creation (set DODOPMM_INTEGRATION_ADDRESS and XAU_ADDRESS_138 to create XAU-anchored pools)");
}
vm.stopBroadcast();
console.log("\n=== Deployment Summary ===");
console.log("PrivatePoolRegistry:", vm.toString(address(registry)));
console.log("Admin:", vm.toString(admin));
}
}