Skip to content

Commit bf0569d

Browse files
committed
WIP: more agglayer testing
1 parent 8d76cce commit bf0569d

2 files changed

Lines changed: 44 additions & 11 deletions

File tree

script/agglayer/Agglayer.s.sol

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import {TestNFT} from "./TestNFT.sol";
66
import {console} from "forge-std/console.sol";
77
import {Role} from "src/Role.sol";
88
import {PolygonAgglayerCrossChain} from "src/module/token/crosschain/PolygonAgglayer.sol";
9-
import {ERC20Base} from "src/core/token/ERC20Base.sol";
9+
import {ERC20Core} from "src/core/token/ERC20Core.sol";
10+
import {MintableERC20} from "src/module/token/minting/MintableERC20.sol";
1011
import {OwnableRoles} from "@solady/auth/OwnableRoles.sol";
1112

1213
contract DeployTestNFT is Script {
@@ -25,33 +26,57 @@ contract DeployTestNFT is Script {
2526

2627
contract MintTestNFT is Script {
2728
TestNFT public testNFT;
28-
ERC20Base public testToken;
29+
MintableERC20 public mintableModule;
30+
PolygonAgglayerCrossChain public polygonAgglayer;
31+
ERC20Core public core;
32+
33+
address agglayerBridgeExtension = 0x2311BFA86Ae27FC10E1ad3f805A2F9d22Fc8a6a1;
2934

3035
function run() external {
3136
uint256 deployerPrivateKey = vm.envUint("DEPLOYER_PRIVATE_KEY");
3237
address deployerAddress = vm.addr(deployerPrivateKey);
38+
// address coreAddress = vm.envAddress("TEST_TOKEN_ADDRESS");
3339
address testNFTAddress = vm.envAddress("TEST_NFT_ADDRESS");
34-
address testTokenAddress = vm.envAddress("TEST_TOKEN_ADDRESS");
3540
uint64 destinationChain = 2442;
3641
vm.startBroadcast(deployerPrivateKey);
3742

38-
testNFT = TestNFT(testNFTAddress);
39-
testToken = ERC20Base(payable(testTokenAddress));
43+
address[] memory modules = new address[](2);
44+
bytes[] memory moduleData = new bytes[](2);
4045

41-
OwnableRoles(testTokenAddress).grantRoles(deployerAddress, Role._MINTER_ROLE);
42-
testToken.mint(deployerAddress, 100, "");
46+
mintableModule = new MintableERC20(address(0x0));
47+
polygonAgglayer = new PolygonAgglayerCrossChain();
48+
console.log("mintableModule deployed to:", address(mintableModule));
49+
console.log("polygonAgglayer deployed to:", address(polygonAgglayer));
50+
51+
bytes memory mintableEncodedInstallParams = abi.encode(deployerAddress);
52+
bytes memory polygonAgglayerEncodedInstallParams = abi.encode(address(polygonAgglayer));
53+
54+
modules[0] = address(mintableModule);
55+
modules[1] = address(polygonAgglayer);
56+
57+
moduleData[0] = mintableEncodedInstallParams;
58+
moduleData[1] = polygonAgglayerEncodedInstallParams;
59+
60+
core = new ERC20Core("test", "TEST", "", deployerAddress, modules, moduleData);
61+
console.log("core deployed to:", address(core));
62+
63+
core.grantRoles(deployerAddress, Role._MINTER_ROLE);
64+
core.mint(deployerAddress, 100, "");
4365
console.log("Minted test tokens to deployer");
4466

45-
bytes memory extraArgs = abi.encode(address(0), false, testToken, 100);
67+
core.approve(agglayerBridgeExtension, 100);
68+
console.log("Approved agglayer bridge extension");
69+
70+
bytes memory extraArgs = abi.encode(deployerAddress, true, address(core), 100);
4671
bytes memory payload = abi.encodeWithSelector(
4772
bytes4(keccak256("mint(address,uint256)")),
4873
deployerAddress,
4974
1
5075
);
51-
52-
PolygonAgglayerCrossChain(testTokenAddress).sendCrossChainTransaction(
76+
77+
PolygonAgglayerCrossChain(address(core)).sendCrossChainTransaction(
5378
destinationChain,
54-
address(testNFT),
79+
testNFTAddress,
5580
payload,
5681
extraArgs
5782
);

src/module/token/crosschain/PolygonAgglayer.sol

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {Role} from "../../../Role.sol";
66

77
import {CrossChain} from "./CrossChain.sol";
88
import {IBridgeAndCall} from "@lxly-bridge-and-call/IBridgeAndCall.sol";
9+
import {console} from "forge-std/console.sol";
910

1011
library PolygonAgglayerCrossChainStorage {
1112

@@ -85,6 +86,12 @@ contract PolygonAgglayerCrossChain is Module, CrossChain {
8586
address router = _polygonAgglayerStorage().router;
8687
(address _fallbackAddress, bool _forceUpdateGlobalExitRoot, address _token, uint256 _amount) =
8788
abi.decode(_extraArgs, (address, bool, address, uint256));
89+
console.log("token address", _token);
90+
console.log("amount", _amount);
91+
console.log("destinationChain", _destinationChain);
92+
console.log("callAddress", _callAddress);
93+
console.log("fallbackAddress", _fallbackAddress);
94+
console.log("forceUpdateGlobalExitRoot", _forceUpdateGlobalExitRoot);
8895

8996
IBridgeAndCall(router).bridgeAndCall(
9097
_token,
@@ -95,6 +102,7 @@ contract PolygonAgglayerCrossChain is Module, CrossChain {
95102
_payload,
96103
_forceUpdateGlobalExitRoot
97104
);
105+
console.log("bridgeAndCall called successfully");
98106

99107
onCrossChainTransactionSent(_destinationChain, _callAddress, _payload, _extraArgs);
100108
}

0 commit comments

Comments
 (0)