Skip to content

Commit

Permalink
Merge pull request #9 from zkemail/feat/sync-email-auth
Browse files Browse the repository at this point in the history
Feat/sync email auth
  • Loading branch information
JohnGuilding committed Jun 25, 2024
2 parents d4c0044 + 4bddea9 commit b4a02cd
Show file tree
Hide file tree
Showing 27 changed files with 956 additions and 1,081 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ env:

jobs:
build:
uses: "rhinestonewtf/reusable-workflows/.github/workflows/forge-build.yaml@main"
uses: "rhinestonewtf/reusable-workflows/.github/workflows/forge-build.yaml@702a00c1cc825d064acdf79f9da56250081727aa"

test:
needs: ["build"]
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ Account recovery has traditionally been one of the most complex UX hurdles that

```shell
pnpm install
forge install
```

### Build
Expand Down
14 changes: 4 additions & 10 deletions foundry.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,12 @@ emv_version = "paris"
src = "src"
out = "out"
script = "script"
libs = [
"node_modules",
"lib",
]
libs = ["node_modules", "lib"]
fs_permissions = [
{ access = "read", path = "out-optimized" },
{ access = "read-write", path = "gas_calculations" },
]
allow_paths = [
"*",
"/",
]
allow_paths = ["*", "/"]
ignored_warnings_from = [
"node_modules",
"node_modules/@rhinestone/modulekit/src/**/*.sol",
Expand All @@ -24,8 +18,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
2 changes: 1 addition & 1 deletion lib/ether-email-auth
Submodule ether-email-auth updated 91 files
+3 −1 .github/workflows/build-test-fmt.yml
+3 −1 .github/workflows/unit-tests.yml
+3 −0 .gitignore
+376 −362 Cargo.lock
+1 −1 Cargo.toml
+155 −2 README.md
+42 −78 Relayer.Dockerfile
+25 −8 packages/circuits/README.md
+16 −16 packages/circuits/helpers/email_auth.ts
+26 −24 packages/circuits/helpers/recipient.ts
+4 −4 packages/circuits/package.json
+1 −1 packages/circuits/src/email_auth.circom
+11 −12 packages/circuits/src/email_auth_template.circom
+1 −1 packages/circuits/src/utils/account_salt.circom
+4 −26 packages/circuits/src/utils/bytes2ints.circom
+7 −4 packages/circuits/src/utils/constants.circom
+2 −16 packages/circuits/src/utils/digit2int.circom
+1 −2 packages/circuits/src/utils/email_addr_commit.circom
+1 −11 packages/circuits/src/utils/email_nullifier.circom
+1 −13 packages/circuits/src/utils/hash_sign.circom
+1 −2 packages/circuits/src/utils/hex2int.circom
+306 −208 packages/circuits/tests/email_auth.test.ts
+87 −0 packages/circuits/tests/emails/email_auth_test7.eml
+160 −146 packages/circuits/tests/invitation_code_regex.test.ts
+261 −178 packages/circuits/tests/recipient_enabled.test.ts
+5 −0 packages/contracts/.env.sample
+298 −8 packages/contracts/README.md
+13 −1 packages/contracts/foundry.toml
+7 −4 packages/contracts/package.json
+1 −0 packages/contracts/remappings.txt
+121 −39 packages/contracts/src/EmailAccountRecovery.sol
+73 −69 packages/contracts/src/EmailAuth.sol
+294 −465 packages/contracts/src/utils/Groth16Verifier.sol
+66 −0 packages/contracts/test/ComputeCreate2Address.t.sol
+382 −191 packages/contracts/test/EmailAccountRecovery.t.sol
+336 −0 packages/contracts/test/EmailAccountRecoveryForRejectRecovery.t.sol
+57 −90 packages/contracts/test/EmailAuth.t.sol
+71 −0 packages/contracts/test/EmailAuthWithUserOverrideableDkim.t.sol
+83 −34 packages/contracts/test/Integration.t.sol
+88 −0 packages/contracts/test/emails/300/accept.eml
+88 −0 packages/contracts/test/emails/300/recovery.eml
+88 −0 packages/contracts/test/emails/31337/accept.eml
+88 −0 packages/contracts/test/emails/31337/recovery.eml
+0 −88 packages/contracts/test/emails/accept.eml
+0 −88 packages/contracts/test/emails/recovery.eml
+44 −9 packages/contracts/test/helpers/DeploymentHelper.sol
+183 −0 packages/contracts/test/helpers/RecoveryController.sol
+19 −145 packages/contracts/test/helpers/SimpleWallet.sol
+2 −5 packages/contracts/test/helpers/StructHelper.sol
+1 −1 packages/prover/Dockerfile
+1 −1 packages/prover/local_setup.sh
+1 −1 packages/prover/modal_server.py
+2 −7 packages/relayer/.env.example
+1 −1 packages/relayer/Cargo.toml
+221 −0 packages/relayer/README.md
+413 −0 packages/relayer/eml_templates/acknowledgement.html
+443 −339 packages/relayer/src/abis/ecdsa_owned_dkim_registry.rs
+262 −11 packages/relayer/src/abis/email_account_recovery.rs
+1,727 −910 packages/relayer/src/abis/email_auth.rs
+114 −4 packages/relayer/src/chain.rs
+4 −34 packages/relayer/src/config.rs
+43 −42 packages/relayer/src/core.rs
+31 −27 packages/relayer/src/database.rs
+16 −234 packages/relayer/src/lib.rs
+1 −2 packages/relayer/src/main.rs
+17 −4 packages/relayer/src/modules/dkim.rs
+0 −201 packages/relayer/src/modules/email_client/imap_client.rs
+0 −9 packages/relayer/src/modules/email_client/mod.rs
+0 −173 packages/relayer/src/modules/email_client/smtp_client.rs
+0 −24 packages/relayer/src/modules/email_client/utils.rs
+0 −80 packages/relayer/src/modules/emails_pool.rs
+144 −52 packages/relayer/src/modules/mail.rs
+2 −4 packages/relayer/src/modules/mod.rs
+291 −126 packages/relayer/src/modules/web_server/rest_api.rs
+19 −39 packages/relayer/src/modules/web_server/server.rs
+8 −0 packages/relayer/src/permitted_wallets.json
+0 −58 packages/relayer/src/utils/logger.rs
+0 −2 packages/relayer/src/utils/mod.rs
+2 −11 packages/relayer/src/utils/strings.rs
+1 −0 packages/relayer/src/utils/utils.rs
+0 −5 packages/utils/.gitignore
+0 −50 packages/utils/Cargo.toml
+0 −18 packages/utils/package.json
+0 −183 packages/utils/src/circuit.rs
+0 −221 packages/utils/src/converters.rs
+0 −298 packages/utils/src/cryptos.rs
+0 −58 packages/utils/src/lib.rs
+0 −282 packages/utils/src/parse_email.rs
+0 −243 packages/utils/src/regex.rs
+0 −9 packages/utils/src/statics.rs
+1,284 −935 yarn.lock
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,11 @@
"test:optimized": "pnpm run build:optimized && FOUNDRY_PROFILE=test-optimized forge test"
},
"dependencies": {
"@matterlabs/zksync-contracts": "^0.6.1",
"@openzeppelin/contracts-upgradeable": "v5.0.1",
"@rhinestone/modulekit": "v0.4.2",
"@zk-email/contracts": "v6.0.3",
"erc7579-implementation": "https://github.com/erc7579/erc7579-implementation.git",
"solidity-stringutils": "https://github.com/Arachnid/solidity-stringutils.git"
},
"files": [
Expand Down
833 changes: 380 additions & 453 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion remappings.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,6 @@ solarray/=node_modules/solarray/src/

ether-email-auth/=lib/ether-email-auth/
@zk-email/contracts/=node_modules/@zk-email/contracts/
solidity-stringutils/=node_modules/solidity-stringutils/
solidity-stringutils/=node_modules/solidity-stringutils/
@matterlabs/=node_modules/@matterlabs
erc7579-implementation/=node_modules/erc7579-implementation/
60 changes: 25 additions & 35 deletions script/Deploy7579Controller.s.sol
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.25;

import {Script} from "forge-std/Script.sol";
import {console} from "forge-std/console.sol";
import {EmailRecoverySubjectHandler} from "src/handlers/EmailRecoverySubjectHandler.sol";
import {EmailRecoveryManager} from "src/EmailRecoveryManager.sol";
import {EmailRecoveryModule} from "src/modules/EmailRecoveryModule.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";
import {EmailRecoveryFactory} from "src/EmailRecoveryFactory.sol";
import { Script } from "forge-std/Script.sol";
import { console } from "forge-std/console.sol";
import { EmailRecoverySubjectHandler } from "src/handlers/EmailRecoverySubjectHandler.sol";
import { EmailRecoveryManager } from "src/EmailRecoveryManager.sol";
import { EmailRecoveryModule } from "src/modules/EmailRecoveryModule.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";
import { EmailRecoveryFactory } from "src/EmailRecoveryFactory.sol";

contract Deploy7579ControllerScript is Script {
function run() public {
Expand All @@ -21,53 +22,42 @@ contract Deploy7579ControllerScript is Script {

if (verifier == address(0)) {
verifier = address(new Verifier());
vm.setEnv("VERIFIER", vm.toString(verifier));
// vm.setEnv("VERIFIER", vm.toString(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)
);
vm.setEnv("DKIM_REGISTRY", vm.toString(dkimRegistry));
require(dkimRegistrySigner != address(0), "DKIM_REGISTRY_SIGNER is required");
dkimRegistry = address(new ECDSAOwnedDKIMRegistry(dkimRegistrySigner));
// vm.setEnv("DKIM_REGISTRY", vm.toString(dkimRegistry));
console.log("Deployed DKIM Registry at", dkimRegistry);
}

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

EmailRecoverySubjectHandler emailRecoveryHandler = new EmailRecoverySubjectHandler();
vm.setEnv(
"RECOVERY_HANDLER",
vm.toString(address(emailRecoveryHandler))
);
address _factory = vm.envOr("FACTORY", address(0));
// vm.setEnv(
// "RECOVERY_HANDLER",
// vm.toString(address(emailRecoveryHandler))
// );
address _factory = vm.envOr("RECOVERY_FACTORY", address(0));
if (_factory == address(0)) {
_factory = address(new EmailRecoveryFactory());
vm.setEnv("FACTORY", vm.toString(_factory));
// vm.setEnv("RECOVERY_FACTORY", vm.toString(_factory));
console.log("Deployed Email Recovery Factory at", _factory);
}
EmailRecoveryFactory factory = EmailRecoveryFactory(_factory);
(address manager, address module) = factory.deployModuleAndManager(
verifier,
dkimRegistry,
emailAuthImpl,
address(emailRecoveryHandler)
verifier, dkimRegistry, emailAuthImpl, address(emailRecoveryHandler)
);
vm.setEnv("RECOVERY_MANAGER", vm.toString(manager));
vm.setEnv("RECOVERY_MODULE", vm.toString(module));
// vm.setEnv("RECOVERY_MANAGER", vm.toString(manager));
// vm.setEnv("RECOVERY_MODULE", vm.toString(module));

console.log(
"Deployed Email Recovery Handler at",
address(emailRecoveryHandler)
);
console.log("Deployed Email Recovery Handler at", address(emailRecoveryHandler));
console.log("Deployed Email Recovery Manager at", vm.toString(manager));
console.log("Deployed Email Recovery Module at", vm.toString(module));
vm.stopBroadcast();
Expand Down
Loading

0 comments on commit b4a02cd

Please sign in to comment.