Skip to content

Commit

Permalink
fix: dependencies and wallet utils
Browse files Browse the repository at this point in the history
  • Loading branch information
ankurdubey521 committed Dec 4, 2023
1 parent b6574b8 commit 30da23c
Show file tree
Hide file tree
Showing 11 changed files with 105 additions and 247 deletions.
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"solidity.compileUsingRemoteVersion": "v0.8.21+commit.d9974bed"
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,12 @@ interface ISessionKeyManagerModule {
bytes32 merkleRoot;
}

/**
* @dev Emitted when the merkle root is updated for the Smart Account
* It happens when there's a need to add\remove\replace session (leaves) in the Merkle Tree
*/
event MerkleRootUpdated(address smartAccount, bytes32 newRoot);

/**
* @dev validates that Session Key + parameters are enabled
* by being included into the merkle tree
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ pragma solidity ^0.8.20;
* @author Ankur Dubey - <[email protected]>
* @author Fil Makarov - <[email protected]>
*/
interface ISessionKeyManagerModuleStatefull {
interface ISessionKeyManagerModuleStateful {
struct SessionData {
uint48 validUntil;
uint48 validAfter;
Expand Down

This file was deleted.

34 changes: 15 additions & 19 deletions contracts/smart-account/modules/SessionKeyManagerModule.sol
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import {ISessionValidationModule} from "../interfaces/modules/ISessionValidation
import {ISessionKeyManagerModule} from "../interfaces/modules/ISessionKeyManagerModule.sol";
import {IAuthorizationModule} from "../interfaces/IAuthorizationModule.sol";
import {ISignatureValidator} from "../interfaces/ISignatureValidator.sol";
import "hardhat/console.sol";

/**
* @title Session Key Manager module for Biconomy Modular Smart Accounts.
Expand All @@ -36,16 +35,14 @@ contract SessionKeyManager is
/// @inheritdoc ISessionKeyManagerModule
function setMerkleRoot(bytes32 _merkleRoot) external override {
_userSessions[msg.sender].merkleRoot = _merkleRoot;
// TODO:should we add an event here? which emits the new merkle root
emit MerkleRootUpdated(msg.sender, _merkleRoot);
}

/// @inheritdoc IAuthorizationModule
function validateUserOp(
UserOperation calldata userOp,
bytes32 userOpHash
) external virtual returns (uint256 rv) {
uint256 gas = gasleft();

) external virtual returns (uint256) {
(bytes memory moduleSignature, ) = abi.decode(
userOp.signature,
(bytes, address)
Expand All @@ -71,20 +68,19 @@ contract SessionKeyManager is
merkleProof
);

rv = _packValidationData(
//_packValidationData expects true if sig validation has failed, false otherwise
!ISessionValidationModule(sessionValidationModule)
.validateSessionUserOp(
userOp,
userOpHash,
sessionKeyData,
sessionKeySignature
),
validUntil,
validAfter
);

console.log("Merkle Tree Validation Gas: ", gas - gasleft());
return
_packValidationData(
//_packValidationData expects true if sig validation has failed, false otherwise
!ISessionValidationModule(sessionValidationModule)
.validateSessionUserOp(
userOp,
userOpHash,
sessionKeyData,
sessionKeySignature
),
validUntil,
validAfter
);
}

/// @inheritdoc ISessionKeyManagerModule
Expand Down
37 changes: 16 additions & 21 deletions contracts/smart-account/modules/SessionKeyManagerStateful.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,9 @@ import {BaseAuthorizationModule} from "./BaseAuthorizationModule.sol";
import {_packValidationData} from "@account-abstraction/contracts/core/Helpers.sol";
import {UserOperation} from "@account-abstraction/contracts/interfaces/UserOperation.sol";
import {ISessionValidationModule} from "../interfaces/modules/ISessionValidationModule.sol";
import {ISessionKeyManagerModuleStatefull} from "../interfaces/modules/ISessionKeyManagerModuleStatefull.sol";
import {ISessionKeyManagerModuleStateful} from "../interfaces/modules/ISessionKeyManagerModuleStateful.sol";
import {IAuthorizationModule} from "../interfaces/IAuthorizationModule.sol";
import {ISignatureValidator} from "../interfaces/ISignatureValidator.sol";
import "hardhat/console.sol";

/**
* @title Session Key Manager module for Biconomy Modular Smart Accounts.
Expand All @@ -17,9 +16,9 @@ import "hardhat/console.sol";
* @author Fil Makarov - <[email protected]>
*/

contract SessionKeyManagerStatefull is
contract SessionKeyManagerStateful is
BaseAuthorizationModule,
ISessionKeyManagerModuleStatefull
ISessionKeyManagerModuleStateful
{
// Inverting the order of the mapping seems to make it non-compliant with the bundlers
mapping(bytes32 sessionDataDigest => mapping(address sa => SessionData data))
Expand All @@ -30,8 +29,6 @@ contract SessionKeyManagerStatefull is
UserOperation calldata userOp,
bytes32 userOpHash
) external virtual returns (uint256 rv) {
uint256 gas = gasleft();

(bytes memory moduleSignature, ) = abi.decode(
userOp.signature,
(bytes, address)
Expand All @@ -58,23 +55,9 @@ contract SessionKeyManagerStatefull is
sessionData.validUntil,
sessionData.validAfter
);

console.log("Statefull Validation Gas: ", gas - gasleft());
}

/// @inheritdoc ISessionKeyManagerModuleStatefull
function validateSessionKey(
address smartAccount,
bytes32 sessionKeyDataDigest
) public virtual override {
require(
enabledSessions[sessionKeyDataDigest][smartAccount]
.sessionValidationModule != address(0),
"SessionKeyManager: session key is not enabled"
);
}

/// @inheritdoc ISessionKeyManagerModuleStatefull
/// @inheritdoc ISessionKeyManagerModuleStateful
function enableSessionKey(
SessionData calldata sessionData
) external override {
Expand All @@ -89,6 +72,18 @@ contract SessionKeyManagerStatefull is
enabledSessions[sessionDataDigest][msg.sender] = sessionData;
}

/// @inheritdoc ISessionKeyManagerModuleStateful
function validateSessionKey(
address smartAccount,
bytes32 sessionKeyDataDigest
) public virtual override {
require(
enabledSessions[sessionKeyDataDigest][smartAccount]
.sessionValidationModule != address(0),
"SKM: Session Key is not enabled"
);
}

/// @inheritdoc ISignatureValidator
function isValidSignature(
bytes32 _dataHash,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

/* solhint-disable function-max-lines */

import {BaseAuthorizationModule} from "./BaseAuthorizationModule.sol";
import {_packValidationData} from "@account-abstraction/contracts/core/Helpers.sol";
import {UserOperation} from "@account-abstraction/contracts/interfaces/UserOperation.sol";
import {ISessionValidationModule} from "../interfaces/modules/ISessionValidationModule.sol";
import {ISessionKeyManagerModuleHybrid} from "../interfaces/modules/ISessionKeyManagerModuleHybrid.sol";
import {IAuthorizationModule} from "../interfaces/IAuthorizationModule.sol";
import {ISignatureValidator, EIP1271_MAGIC_VALUE} from "../interfaces/ISignatureValidator.sol";
import "hardhat/console.sol";

/**
* @title Session Key Manager module for Biconomy Modular Smart Accounts.
Expand All @@ -29,8 +30,6 @@ contract SessionKeyManagerHybrid is
UserOperation calldata userOp,
bytes32 userOpHash
) external virtual returns (uint256 rv) {
uint256 gas = gasleft();

(bytes memory moduleSignature, ) = abi.decode(
userOp.signature,
(bytes, address)
Expand Down Expand Up @@ -116,8 +115,6 @@ contract SessionKeyManagerHybrid is
sessionData.validAfter
);
}

console.log("Hybrid Validation Gas: ", gas - gasleft());
}

/// @inheritdoc ISessionKeyManagerModuleHybrid
Expand Down Expand Up @@ -217,7 +214,7 @@ contract SessionKeyManagerHybrid is
require(
enabledSessions[sessionKeyDataDigest][smartAccount]
.sessionValidationModule != address(0),
"SessionKeyManager: session key is not enabled"
"SKM: Session key is not enabled"
);
}

Expand Down
Loading

0 comments on commit 30da23c

Please sign in to comment.