Skip to content

Commit e521daa

Browse files
authored
Merge pull request #49 from PrimeIntellect-ai/chore/update-deploy-scripts
clean up deployments scripts
2 parents f315fd7 + cabbc10 commit e521daa

File tree

8 files changed

+192
-25
lines changed

8 files changed

+192
-25
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
release/*
33
.vscode/*
4+
broadcast/*
45

56
# Compiler files
67
cache/

deploy_work_validation.sh

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,6 @@ if [ -z "$RPC_URL" ]; then
55
export RPC_URL="http://localhost:8545"
66
fi
77

8-
if [ -z "$COMPUTE_POOL_ADDRESS" ]; then
9-
export COMPUTE_POOL_ADDRESS=0x610178dA211FEF7D417bC0e6FeD39F05609AD788
10-
fi
11-
128
if [ -z "$DOMAIN_ID" ]; then
139
export DOMAIN_ID=0
1410
fi

foundry.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ out = "out"
44
libs = ["lib"]
55
optimizer = true
66
optimizer_runs = 10000000
7-
fs_permissions = [{ access = "write", path = "./release/"}]
7+
fs_permissions = [{ access = "read-write", path = "./release/"}]
88

99
additional_compiler_profiles = [
1010
{ name = "general", via_ir = true, optimizer_runs = 1000000 },

script/Deploy.s.sol

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@ import "../src/PrimeNetwork.sol";
1111
import "../src/StakeManager.sol";
1212
import {RewardsDistributorWorkSubmissionFactory} from "../src/RewardsDistributorWorkSubmissionFactory.sol";
1313

14-
contract DeployScript is Script {
14+
import "./deployment_util.sol";
15+
16+
contract DeployScript is DeploymentUtil {
1517
// ether = 10^18, so this is 2.5e16
1618
uint256 stakeMin = 0.025 ether;
1719
uint256 initialSupply = 1000000 * 1e18; // 1M tokens
20+
string deploymentsFile = "./release/deployments.json";
1821

1922
function run() external {
2023
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY_FEDERATOR");
@@ -67,22 +70,22 @@ contract DeployScript is Script {
6770

6871
vm.stopBroadcast();
6972

73+
Deployments memory deployments = Deployments({
74+
AIToken: address(aiToken),
75+
ComputePool: address(computePool),
76+
ComputeRegistry: address(computeRegistry),
77+
DomainRegistry: address(domainRegistry),
78+
PrimeNetwork: address(primeNetwork),
79+
RewardsDistributorFactory: address(rewardsDistributorFactory),
80+
StakeManager: address(stakeManager),
81+
WorkValidator: address(0x0) // Placeholder for WorkValidator
82+
});
83+
7084
// Log deployed addresses
7185
console.log("Deployed contracts:");
72-
console.log("AIToken:", address(aiToken));
73-
console.log("ComputeRegistry:", address(computeRegistry));
74-
console.log("DomainRegistry:", address(domainRegistry));
75-
console.log("StakeManager:", address(stakeManager));
76-
console.log("PrimeNetwork:", address(primeNetwork));
77-
console.log("ComputePool:", address(computePool));
78-
79-
vm.serializeAddress("contracts", "AIToken", address(aiToken));
80-
vm.serializeAddress("contracts", "ComputeRegistry", address(computeRegistry));
81-
vm.serializeAddress("contracts", "DomainRegistry", address(domainRegistry));
82-
vm.serializeAddress("contracts", "StakeManager", address(stakeManager));
83-
vm.serializeAddress("contracts", "PrimeNetwork", address(primeNetwork));
84-
string memory finalJson = vm.serializeAddress("contracts", "ComputePool", address(computePool));
85-
86-
vm.writeJson(finalJson, "./release/deployments.json");
86+
logDeployments(deployments);
87+
88+
// Write deployments to file
89+
writeDeployments(deployments, deploymentsFile);
8790
}
8891
}

script/DeployWorkValidator.s.sol

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,19 @@ pragma solidity ^0.8.0;
33

44
import "forge-std/Script.sol";
55
import "../src/SyntheticDataWorkValidator.sol";
6+
import "./deployment_util.sol";
67

7-
contract DeployWorkValidatorScript is Script {
8+
contract DeployWorkValidatorScript is DeploymentUtil {
89
function run() external {
910
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY_FEDERATOR");
11+
string memory deploymentsFile = "./release/deployments.json";
1012

13+
Deployments memory deployments = getDeployments(deploymentsFile);
14+
15+
logDeployments(deployments);
1116
// Get configuration from environment variables
1217
uint256 domainId = vm.envUint("DOMAIN_ID");
13-
address computePool = vm.envAddress("COMPUTE_POOL_ADDRESS");
18+
address computePool = deployments.ComputePool;
1419
uint256 workValidityPeriod = 1 days;
1520
console.log("Configuration:");
1621
console.log(" Domain ID:", domainId);
@@ -25,10 +30,12 @@ contract DeployWorkValidatorScript is Script {
2530

2631
vm.stopBroadcast();
2732

33+
deployments.WorkValidator = address(workValidator);
34+
2835
// Log deployed address
2936
console.log("Deployed SyntheticDataWorkValidator:", address(workValidator));
3037

31-
string memory finalJson = vm.serializeAddress("contracts", "work_validator", address(workValidator));
32-
vm.writeJson(finalJson, "./release/synthetic_data_work_validator.json");
38+
// keep these in the same order as in the Deploy script
39+
writeDeployments(deployments, deploymentsFile);
3340
}
3441
}

script/SetupState.s.sol

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
pragma solidity ^0.8.0;
3+
4+
import "forge-std/Script.sol";
5+
import "../src/AIToken.sol";
6+
import "../src/AITokenTransferRole.sol";
7+
import "../src/ComputePool.sol";
8+
import "../src/ComputeRegistry.sol";
9+
import "../src/DomainRegistry.sol";
10+
import "../src/PrimeNetwork.sol";
11+
import "../src/StakeManager.sol";
12+
import {RewardsDistributorWorkSubmissionFactory} from "../src/RewardsDistributorWorkSubmissionFactory.sol";
13+
14+
import "./deployment_util.sol";
15+
16+
contract SetupStateScript is DeploymentUtil {
17+
function run() external {
18+
uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY_FEDERATOR");
19+
address deployer = vm.addr(deployerPrivateKey);
20+
uint256 poolId = 0;
21+
string memory deploymentsFile = "./release/deployments.json";
22+
23+
Deployments memory deployments = getDeployments(deploymentsFile);
24+
25+
logDeployments(deployments);
26+
27+
PrimeNetwork primeNetwork = PrimeNetwork(deployments.PrimeNetwork);
28+
ComputePool computePool = ComputePool(deployments.ComputePool);
29+
IWorkValidation workValidator = IWorkValidation(deployments.WorkValidator);
30+
31+
vm.startBroadcast(deployerPrivateKey);
32+
33+
console.log("Deployer:", deployer);
34+
console.log("Creating domain...");
35+
uint256 domainId = primeNetwork.createDomain(
36+
"Decentralized Training", workValidator, "https://primeintellect.ai/training/params"
37+
);
38+
39+
console.log("Domain ID:", domainId);
40+
41+
address computeManager = address(deployer);
42+
43+
console.log("Creating compute pool...");
44+
poolId = computePool.createComputePool(domainId, computeManager, "test", "ipfs://legacy", 0);
45+
poolId = 0;
46+
console.log("Compute pool ID:", poolId);
47+
console.log("Starting compute pool:", poolId);
48+
computePool.startComputePool(poolId);
49+
computePool.endComputePool(poolId);
50+
console.log("Ended compute pool:", poolId);
51+
console.log("Creating compute pool...");
52+
poolId = computePool.createComputePool(domainId, computeManager, "SYNTHETIC-1", "ipfs://legacy", 0);
53+
console.log("Compute pool ID:", poolId);
54+
console.log("Starting compute pool:", poolId);
55+
computePool.startComputePool(poolId);
56+
computePool.endComputePool(poolId);
57+
console.log("Ended compute pool:", poolId);
58+
// ...
59+
60+
vm.stopBroadcast();
61+
}
62+
}

script/deployment_util.sol

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
pragma solidity ^0.8.0;
3+
4+
import "forge-std/Script.sol";
5+
6+
/**
7+
* ---- IMPORTANT NOTE ----
8+
*
9+
* YOU MUST KEEP THE ORDER OF THESE STRUCT FIELDS IN ALPHABETICAL ORDER
10+
* BECAUSE FOUNDRY JUST REORDERS THE JSON ALPHABETICALLY
11+
* ON LOAD AND COMPLETELY IGNORES FIELD NAMES
12+
*
13+
*/
14+
struct Deployments {
15+
address AIToken;
16+
address ComputePool;
17+
address ComputeRegistry;
18+
address DomainRegistry;
19+
address PrimeNetwork;
20+
address RewardsDistributorFactory;
21+
address StakeManager;
22+
address WorkValidator;
23+
}
24+
25+
struct DeploymentsInternal {
26+
bytes32 AIToken;
27+
bytes32 ComputePool;
28+
bytes32 ComputeRegistry;
29+
bytes32 DomainRegistry;
30+
bytes32 PrimeNetwork;
31+
bytes32 RewardsDistributorFactory;
32+
bytes32 StakeManager;
33+
bytes32 WorkValidator;
34+
}
35+
36+
contract DeploymentUtil is Script {
37+
function getDeployments(string memory location) internal view returns (Deployments memory) {
38+
string memory json = vm.readFile(location);
39+
bytes memory data = vm.parseJson(json);
40+
41+
console.log("Data:", vm.toString(data));
42+
43+
DeploymentsInternal memory deploymentsInternal = abi.decode(data, (DeploymentsInternal));
44+
45+
Deployments memory deployments = Deployments({
46+
AIToken: address(bytes20(deploymentsInternal.AIToken << (8 * 12))),
47+
ComputePool: address(bytes20(deploymentsInternal.ComputePool << (8 * 12))),
48+
ComputeRegistry: address(bytes20(deploymentsInternal.ComputeRegistry << (8 * 12))),
49+
DomainRegistry: address(bytes20(deploymentsInternal.DomainRegistry << (8 * 12))),
50+
PrimeNetwork: address(bytes20(deploymentsInternal.PrimeNetwork << (8 * 12))),
51+
RewardsDistributorFactory: address(bytes20(deploymentsInternal.RewardsDistributorFactory << (8 * 12))),
52+
StakeManager: address(bytes20(deploymentsInternal.StakeManager << (8 * 12))),
53+
WorkValidator: address(bytes20(deploymentsInternal.WorkValidator << (8 * 12)))
54+
});
55+
56+
return deployments;
57+
}
58+
59+
function writeDeployments(Deployments memory deployments, string memory location) internal {
60+
if (vm.exists(location)) {
61+
vm.removeFile(location);
62+
}
63+
64+
vm.serializeAddress("contracts", "AIToken", address(deployments.AIToken));
65+
vm.serializeAddress("contracts", "ComputeRegistry", address(deployments.ComputeRegistry));
66+
vm.serializeAddress("contracts", "ComputePool", address(deployments.ComputePool));
67+
vm.serializeAddress("contracts", "DomainRegistry", address(deployments.DomainRegistry));
68+
vm.serializeAddress("contracts", "PrimeNetwork", address(deployments.PrimeNetwork));
69+
vm.serializeAddress("contracts", "StakeManager", address(deployments.StakeManager));
70+
vm.serializeAddress("contracts", "RewardsDistributorFactory", address(deployments.RewardsDistributorFactory));
71+
72+
string memory finalJson = vm.serializeAddress("contracts", "WorkValidator", address(deployments.WorkValidator));
73+
74+
vm.writeJson(finalJson, location);
75+
}
76+
77+
function logDeployments(Deployments memory deployments) internal pure {
78+
console.log("AIToken:", address(deployments.AIToken));
79+
console.log("ComputePool:", address(deployments.ComputePool));
80+
console.log("ComputeRegistry:", address(deployments.ComputeRegistry));
81+
console.log("DomainRegistry:", address(deployments.DomainRegistry));
82+
console.log("PrimeNetwork:", address(deployments.PrimeNetwork));
83+
console.log("RewardsDistributorFactory:", address(deployments.RewardsDistributorFactory));
84+
console.log("StakeManager:", address(deployments.StakeManager));
85+
console.log("WorkValidator:", address(deployments.WorkValidator));
86+
}
87+
}

setup_state.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/bin/bash
2+
3+
if [ -z "$RPC_URL" ]; then
4+
export RPC_URL="http://localhost:8545"
5+
fi
6+
7+
if [ -z "$PRIVATE_KEY_FEDERATOR" ]; then
8+
export PRIVATE_KEY_FEDERATOR="0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80"
9+
fi
10+
11+
forge script script/SetupState.s.sol:SetupStateScript --rpc-url $RPC_URL --broadcast --via-ir

0 commit comments

Comments
 (0)