Skip to content

Commit

Permalink
Add native safe recovery module
Browse files Browse the repository at this point in the history
  • Loading branch information
JohnGuilding committed Aug 7, 2024
1 parent dd03a21 commit cc5c478
Show file tree
Hide file tree
Showing 6 changed files with 944 additions and 2 deletions.
4 changes: 2 additions & 2 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ ignored_warnings_from = [
[rpc_endpoints]
sepolia = "${BASE_SEPOLIA_RPC_URL}"

# [etherscan]
# sepolia = { key = "${BASE_SCAN_API_KEY}" }
[etherscan]
sepolia = { key = "${BASE_SCAN_API_KEY}" }

[fmt]
bracket_spacing = true
Expand Down
42 changes: 42 additions & 0 deletions script/DeploySafeNativeRecovery.s.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.25;

import { Script } from "forge-std/Script.sol";
import { console } from "forge-std/console.sol";
import { SafeEmailRecoveryModule } from "src/modules/SafeEmailRecoveryModule.sol";
import { Verifier } from "ether-email-auth/packages/contracts/src/utils/Verifier.sol";
import { ECDSAOwnedDKIMRegistry } from
"ether-email-auth/packages/contracts/src/utils/ECDSAOwnedDKIMRegistry.sol";
import { EmailAuth } from "ether-email-auth/packages/contracts/src/EmailAuth.sol";

contract DeploySafeNativeRecovery_Script is Script {
function run() public {
vm.startBroadcast(vm.envUint("PRIVATE_KEY"));
address verifier = vm.envOr("VERIFIER", address(0));
address dkimRegistry = vm.envOr("DKIM_REGISTRY", address(0));
address dkimRegistrySigner = vm.envOr("SIGNER", address(0));
address emailAuthImpl = vm.envOr("EMAIL_AUTH_IMPL", address(0));

if (verifier == address(0)) {
verifier = address(new Verifier());
console.log("Deployed Verifier at", verifier);
}

if (dkimRegistry == address(0)) {
require(dkimRegistrySigner != address(0), "DKIM_REGISTRY_SIGNER is required");
dkimRegistry = address(new ECDSAOwnedDKIMRegistry(dkimRegistrySigner));
console.log("Deployed DKIM Registry at", dkimRegistry);
}

if (emailAuthImpl == address(0)) {
emailAuthImpl = address(new EmailAuth());
console.log("Deployed Email Auth at", emailAuthImpl);
}

address module = address(new SafeEmailRecoveryModule(verifier, emailAuthImpl, dkimRegistry));

console.log("Deployed Email Recovery Module at ", vm.toString(module));

vm.stopBroadcast();
}
}
9 changes: 9 additions & 0 deletions src/interfaces/ISafe.sol
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,13 @@ interface ISafe {
function getOwners() external view returns (address[] memory);
function setFallbackHandler(address handler) external;
function setGuard(address guard) external;
function execTransactionFromModule(
address to,
uint256 value,
bytes memory data,
uint8 operation
)
external
returns (bool success);
function isModuleEnabled(address module) external view returns (bool);
}
Loading

0 comments on commit cc5c478

Please sign in to comment.