Skip to content
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

feat(rework): implement fix-bug #163

Merged
merged 6 commits into from
Jan 3, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 7 additions & 9 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,16 @@ name: test
on:
push:
branches:
- 'feature/*'
- 'features/*'
- 'implement-feature/**'
- 'implement-feature/**/**'
- "feature/*"
- "features/*"
- "implement-feature/**"
- "implement-feature/**/**"
pull_request:
branches:
- mainnet
- testnet
- 'feature/*'
- 'features/*'
- "feature/*"
- "features/*"

env:
FOUNDRY_PROFILE: ci
Expand All @@ -30,9 +30,7 @@ jobs:
submodules: recursive

- name: Install Foundry
uses: foundry-rs/foundry-toolchain@v1
with:
version: nightly-2b1f8d6dd90f9790faf0528e05e60e573a7569ce
uses: foundry-rs/foundry-toolchain@v1

- name: Install soldeer
run: forge soldeer install
Expand Down
4 changes: 2 additions & 2 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ ronin-testnet = "https://saigon-archive.roninchain.com/rpc"
localhost = "http://localhost:8545"

[dependencies]
"forge-std" = { version = "1.9.3", url = "https://github.com/foundry-rs/forge-std/archive/refs/tags/v1.9.3.zip" }
"forge-std" = { version = "1.9.5", url = "https://github.com/foundry-rs/forge-std/archive/refs/tags/v1.9.5.zip" }
"solady" = { version = "0.0.228", url = "https://github.com/Vectorized/solady/archive/refs/tags/v0.0.228.zip" }
"openzeppelin" = { version = "5.0.2", url = "https://github.com/OpenZeppelin/openzeppelin-contracts/archive/refs/tags/v5.0.2.zip" }
"openzeppelin-v5" = { version = "5.1.0", url = "https://github.com/OpenZeppelin/openzeppelin-contracts/archive/refs/tags/v5.1.0.zip" }
"openzeppelin-v4" = { version = "4.9.5", url = "https://github.com/OpenZeppelin/openzeppelin-contracts/archive/refs/tags/v4.9.5.zip" }

[soldeer]
Expand Down
18 changes: 11 additions & 7 deletions generate-artifact.sh
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,18 @@ if [[ -z "$name" || -z "$args" || -z "$value" || -z "$nonce" || -z "$deployer" |
exit 1
fi

source_name=$(basename $absolute_path)
# Remove .json or .sol extension
source_name=${source_name%.*}

# Generate the artifact
abi=$(forge inspect $name abi)
devdoc=$(forge inspect $name devdoc)
userdoc=$(forge inspect $name userdoc)
metadata=$(forge inspect $name metadata)
storage_layout=$(forge inspect $name storageLayout)
bytecode=$(forge inspect $name bytecode)
deployed_bytecode=$(forge inspect $name deployedBytecode)
abi=$(forge inspect $source_name abi --json)
devdoc=$(forge inspect $source_name devdoc --json)
userdoc=$(forge inspect $source_name userdoc --json)
metadata=$(forge inspect $source_name metadata --json)
storage_layout=$(forge inspect $source_name storageLayout --json)
bytecode=$(forge inspect $source_name bytecode)
deployed_bytecode=$(forge inspect $source_name deployedBytecode)

# Create the JSON object
json_content=$(
Expand Down
4 changes: 0 additions & 4 deletions remappings.txt

This file was deleted.

2 changes: 1 addition & 1 deletion run.sh
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ if [[ ! $extra_argument == *"sender"* ]] && [[ ! $extra_argument == *"trezor"* ]
if [[ $(eval "echo \$$account_label") == *"op://"* ]]; then
echo "\033[32mFound 'op://' in ${account_label}\033[0m"
op_command="op run --env-file="./.env" --"
elif [[ $(eval "echo \$$account_label") == *""* ]]; then
elif [[ -z $(eval "echo \$$account_label") ]]; then
echo "\033[33mWARNING: Not found private key in ${account_label}\033[0m"
fi
else
Expand Down
6 changes: 3 additions & 3 deletions script/BaseGeneralConfig.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
pragma solidity >=0.6.2 <0.9.0;
pragma experimental ABIEncoderV2;

import { StdStyle } from "../dependencies/forge-std-1.9.3/src/StdStyle.sol";
import { Vm, VmSafe } from "../dependencies/forge-std-1.9.3/src/Vm.sol";
import { console } from "../dependencies/forge-std-1.9.3/src/console.sol";
import { StdStyle } from "../dependencies/forge-std-1.9.5/src/StdStyle.sol";
import { Vm, VmSafe } from "../dependencies/forge-std-1.9.5/src/Vm.sol";
import { console } from "../dependencies/forge-std-1.9.5/src/console.sol";

import { ContractConfig, EnumerableSet, TContract } from "./configs/ContractConfig.sol";
import { MigrationConfig } from "./configs/MigrationConfig.sol";
Expand Down
24 changes: 20 additions & 4 deletions script/BaseMigration.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
pragma solidity >=0.6.2 <0.9.0;
pragma experimental ABIEncoderV2;

import { StdStyle } from "../dependencies/forge-std-1.9.3/src/StdStyle.sol";
import { Vm } from "../dependencies/forge-std-1.9.3/src/Vm.sol";
import { console } from "../dependencies/forge-std-1.9.3/src/console.sol";
import { StdStyle } from "../dependencies/forge-std-1.9.5/src/StdStyle.sol";
import { Vm } from "../dependencies/forge-std-1.9.5/src/Vm.sol";
import { console } from "../dependencies/forge-std-1.9.5/src/console.sol";
import { LibString } from "../dependencies/solady-0.0.228/src/utils/LibString.sol";
import { RoninTransparentProxy } from "../src/RoninTransparentProxy.sol";
import { TransparentProxyOZv4_9_5 } from "../src/TransparentProxyOZv4_9_5.sol";
Expand Down Expand Up @@ -45,13 +45,17 @@ abstract contract BaseMigration is ScriptExtended {
) internal virtual { }

function _beforeRunningScript() internal virtual override {
vm.pauseTracing();
vm.recordLogs();
vm.startStateDiffRecording();
vm.resumeTracing();
}

function _afterRunningScript() internal virtual override {
vm.pauseTracing();
Vm.Log[] memory recordedLogs = vm.getRecordedLogs();
Vm.AccountAccess[] memory stateDiffs = vm.stopAndReturnStateDiff();
vm.resumeTracing();

LibInitializeGuard.validate({ logs: recordedLogs, stateDiffs: stateDiffs });
}
Expand All @@ -77,6 +81,18 @@ abstract contract BaseMigration is ScriptExtended {
vme.logSenderInfo();
}

function switchBack(TNetwork prvNetwork, uint256 prvForkId) public virtual override {
super.switchBack(prvNetwork, prvForkId);
// Should rebuild the shared arguments since different chain may have different shared arguments
_storeRawSharedArguments();
// Should rebuild runtime config since different chain may have different runtime config
vme.buildRuntimeConfig();
// Should rebuild the contract data since different chain may have different contract data
vme.setUpDefaultContracts();
// Log Sender Info of current network
vme.logSenderInfo();
}

function loadContractOrDeploy(
TContract contractType
) public virtual returns (address payable contractAddr) {
Expand Down Expand Up @@ -329,7 +345,7 @@ abstract contract BaseMigration is ScriptExtended {
*/
function _precompileProxyContracts() internal pure virtual {
bytes memory dummy;
dummy = type(RoninTransparentProxy).creationCode;
dummy = type(RoninTransparentProxy).creationCode;
dummy = type(TransparentProxyOZv4_9_5).creationCode;
}
}
4 changes: 2 additions & 2 deletions script/OnchainExecutor.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
pragma solidity >=0.6.2 <0.9.0;
pragma experimental ABIEncoderV2;

import { StdStyle } from "../dependencies/forge-std-1.9.3/src/StdStyle.sol";
import { console } from "../dependencies/forge-std-1.9.3/src/console.sol";
import { StdStyle } from "../dependencies/forge-std-1.9.5/src/StdStyle.sol";
import { console } from "../dependencies/forge-std-1.9.5/src/console.sol";

import { BaseGeneralConfig } from "./BaseGeneralConfig.sol";
import { ScriptExtended } from "./extensions/ScriptExtended.s.sol";
Expand Down
8 changes: 4 additions & 4 deletions script/configs/ContractConfig.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
pragma solidity >=0.6.2 <0.9.0;
pragma experimental ABIEncoderV2;

import { StdStyle } from "../../dependencies/forge-std-1.9.3/src/StdStyle.sol";
import { Vm, VmSafe } from "../../dependencies/forge-std-1.9.3/src/Vm.sol";
import { console } from "../../dependencies/forge-std-1.9.3/src/console.sol";
import { EnumerableSet } from "../../dependencies/openzeppelin-5.0.2/contracts/utils/structs/EnumerableSet.sol";
import { StdStyle } from "../../dependencies/forge-std-1.9.5/src/StdStyle.sol";
import { Vm, VmSafe } from "../../dependencies/forge-std-1.9.5/src/Vm.sol";
import { console } from "../../dependencies/forge-std-1.9.5/src/console.sol";
import { EnumerableSet } from "../../dependencies/openzeppelin-v5-5.1.0/contracts/utils/structs/EnumerableSet.sol";

import { LibString } from "../../dependencies/solady-0.0.228/src/utils/LibString.sol";
import { IContractConfig } from "../interfaces/configs/IContractConfig.sol";
Expand Down
6 changes: 3 additions & 3 deletions script/configs/NetworkConfig.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
pragma solidity >=0.6.2 <0.9.0;
pragma experimental ABIEncoderV2;

import { StdStyle } from "../../dependencies/forge-std-1.9.3/src/StdStyle.sol";
import { Vm } from "../../dependencies/forge-std-1.9.3/src/Vm.sol";
import { console } from "../../dependencies/forge-std-1.9.3/src/console.sol";
import { StdStyle } from "../../dependencies/forge-std-1.9.5/src/StdStyle.sol";
import { Vm } from "../../dependencies/forge-std-1.9.5/src/Vm.sol";
import { console } from "../../dependencies/forge-std-1.9.5/src/console.sol";

import { IGeneralConfig } from "../interfaces/IGeneralConfig.sol";
import { INetworkConfig } from "../interfaces/configs/INetworkConfig.sol";
Expand Down
6 changes: 3 additions & 3 deletions script/configs/RuntimeConfig.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
pragma solidity >=0.6.2 <0.9.0;
pragma experimental ABIEncoderV2;

import { StdStyle } from "../../dependencies/forge-std-1.9.3/src/StdStyle.sol";
import { Vm } from "../../dependencies/forge-std-1.9.3/src/Vm.sol";
import { console } from "../../dependencies/forge-std-1.9.3/src/console.sol";
import { StdStyle } from "../../dependencies/forge-std-1.9.5/src/StdStyle.sol";
import { Vm } from "../../dependencies/forge-std-1.9.5/src/Vm.sol";
import { console } from "../../dependencies/forge-std-1.9.5/src/console.sol";
import { LibString } from "../../dependencies/solady-0.0.228/src/utils/LibString.sol";

import { IRuntimeConfig } from "../interfaces/configs/IRuntimeConfig.sol";
Expand Down
2 changes: 1 addition & 1 deletion script/configs/WalletConfig.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
pragma solidity >=0.6.2 <0.9.0;
pragma experimental ABIEncoderV2;

import { CommonBase } from "../../dependencies/forge-std-1.9.3/src/Base.sol";
import { CommonBase } from "../../dependencies/forge-std-1.9.5/src/Base.sol";
import { LibString } from "../../dependencies/solady-0.0.228/src/utils/LibString.sol";
import { IWalletConfig } from "../interfaces/configs/IWalletConfig.sol";

Expand Down
8 changes: 4 additions & 4 deletions script/extensions/ScriptExtended.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
pragma solidity >=0.6.2 <0.9.0;
pragma experimental ABIEncoderV2;

import { Script, console } from "../../dependencies/forge-std-1.9.3/src/Script.sol";
import { StdAssertions } from "../../dependencies/forge-std-1.9.3/src/StdAssertions.sol";
import { StdStyle } from "../../dependencies/forge-std-1.9.3/src/StdStyle.sol";
import { VmSafe } from "../../dependencies/forge-std-1.9.3/src/Vm.sol";
import { Script, console } from "../../dependencies/forge-std-1.9.5/src/Script.sol";
import { StdAssertions } from "../../dependencies/forge-std-1.9.5/src/StdAssertions.sol";
import { StdStyle } from "../../dependencies/forge-std-1.9.5/src/StdStyle.sol";
import { VmSafe } from "../../dependencies/forge-std-1.9.5/src/Vm.sol";

import { IScriptExtended } from "../interfaces/IScriptExtended.sol";
import { IVme } from "../interfaces/IVme.sol";
Expand Down
11 changes: 4 additions & 7 deletions script/libraries/LibArtifact.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,12 @@
pragma solidity >=0.6.2 <0.9.0;
pragma experimental ABIEncoderV2;

import { stdJson } from "../../dependencies/forge-std-1.9.3/src/StdJson.sol";
import { stdJson } from "../../dependencies/forge-std-1.9.5/src/StdJson.sol";

import { StdStyle } from "../../dependencies/forge-std-1.9.3/src/StdStyle.sol";
import { Vm } from "../../dependencies/forge-std-1.9.3/src/Vm.sol";
import { console } from "../../dependencies/forge-std-1.9.3/src/console.sol";
import { StdStyle } from "../../dependencies/forge-std-1.9.5/src/StdStyle.sol";
import { Vm } from "../../dependencies/forge-std-1.9.5/src/Vm.sol";
import { console } from "../../dependencies/forge-std-1.9.5/src/console.sol";

import { JSONParserLib } from "../../dependencies/solady-0.0.228/src/utils/JSONParserLib.sol";
import { LibString } from "../../dependencies/solady-0.0.228/src/utils/LibString.sol";
import { IGeneralConfig } from "../interfaces/IGeneralConfig.sol";
import { IRuntimeConfig } from "../interfaces/configs/IRuntimeConfig.sol";
Expand All @@ -32,8 +31,6 @@ library LibArtifact {
using stdJson for string;
using LibString for string;
using LibString for address;
using JSONParserLib for string;
using JSONParserLib for JSONParserLib.Item;

Vm private constant vm = Vm(LibSharedAddress.VM);
IGeneralConfig private constant vme = IGeneralConfig(LibSharedAddress.VME);
Expand Down
6 changes: 3 additions & 3 deletions script/libraries/LibDeploy.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
pragma solidity >=0.6.2 <0.9.0;
pragma experimental ABIEncoderV2;

import { StdStyle } from "../../dependencies/forge-std-1.9.3/src/StdStyle.sol";
import { console } from "../../dependencies/forge-std-1.9.3/src/console.sol";
import { StdStyle } from "../../dependencies/forge-std-1.9.5/src/StdStyle.sol";
import { console } from "../../dependencies/forge-std-1.9.5/src/console.sol";

import { IEIP173 } from "../interfaces/IEIP173.sol";
import { vm, vme } from "../utils/Constants.sol";
Expand Down Expand Up @@ -205,7 +205,7 @@ library LibDeploy {
DeployInfo memory proxyInfo;
proxyInfo.callValue = callValue;
proxyInfo.by = implInfo.by;
proxyInfo.contractName = "TransparentProxyOZv4_9_5";
proxyInfo.contractName = "RoninTransparentProxy";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new proxy should be audited before going live

proxyInfo.absolutePath = string.concat(proxyInfo.contractName, ".sol:", proxyInfo.contractName);
proxyInfo.artifactName = string.concat(vm.replace(implInfo.artifactName, "Logic", ""), "Proxy");
proxyInfo.constructorArgs = abi.encode(impl, proxyAdmin, callData);
Expand Down
14 changes: 9 additions & 5 deletions script/libraries/LibInitializeGuard.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
pragma solidity >=0.6.2 <0.9.0;
pragma experimental ABIEncoderV2;

import { StdStyle } from "../../dependencies/forge-std-1.9.3/src/StdStyle.sol";
import { Vm, VmSafe } from "../../dependencies/forge-std-1.9.3/src/Vm.sol";
import { Math } from "../../dependencies/openzeppelin-5.0.2/contracts/utils/math/Math.sol";
import { EnumerableSet } from "../../dependencies/openzeppelin-5.0.2/contracts/utils/structs/EnumerableSet.sol";
import { StdStyle } from "../../dependencies/forge-std-1.9.5/src/StdStyle.sol";
import { Vm, VmSafe } from "../../dependencies/forge-std-1.9.5/src/Vm.sol";
import { Math } from "../../dependencies/openzeppelin-v5-5.1.0/contracts/utils/math/Math.sol";
import { EnumerableSet } from "../../dependencies/openzeppelin-v5-5.1.0/contracts/utils/structs/EnumerableSet.sol";
import { JSONParserLib } from "../../dependencies/solady-0.0.228/src/utils/JSONParserLib.sol";
import { LibString } from "../../dependencies/solady-0.0.228/src/utils/LibString.sol";

Expand Down Expand Up @@ -86,6 +86,7 @@ library LibInitializeGuard {
* @param stateDiffs The state diffs of the transactions.
*/
function validate(Vm.Log[] memory logs, Vm.AccountAccess[] memory stateDiffs) internal {
vm.pauseGasMetering();
Cache storage $ = _getCacheStorage();

_recordUpgradesAndInitializations({ $cache: $, logs: logs });
Expand Down Expand Up @@ -116,6 +117,7 @@ library LibInitializeGuard {

_validateLogicsVersion({ $cache: $ });
_validateProxiesVersion({ $cache: $ });
vm.resumeTracing();
}

/**
Expand Down Expand Up @@ -303,11 +305,12 @@ library LibInitializeGuard {
initSlot.nBit = N_BIT_INIT_V5;
initSlot.slot = INITIALIZABLE_STORAGE_OZV5;

string[] memory inputs = new string[](4);
string[] memory inputs = new string[](5);
inputs[0] = "forge";
inputs[1] = "inspect";
inputs[2] = _getContractAbsolutePath($cache._chainInfo[proxy].forkId, proxy);
inputs[3] = "storage";
inputs[4] = "--json";

string memory ret = string(vm.ffi(inputs));
JSONParserLib.Item memory layout = ret.parse().at('"storage"');
Expand Down Expand Up @@ -340,6 +343,7 @@ library LibInitializeGuard {
string memory path
) internal pure returns (string memory contractName) {
uint256 length = bytes(path).length;
// Remove ".sol"
contractName = path;
if (path.endsWith(".sol")) contractName = path.slice(0, length - 4);
string[] memory parts = contractName.split(":");
Expand Down
2 changes: 1 addition & 1 deletion script/libraries/LibProxy.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
pragma solidity >=0.6.2 <0.9.0;
pragma experimental ABIEncoderV2;

import { Vm } from "../../dependencies/forge-std-1.9.3/src/Vm.sol";
import { Vm } from "../../dependencies/forge-std-1.9.5/src/Vm.sol";
import { LibSharedAddress } from "./LibSharedAddress.sol";

library LibProxy {
Expand Down
2 changes: 1 addition & 1 deletion script/sample/SampleGeneralConfig.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
pragma solidity >=0.6.2 <0.9.0;
pragma experimental ABIEncoderV2;

import { BaseGeneralConfig } from "../BaseGeneralConfig.sol";
import { Contract } from "./utils/Contract.sol";
import { BaseGeneralConfig } from "@fdk/BaseGeneralConfig.sol";

contract SampleGeneralConfig is BaseGeneralConfig {
constructor() BaseGeneralConfig("", "deployments/") { }
Expand Down
4 changes: 2 additions & 2 deletions script/sample/SampleMigration.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
pragma solidity >=0.6.2 <0.9.0;
pragma experimental ABIEncoderV2;

import { BaseMigration } from "../BaseMigration.s.sol";
import { DefaultNetwork } from "../utils/DefaultNetwork.sol";
import { SampleGeneralConfig } from "./SampleGeneralConfig.sol";
import { ISharedArgument } from "./interfaces/ISharedArgument.sol";
import { BaseMigration } from "@fdk/BaseMigration.s.sol";
import { DefaultNetwork } from "@fdk/utils/DefaultNetwork.sol";

contract SampleMigration is BaseMigration {
ISharedArgument public constant config = ISharedArgument(address(vme));
Expand Down
2 changes: 1 addition & 1 deletion script/sample/interfaces/ISharedArgument.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
pragma solidity >=0.6.2 <0.9.0;
pragma experimental ABIEncoderV2;

import { IGeneralConfig } from "@fdk/interfaces/IGeneralConfig.sol";
import { IGeneralConfig } from "../../interfaces/IGeneralConfig.sol";

interface ISharedArgument is IGeneralConfig {
struct SharedParameter {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
pragma solidity >=0.6.2 <0.9.0;
pragma experimental ABIEncoderV2;

import { DefaultNetwork } from "../../../utils/DefaultNetwork.sol";
import { ISharedArgument, SampleMigration } from "../../SampleMigration.s.sol";
import { Sample, SampleDeploy } from "../../contracts/SampleDeploy.s.sol";
import { SampleProxy, SampleProxyDeploy } from "../../contracts/SampleProxyDeploy.s.sol";
import { DefaultNetwork } from "@fdk/utils/DefaultNetwork.sol";

contract Migration__XXXXYYZZ_DeploySample is SampleMigration {
function _sharedArguments() internal virtual override returns (bytes memory args) {
Expand Down
Loading
Loading