Skip to content

Commit

Permalink
πŸ‘·πŸ» πŸš€ βœ… Add sender to context and perpsMarketSNXV3 to paymaster
Browse files Browse the repository at this point in the history
  • Loading branch information
tommyrharper committed Jul 9, 2024
1 parent 7d5ac41 commit 28014a6
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 11 deletions.
12 changes: 9 additions & 3 deletions script/Deploy.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,13 @@ import {MarginPaymaster} from "src/MarginPaymaster.sol";
contract Setup is Script {
function deploySystem(
address entryPoint,
address smartMarginV3
address smartMarginV3,
address perpsMarketSNXV3
) public returns (address) {
MarginPaymaster marginPaymaster = new MarginPaymaster(
entryPoint,
smartMarginV3
smartMarginV3,
perpsMarketSNXV3
);
return address(marginPaymaster);
}
Expand All @@ -32,7 +34,11 @@ contract DeployBase is Setup, BaseParameters {
uint256 privateKey = vm.envUint("PRIVATE_KEY");
vm.startBroadcast(privateKey);

Setup.deploySystem(CANONICAL_ENTRY_POINT, SMART_MARGIN_V3);
Setup.deploySystem(
CANONICAL_ENTRY_POINT,
SMART_MARGIN_V3,
PERPS_MARKET_PROXY_ANDROMEDA
);

vm.stopBroadcast();
}
Expand Down
17 changes: 12 additions & 5 deletions src/MarginPaymaster.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,35 @@ import {console} from "forge-std/console.sol";
contract MarginPaymaster is IPaymaster {
address public immutable entryPoint;
address public immutable smartMarginV3;
address public immutable perpsMarketSNXV3;

error InvalidEntryPoint();

constructor(address _entryPoint, address _smartMarginV3) {
constructor(
address _entryPoint,
address _smartMarginV3,
address _perpsMarketSNXV3
) {
entryPoint = _entryPoint;
smartMarginV3 = _smartMarginV3;
perpsMarketSNXV3 = _perpsMarketSNXV3;
}

function validatePaymasterUserOp(
UserOperation calldata,
UserOperation calldata userOp,
bytes32,
uint256
) external returns (bytes memory context, uint256 validationData) {
if (msg.sender != entryPoint) revert InvalidEntryPoint();
console.log("validatePaymasterUserOp");
// context = new bytes(0); // passed to the postOp method
context = "yo"; // passed to the postOp method
context = abi.encode(userOp.sender); // passed to the postOp method
validationData = 0; // special value means no validation
}

function postOp(PostOpMode, bytes calldata, uint256) external {
function postOp(PostOpMode, bytes calldata context, uint256) external {
if (msg.sender != entryPoint) revert InvalidEntryPoint();
console.log("postOp");
address sender = abi.decode(context, (address));
console.log("postOp", sender);
}
}
10 changes: 7 additions & 3 deletions test/utils/Bootstrap.sol
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ contract Bootstrap is Test {
BootstrapLocal bootstrap = new BootstrapLocal();
marginPaymasterAddress = bootstrap.init(
address(entryPoint),
address(0),
address(0)
);
marginPaymaster = MarginPaymaster(marginPaymasterAddress);
Expand Down Expand Up @@ -98,11 +99,13 @@ contract Bootstrap is Test {
contract BootstrapLocal is Setup {
function init(
address entryPoint,
address smartMarginV3
address smartMarginV3,
address perpsMarketSNXV3
) public returns (address) {
address marginPaymasterAddress = Setup.deploySystem(
entryPoint,
smartMarginV3
smartMarginV3,
perpsMarketSNXV3
);

return marginPaymasterAddress;
Expand All @@ -126,7 +129,8 @@ contract BootstrapBase is Setup, BaseParameters {
{
address marginPaymasterAddress = Setup.deploySystem(
CANONICAL_ENTRY_POINT,
SMART_MARGIN_V3
SMART_MARGIN_V3,
PERPS_MARKET_PROXY_ANDROMEDA
);

return (
Expand Down

0 comments on commit 28014a6

Please sign in to comment.