-
Notifications
You must be signed in to change notification settings - Fork 7
Minor bug fixes #10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Minor bug fixes #10
Changes from all commits
0b20c0a
14961ce
96b7022
12d8c39
dfd0e3a
df64e50
99e3098
68a548b
517f4e4
2be0cb3
511853b
d096df0
1e7d659
2be49a8
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,83 @@ | ||
| // SPDX-License-Identifier: MIT | ||
| pragma solidity ^0.8.28; | ||
|
|
||
| import "forge-std/Script.sol"; | ||
| import "../src/TreeNft.sol"; | ||
| import "../src/token-contracts/CareToken.sol"; | ||
| import "../src/token-contracts/PlanterToken.sol"; | ||
| import "../src/token-contracts/LegacyToken.sol"; | ||
| import "../src/OrganisationFactory.sol"; | ||
|
|
||
| contract DeployAllContractsAtOnce is Script { | ||
| address public careTokenAddress; | ||
| address public planterTokenAddress; | ||
| address public verifierTokenAddress; | ||
| address public legacyTokenAddress; | ||
| address public treeNftAddress; | ||
|
|
||
| function run() external { | ||
| uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); | ||
| address deployer = vm.addr(deployerPrivateKey); | ||
|
|
||
| console.log("\n========== DEPLOYMENT INITIALIZED =========="); | ||
| console.log("Deployer Address: ", deployer); | ||
| console.log("Deployer ETH Balance: ", deployer.balance); | ||
| console.log("============================================\n"); | ||
|
|
||
| vm.startBroadcast(deployerPrivateKey); | ||
| console.log(">> Step 1: Deploying ERC20 Token Contracts..."); | ||
|
|
||
| CareToken careToken = new CareToken(deployer); | ||
| careTokenAddress = address(careToken); | ||
| console.log(" - CareToken deployed at: ", careTokenAddress); | ||
|
|
||
| LegacyToken legacyToken = new LegacyToken(deployer); | ||
| legacyTokenAddress = address(legacyToken); | ||
| console.log(" - LegacyToken deployed at: ", legacyTokenAddress); | ||
|
|
||
| console.log("\n>> Step 2: Deploying TreeNft Contract..."); | ||
| TreeNft treeNft = new TreeNft(careTokenAddress, legacyTokenAddress); | ||
| treeNftAddress = address(treeNft); | ||
| console.log(" - TreeNft deployed at: ", treeNftAddress); | ||
|
|
||
| console.log("\n>> Step 3: Transferring Token Ownership to TreeNft..."); | ||
| careToken.transferOwnership(treeNftAddress); | ||
| console.log(" - CareToken ownership transferred."); | ||
| legacyToken.transferOwnership(treeNftAddress); | ||
| console.log(" - LegacyToken ownership transferred."); | ||
|
|
||
| console.log("\n>> Step 4: Deploying OrganisationFactory..."); | ||
| OrganisationFactory orgFactory = new OrganisationFactory(treeNftAddress); | ||
| address orgFactoryAddress = address(orgFactory); | ||
| console.log(" - OrganisationFactory deployed at:", orgFactoryAddress); | ||
|
|
||
| vm.stopBroadcast(); | ||
|
|
||
| console.log("\n========== DEPLOYMENT SUMMARY =========="); | ||
| console.log("CareToken Address: ", careTokenAddress); | ||
| console.log("LegacyToken Address: ", legacyTokenAddress); | ||
| console.log("TreeNft Address: ", treeNftAddress); | ||
| console.log("OrganisationFactory: ", orgFactoryAddress); | ||
| console.log("All token ownerships successfully transferred to TreeNft."); | ||
| console.log("=========================================\n"); | ||
|
|
||
| verifyDeployment(); | ||
| } | ||
|
|
||
| function verifyDeployment() internal view { | ||
| console.log(">> Verifying Deployment Integrity..."); | ||
|
|
||
| TreeNft treeNft = TreeNft(treeNftAddress); | ||
|
|
||
| require(address(treeNft.careTokenContract()) == careTokenAddress, "CareToken address mismatch"); | ||
| require(address(treeNft.legacyToken()) == legacyTokenAddress, "LegacyToken address mismatch"); | ||
|
|
||
| CareToken careToken = CareToken(careTokenAddress); | ||
| require(careToken.owner() == treeNftAddress, "CareToken ownership not transferred"); | ||
|
|
||
| CareToken legacyToken = CareToken(legacyTokenAddress); | ||
| require(legacyToken.owner() == treeNftAddress, "LegacyToken ownership not transferred"); | ||
|
|
||
| console.log("Deployment verification passed.\n"); | ||
| } | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,37 @@ | ||
| // SPDX-License-Identifier: MIT | ||
| pragma solidity ^0.8.28; | ||
|
|
||
| import "forge-std/Script.sol"; | ||
| import "../src/TreeNft.sol"; | ||
| import "../src/OrganisationFactory.sol"; | ||
|
|
||
| contract DeployOrganisationFactory is Script { | ||
| function run() external { | ||
| uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); | ||
| address deployer = vm.addr(deployerPrivateKey); | ||
| address treeNftAddress = vm.envAddress("TREE_NFT_ADDRESS"); | ||
|
|
||
| if (treeNftAddress.code.length <= 0) revert InvalidContractAddress(); | ||
|
|
||
| console.log("\n========== DEPLOYMENT STARTED =========="); | ||
| console.log(">> Deployer Address: ", deployer); | ||
| console.log(">> Deployer Balance (wei): ", deployer.balance); | ||
| console.log(">> Linked TreeNFT Address: ", treeNftAddress); | ||
| console.log("========================================\n"); | ||
|
|
||
| vm.startBroadcast(deployerPrivateKey); | ||
|
|
||
| console.log("Deploying OrganisationFactory..."); | ||
| OrganisationFactory orgFactory = new OrganisationFactory(treeNftAddress); | ||
| address orgFactoryAddress = address(orgFactory); | ||
| console.log("OrganisationFactory deployed at:", orgFactoryAddress); | ||
|
|
||
| vm.stopBroadcast(); | ||
|
|
||
| console.log("\n========== DEPLOYMENT SUMMARY =========="); | ||
| console.log("OrganisationFactory Address: ", orgFactoryAddress); | ||
| console.log("Linked TreeNFT Address: ", treeNftAddress); | ||
| console.log("Deployment completed successfully."); | ||
| console.log("========================================\n"); | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -5,13 +5,10 @@ import "forge-std/Script.sol"; | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| import "../src/TreeNft.sol"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| import "../src/token-contracts/CareToken.sol"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| import "../src/token-contracts/PlanterToken.sol"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| import "../src/token-contracts/VerifierToken.sol"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| import "../src/token-contracts/LegacyToken.sol"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| contract DeployTreeNft is Script { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| address public careTokenAddress; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| address public planterTokenAddress; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| address public verifierTokenAddress; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| address public legacyTokenAddress; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| address public treeNftAddress; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -29,37 +26,22 @@ contract DeployTreeNft is Script { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| careTokenAddress = address(careToken); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("CareToken deployed at:", careTokenAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| PlanterToken planterToken = new PlanterToken(deployer); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| planterTokenAddress = address(planterToken); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("PlanterToken deployed at:", planterTokenAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| VerifierToken verifierToken = new VerifierToken(deployer); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| verifierTokenAddress = address(verifierToken); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("VerifierToken deployed at:", verifierTokenAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| LegacyToken legacyToken = new LegacyToken(deployer); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| legacyTokenAddress = address(legacyToken); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("LegacyToken deployed at:", legacyTokenAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("Step 2: Deploy TreeNft contract..."); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| TreeNft treeNft = new TreeNft(careTokenAddress, planterTokenAddress, verifierTokenAddress, legacyTokenAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| TreeNft treeNft = new TreeNft(careTokenAddress, legacyTokenAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| treeNftAddress = address(treeNft); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("TreeNft deployed at:", treeNftAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("Step 3: Transfer ownership to TreeNft contract..."); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| careToken.transferOwnership(treeNftAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("CareToken ownership transferred to TreeNft"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| planterToken.transferOwnership(treeNftAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("PlanterToken ownership transferred to TreeNft"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| verifierToken.transferOwnership(treeNftAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("VerifierToken ownership transferred to TreeNft"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| legacyToken.transferOwnership(treeNftAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("LegacyToken ownership transferred to TreeNft"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| vm.stopBroadcast(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("\n=== DEPLOYMENT SUMMARY ==="); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("CareToken:", careTokenAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("PlanterToken:", planterTokenAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("VerifierToken:", verifierTokenAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("LegacyToken:", legacyTokenAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("TreeNft:", treeNftAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("All token ownerships transferred to TreeNft!"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -72,12 +54,14 @@ contract DeployTreeNft is Script { | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| TreeNft treeNft = TreeNft(treeNftAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| require(address(treeNft.careTokenContract()) == careTokenAddress, "CareToken address mismatch"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| require(address(treeNft.planterTokenContract()) == planterTokenAddress, "PlanterToken address mismatch"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| require(address(treeNft.verifierTokenContract()) == verifierTokenAddress, "VerifierToken address mismatch"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| require(address(treeNft.legacyToken()) == legacyTokenAddress, "LegacyToken address mismatch"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| CareToken careToken = CareToken(careTokenAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| require(careToken.owner() == treeNftAddress, "CareToken ownership not transferred"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if (careToken.owner() != treeNftAddress) revert OwnershipNotTransferred(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| LegacyToken legacyToken = LegacyToken(legacyTokenAddress); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if (legacyToken.owner() != treeNftAddress) revert OwnershipNotTransferred(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
60
to
64
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Missing import for custom error causes compilation failure.
Apply: import "../src/token-contracts/LegacyToken.sol";
+import "../src/utils/errors.sol";Optional: stop broadcasting before view-only verification to avoid accidental txs during checks. - console.log("========================\n");
- verifyDeployment();
+ console.log("========================\n");
+ vm.stopBroadcast();
+ verifyDeployment();📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| console.log("Deployment verification successful!"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing import for
InvalidContractAddress(); script won’t compile.Add the errors import.
Apply:
import "../src/OrganisationFactory.sol"; +import "../src/utils/errors.sol";📝 Committable suggestion
🤖 Prompt for AI Agents