Skip to content

Commit 2350d96

Browse files
authored
Merge pull request #42 from metacontract/improve/devkit-performance
Improve/devkit performance / Add Flattened.sol
2 parents 2248443 + e62563f commit 2350d96

24 files changed

+26977
-119
lines changed

devkit/Files.sol

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// SPDX-License-Identifier: MIT
2+
pragma solidity ^0.8.23;
3+
4+
import "./MCBase.sol";
5+
import "./MCDevKit.sol";
6+
import "./MCTest.sol";
7+
import "./MCScript.sol";

devkit/Flattened.sol

Lines changed: 26869 additions & 0 deletions
Large diffs are not rendered by default.

devkit/MCTest.sol

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ import {Dummy} from "devkit/test/dummy/Dummy.sol";
1515
// 📦 BOILERPLATE
1616
import {MCTestBase} from "./MCBase.sol";
1717

18-
struct Function {
19-
bytes4 selector;
20-
address implementation;
21-
}
22-
2318
// 🌟 MC State Fuzzing Test
2419
abstract contract MCTest is MCTestBase, OZProxy { // solhint-disable-line payable-fallback
20+
struct Function {
21+
bytes4 selector;
22+
address implementation;
23+
}
24+
2525
mapping(bytes4 selector => address) implementations;
2626
address target = address(this);
2727
Function[] internal functions;

devkit/core/Dictionary.sol

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {ForgeHelper} from "devkit/utils/ForgeHelper.sol";
1414
// External Libs
1515
import {IDictionary} from "@ucs.mc/dictionary/interfaces/IDictionary.sol";
1616
import {Dictionary as UCSDictionary} from "@ucs.mc/dictionary/Dictionary.sol";
17-
import {ImmutableDictionary, Function as Func} from "@ucs.mc/dictionary/ImmutableDictionary.sol";
17+
import {ImmutableDictionary} from "@ucs.mc/dictionary/ImmutableDictionary.sol";
1818
import {BeaconDictionary} from "@ucs.mc/dictionary/BeaconDictionary.sol";
1919
// Mock
2020
import {MockDictionary} from "devkit/test/mocks/MockDictionary.sol";
@@ -80,9 +80,9 @@ library DictionaryLib {
8080
uint pid = dictionary.startProcess("deployImmutable", param(functions, facade));
8181
Validator.SHOULD_FacadeIsContract(facade);
8282
dictionary.startBuilding();
83-
Func[] memory funcs;
83+
ImmutableDictionary.Function[] memory funcs;
8484
for (uint i; i < functions.length; ++i) {
85-
funcs[i] = Func(functions[i].selector, functions[i].implementation);
85+
funcs[i] = ImmutableDictionary.Function(functions[i].selector, functions[i].implementation);
8686
}
8787
dictionary.addr = address(new ImmutableDictionary(funcs, facade));
8888
dictionary.kind = DictionaryKind.Immutable;

devkit/test/dummy/Dummy.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {MCDevKit} from "devkit/MCDevKit.sol";
55
import {DummyFunction} from "./DummyFunction.sol";
66
import {DummyFacade} from "./DummyFacade.sol";
77
import {DummyContract} from "devkit/test/dummy/DummyContract.sol";
8-
import {Function} from "devkit/MCTest.sol";
8+
import {MCTest} from "devkit/MCTest.sol";
99

1010
library Dummy {
1111
function bundleName() internal returns(string memory) {
@@ -35,7 +35,7 @@ library Dummy {
3535
return mc.createMockDictionary().addr;
3636
}
3737

38-
function dictionary(MCDevKit storage mc, Function[] memory functions) internal returns(address) {
38+
function dictionary(MCDevKit storage mc, MCTest.Function[] memory functions) internal returns(address) {
3939
mc.init("DummyBundle");
4040
for (uint i; i < functions.length; ++i) {
4141
mc.use(functions[i].selector, functions[i].implementation);

script/DeployLib.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.23;
33

4-
import {MCDevKit} from "devkit/MCDevKit.sol";
4+
import {MCDevKit} from "devkit/Flattened.sol";
55
import {StdFacade} from "mc-std/interfaces/StdFacade.sol";
66
import {InitSetAdmin} from "mc-std/functions/protected/InitSetAdmin.sol";
77

script/DeployStdDictionary.s.sol

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.23;
33

4-
import {MCScriptBase} from "devkit/MCBase.sol";
4+
import {MCScriptBase, MCDevKit} from "devkit/Flattened.sol";
55
import {DeployLib} from "./DeployLib.sol";
6-
import {MCDevKit} from "devkit/MCDevKit.sol";
76

87
contract DeployStdDictionary is MCScriptBase {
98
using DeployLib for MCDevKit;

script/DeployStdFunctions.s.sol

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.23;
33

4-
import {MCScriptBase} from "devkit/MCBase.sol";
4+
import {MCScriptBase, MCDevKit} from "devkit/Flattened.sol";
55
import {DeployLib} from "./DeployLib.sol";
6-
import {MCDevKit} from "devkit/MCDevKit.sol";
76

87
contract DeployStdFunctions is MCScriptBase {
98
using DeployLib for MCDevKit;

test/devkit/MCDeployLib.t.sol

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.23;
33

4-
import {MCTestBase} from "devkit/MCBase.sol";
5-
import {Dummy} from "devkit/test/dummy/Dummy.sol";
4+
import {MCTestBase, Dummy} from "devkit/Flattened.sol";
65

76
contract MCDeployLibTest is MCTestBase {
87
/**-----------------------------

test/devkit/MCFinderLib.t.sol

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.23;
33

4-
import {MCTestBase} from "devkit/MCBase.sol";
5-
import {MessageHead as REASON} from "devkit/system/message/MessageHead.sol";
6-
import {Dummy} from "devkit/test/dummy/Dummy.sol";
4+
import {
5+
MCTestBase,
6+
MessageHead as REASON,
7+
Dummy
8+
} from "devkit/Flattened.sol";
79

810
contract MCFinderLibTest is MCTestBase {
911

test/devkit/MCHelpers.t.sol

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.23;
33

4-
import {MCTestBase} from "devkit/MCBase.sol";
5-
import {MessageHead as HEAD} from "devkit/system/message/MessageHead.sol";
4+
import {
5+
MCTestBase,
6+
MessageHead as HEAD,
7+
Inspector
8+
} from "devkit/Flattened.sol";
69

7-
import {Inspector} from "devkit/types/Inspector.sol";
10+
contract MCHelpersTest is MCTestBase {
811
using Inspector for string;
912

10-
11-
contract MCHelpersTest is MCTestBase {
1213
/**-----------------------------
1314
♻️ Reset Current Context
1415
-------------------------------*/

test/devkit/MCInitLib.t.sol

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,45 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.23;
33

4-
import {MCTestBase} from "devkit/MCBase.sol";
5-
import {MessageHead as HEAD} from "devkit/system/message/MessageHead.sol";
4+
import {
5+
MCTestBase,
6+
MessageHead as HEAD,
7+
Function,
8+
Inspector,
9+
Bundle,
10+
DummyFunction,
11+
DummyFacade
12+
} from "devkit/Flattened.sol";
13+
14+
import {InitSetAdmin} from "mc-std/functions/protected/InitSetAdmin.sol";
15+
import {GetFunctions} from "mc-std/functions/GetFunctions.sol";
16+
import {Clone} from "mc-std/functions/Clone.sol";
617

7-
import {Inspector} from "devkit/types/Inspector.sol";
18+
contract MCInitLibTest is MCTestBase {
819
using Inspector for string;
20+
using Inspector for address;
21+
22+
function _isInitSetAdmin(Function memory func) internal returns(bool) {
23+
return
24+
func.name.isEqual("InitSetAdmin") &&
25+
func.selector == InitSetAdmin.initSetAdmin.selector &&
26+
func.implementation.isContract();
27+
}
928

10-
import {Bundle} from "devkit/core/Bundle.sol";
11-
import {Function} from "devkit/core/Function.sol";
12-
import {DummyFunction} from "devkit/test/dummy/DummyFunction.sol";
13-
import {DummyFacade} from "devkit/test/dummy/DummyFacade.sol";
29+
function _isGetFunctions(Function memory func) internal returns(bool) {
30+
return
31+
func.name.isEqual("GetFunctions") &&
32+
func.selector == GetFunctions.getFunctions.selector &&
33+
func.implementation.isContract();
34+
}
1435

15-
import {TestHelper} from "../utils/TestHelper.sol";
16-
using TestHelper for Function;
36+
function _isClone(Function memory func) internal returns(bool) {
37+
return
38+
func.name.isEqual("Clone") &&
39+
func.selector == Clone.clone.selector &&
40+
func.implementation.isContract();
41+
}
1742

18-
contract MCInitLibTest is MCTestBase {
1943

2044
/**--------------------
2145
🌱 Init Bundle
@@ -116,14 +140,14 @@ contract MCInitLibTest is MCTestBase {
116140
function test_setupStdFuncs_Success() public {
117141
mc.setupStdFunctions();
118142

119-
assertTrue(mc.std.functions.initSetAdmin.isInitSetAdmin());
120-
assertTrue(mc.std.functions.getFunctions.isGetFunctions());
121-
assertTrue(mc.std.functions.clone.isClone());
143+
assertTrue(_isInitSetAdmin(mc.std.functions.initSetAdmin));
144+
assertTrue(_isGetFunctions(mc.std.functions.getFunctions));
145+
assertTrue(_isClone(mc.std.functions.clone));
122146

123147
assertTrue(mc.std.all.functions.length == 3);
124-
assertTrue(mc.std.all.functions[0].isInitSetAdmin());
125-
assertTrue(mc.std.all.functions[1].isGetFunctions());
126-
assertTrue(mc.std.all.functions[2].isClone());
148+
assertTrue(_isInitSetAdmin(mc.std.all.functions[0]));
149+
assertTrue(_isGetFunctions(mc.std.all.functions[1]));
150+
assertTrue(_isClone(mc.std.all.functions[2]));
127151
}
128152

129153
}

test/devkit/MCMockLib.t.sol

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.23;
33

4-
import {MCTestBase} from "devkit/MCBase.sol";
5-
import {MessageHead as HEAD} from "devkit/system/message/MessageHead.sol";
4+
import {
5+
MCTestBase,
6+
MessageHead as HEAD,
7+
Inspector,
8+
Bundle,
9+
Function,
10+
DummyFunction,
11+
DummyFacade
12+
} from "devkit/Flattened.sol";
613

7-
import {Inspector} from "devkit/types/Inspector.sol";
14+
contract MCMockLibTest is MCTestBase {
815
using Inspector for string;
916

10-
import {Bundle} from "devkit/core/Bundle.sol";
11-
import {Function} from "devkit/core/Function.sol";
12-
import {DummyFunction} from "devkit/test/dummy/DummyFunction.sol";
13-
import {DummyFacade} from "devkit/test/dummy/DummyFacade.sol";
14-
15-
contract MCMockLibTest is MCTestBase {
1617
function setUp() public {
1718
mc.setupStdFunctions();
1819
}

test/script/DeployStdDictionary.t.sol

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.22;
33

4-
import {MCTestBase} from "devkit/MCBase.sol";
4+
import {MCTestBase, MCDevKit} from "devkit/Flattened.sol";
55
import {DeployLib} from "../../script/DeployLib.sol";
6-
import {MCDevKit} from "devkit/MCDevKit.sol";
76

87
contract DeployStdDictionaryTest is MCTestBase {
98
using DeployLib for MCDevKit;

test/std/bundles/Std.t.sol renamed to test/std/Std.t.sol

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.23;
33

4-
import {MCTest} from "devkit/MCTest.sol";
4+
import {MCTest, MCDevKit} from "devkit/Flattened.sol";
55
import {DeployLib} from "script/DeployLib.sol";
6-
import {MCDevKit} from "devkit/MCDevKit.sol";
76

8-
import {Clone} from "mc-std/functions/Clone.sol";
97
import {IStd} from "mc-std/interfaces/IStd.sol";
108
import {Initialization} from "mc-std/functions/protected/protection/Initialization.sol";
119

test/std/functions/Clone.t.sol

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.22;
33

4-
import {console2} from "forge-std/console2.sol";
5-
import {MCTest} from "devkit/MCTest.sol";
6-
import {ProxyUtils} from "@ucs.mc/proxy/ProxyUtils.sol";
4+
import {
5+
MCTest,
6+
console2,
7+
ForgeHelper,
8+
Dummy
9+
} from "devkit/Flattened.sol";
710

811
import {Clone} from "mc-std/functions/Clone.sol";
912
import {ProxyCreator} from "mc-std/functions/internal/ProxyCreator.sol";
10-
import {ForgeHelper} from "devkit/utils/ForgeHelper.sol";
11-
import {Dummy} from "devkit/test/dummy/Dummy.sol";
1213

1314
contract CloneTest is MCTest {
1415
function setUp() public {

test/std/functions/Create.t.sol

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.22;
33

4-
import {console2} from "forge-std/console2.sol";
5-
import {MCTest} from "devkit/MCTest.sol";
6-
import {ProxyUtils} from "@ucs.mc/proxy/ProxyUtils.sol";
4+
import {
5+
MCTest,
6+
console2,
7+
ForgeHelper,
8+
Dummy
9+
} from "devkit/Flattened.sol";
710

811
import {Create} from "mc-std/functions/Create.sol";
912
import {ProxyCreator} from "mc-std/functions/internal/ProxyCreator.sol";
10-
import {ForgeHelper} from "devkit/utils/ForgeHelper.sol";
11-
import {Dummy} from "devkit/test/dummy/Dummy.sol";
1213

1314
contract CreateTest is MCTest {
1415
function setUp() public {

test/std/functions/GetFunctions.t.sol

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.22;
33

4-
import {console2} from "forge-std/console2.sol";
5-
import {MCTest} from "devkit/MCTest.sol";
6-
import {ProxyUtils} from "@ucs.mc/proxy/ProxyUtils.sol";
7-
import {Function as MCFunc} from "devkit/core/Function.sol";
4+
import {
5+
MCTest,
6+
console2,
7+
ForgeHelper,
8+
Dummy,
9+
DummyFunction,
10+
DummyFacade
11+
} from "devkit/Flattened.sol";
812

913
import {GetFunctions} from "mc-std/functions/GetFunctions.sol";
1014
import {ProxyCreator} from "mc-std/functions/internal/ProxyCreator.sol";
11-
import {ForgeHelper} from "devkit/utils/ForgeHelper.sol";
12-
import {Dummy} from "devkit/test/dummy/Dummy.sol";
13-
import {DummyFunction} from "devkit/test/dummy/DummyFunction.sol";
14-
import {DummyFacade} from "devkit/test/dummy/DummyFacade.sol";
1515

1616
contract GetFunctionsTest is MCTest {
1717
function setUp() public {

test/std/functions/Receive.t.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.22;
33

4-
import {MCTest} from "devkit/MCTest.sol";
4+
import {MCTest} from "devkit/Flattened.sol";
55
import {Receive} from "mc-std/functions/Receive.sol";
66

77
contract ReceiveTest is MCTest {

test/std/functions/internal/ProxyCreator.t.sol

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.22;
33

4-
import {MCTest} from "devkit/MCTest.sol";
4+
import {MCTest, ForgeHelper, Dummy} from "devkit/Flattened.sol";
55

6-
import {Dummy} from "devkit/test/dummy/Dummy.sol";
76
import {ProxyCreator} from "mc-std/functions/internal/ProxyCreator.sol";
8-
import {ForgeHelper} from "devkit/utils/ForgeHelper.sol";
97

108
contract ProxyCreatorTest is MCTest {
119

test/std/functions/protected/InitSetAdmin.t.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// SPDX-License-Identifier: MIT
22
pragma solidity ^0.8.22;
33

4-
import {MCTest} from "devkit/MCTest.sol";
4+
import {MCTest} from "devkit/Flattened.sol";
55

66
import {InitSetAdmin} from "mc-std/functions/protected/InitSetAdmin.sol";
77
import {Initialization} from "mc-std/functions/protected/protection/Initialization.sol";

test/std/functions/protected/protection/MsgSender.t.sol

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ import {Test} from "forge-std/Test.sol";
66
import {MsgSender} from "mc-std/functions/protected/protection/MsgSender.sol";
77

88
contract MsgSenderTest is Test {
9-
function setUp() public {}
10-
119
function test_ShouldBeAdmin_RevertIf_SenderIsNotAdmin() public {
1210
vm.expectRevert(MsgSender.NotAdmin.selector);
1311
MsgSender.shouldBeAdmin();

0 commit comments

Comments
 (0)