feat: complete robinhood testnet deployment and export
This commit is contained in:
+26
-9
@@ -26,10 +26,10 @@ async function main() {
|
|||||||
|
|
||||||
// 2. 部署 PowerLDACurveV2 联合曲线引擎
|
// 2. 部署 PowerLDACurveV2 联合曲线引擎
|
||||||
console.log("Deploying PowerLDACurveV2 Engine...");
|
console.log("Deploying PowerLDACurveV2 Engine...");
|
||||||
// 曲线标准参数 (18位精度定点数)
|
// 曲线标准参数 (18位精度定点数,start 必须 >= 1.1e18 以满足 LogExpMath.LN_36_UPPER_BOUND 要求)
|
||||||
const c1 = hre.ethers.parseUnits("1", 18);
|
const c1 = hre.ethers.parseUnits("1", 18);
|
||||||
const c2 = hre.ethers.parseUnits("1", 18);
|
const c2 = hre.ethers.parseUnits("1", 18);
|
||||||
const start = 0;
|
const start = hre.ethers.parseUnits("1.1", 18);
|
||||||
const timeKinkStart = 0;
|
const timeKinkStart = 0;
|
||||||
const timeKinkEnd = 86400 * 7;
|
const timeKinkEnd = 86400 * 7;
|
||||||
const rateBaseMin = hre.ethers.parseUnits("0.001", 18);
|
const rateBaseMin = hre.ethers.parseUnits("0.001", 18);
|
||||||
@@ -48,8 +48,19 @@ async function main() {
|
|||||||
console.log(`PowerLDACurveV2 Deployed at: ${curveAddress}`);
|
console.log(`PowerLDACurveV2 Deployed at: ${curveAddress}`);
|
||||||
|
|
||||||
// 3. 部署 Registry 库与 WTFControllerV2 实现合约
|
// 3. 部署 Registry 库与 WTFControllerV2 实现合约
|
||||||
console.log("Deploying Registry Library & WTFControllerV2 Implementation...");
|
console.log("Deploying Registry Library...");
|
||||||
const WTFControllerV2 = await hre.ethers.getContractFactory("WTFControllerV2");
|
const RegistryLib = await hre.ethers.getContractFactory("main/src/controllerv2/Registry.sol:Registry");
|
||||||
|
const registryLib = await RegistryLib.deploy();
|
||||||
|
await registryLib.waitForDeployment();
|
||||||
|
const registryLibAddress = await registryLib.getAddress();
|
||||||
|
console.log(`Registry Library Deployed at: ${registryLibAddress}`);
|
||||||
|
|
||||||
|
console.log("Deploying WTFControllerV2 Implementation...");
|
||||||
|
const WTFControllerV2 = await hre.ethers.getContractFactory("main/src/controllerv2/WTFControllerV2.sol:WTFControllerV2", {
|
||||||
|
libraries: {
|
||||||
|
"@wtf/src/controllerv2/Registry.sol:Registry": registryLibAddress
|
||||||
|
}
|
||||||
|
});
|
||||||
const controllerImpl = await WTFControllerV2.deploy();
|
const controllerImpl = await WTFControllerV2.deploy();
|
||||||
await controllerImpl.waitForDeployment();
|
await controllerImpl.waitForDeployment();
|
||||||
const implAddress = await controllerImpl.getAddress();
|
const implAddress = await controllerImpl.getAddress();
|
||||||
@@ -57,13 +68,13 @@ async function main() {
|
|||||||
|
|
||||||
// 4. 部署 TestProxy 代理并初始化 Controller
|
// 4. 部署 TestProxy 代理并初始化 Controller
|
||||||
console.log("Deploying Proxy Contract...");
|
console.log("Deploying Proxy Contract...");
|
||||||
const TestProxy = await hre.ethers.getContractFactory("TestProxy");
|
const TestProxy = await hre.ethers.getContractFactory("main/src/mock/TestProxy.sol:TestProxy");
|
||||||
const proxy = await TestProxy.deploy(implAddress);
|
const proxy = await TestProxy.deploy(implAddress);
|
||||||
await proxy.waitForDeployment();
|
await proxy.waitForDeployment();
|
||||||
const proxyAddress = await proxy.getAddress();
|
const proxyAddress = await proxy.getAddress();
|
||||||
console.log(`WTFControllerV2 Proxy Deployed at: ${proxyAddress}`);
|
console.log(`WTFControllerV2 Proxy Deployed at: ${proxyAddress}`);
|
||||||
|
|
||||||
const controller = await hre.ethers.getContractAt("WTFControllerV2", proxyAddress);
|
const controller = await hre.ethers.getContractAt("main/src/controllerv2/WTFControllerV2.sol:WTFControllerV2", proxyAddress);
|
||||||
|
|
||||||
// 初始化参数
|
// 初始化参数
|
||||||
const admin = deployer.address;
|
const admin = deployer.address;
|
||||||
@@ -76,13 +87,19 @@ async function main() {
|
|||||||
await initTx.wait();
|
await initTx.wait();
|
||||||
console.log("WTFControllerV2 Proxy Initialized!");
|
console.log("WTFControllerV2 Proxy Initialized!");
|
||||||
|
|
||||||
// 5. 治理初始化:白名单与标准档位
|
// 5. 治理初始化:角色授权、白名单与标准档位
|
||||||
|
console.log("Granting OPERATOR_ROLE to Admin...");
|
||||||
|
const OPERATOR_ROLE = hre.ethers.keccak256(hre.ethers.toUtf8Bytes("OPERATOR_ROLE"));
|
||||||
|
const grantTx = await controller.grantRole(OPERATOR_ROLE, admin);
|
||||||
|
await grantTx.wait();
|
||||||
|
console.log("OPERATOR_ROLE granted!");
|
||||||
|
|
||||||
console.log("Whitelisting Collateral & Curve in Controller...");
|
console.log("Whitelisting Collateral & Curve in Controller...");
|
||||||
const seedMin = hre.ethers.parseUnits("1", 18);
|
const seedMin = hre.ethers.parseUnits("1", 18);
|
||||||
const wlCollateralTx = await controller.setCollateralWhitelisted(collateralAddress, true, seedMin);
|
const wlCollateralTx = await controller.setWhitelistedCollateral(collateralAddress, true, seedMin);
|
||||||
await wlCollateralTx.wait();
|
await wlCollateralTx.wait();
|
||||||
|
|
||||||
const wlCurveTx = await controller.setCurveWhitelisted(curveAddress, true);
|
const wlCurveTx = await controller.setWhitelistedCurve(curveAddress, true);
|
||||||
await wlCurveTx.wait();
|
await wlCurveTx.wait();
|
||||||
|
|
||||||
console.log("Setting Standard Market Tiers (Tier 1/2/3)...");
|
console.log("Setting Standard Market Tiers (Tier 1/2/3)...");
|
||||||
|
|||||||
Reference in New Issue
Block a user