diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..7e03170 --- /dev/null +++ b/.env.example @@ -0,0 +1,8 @@ +INITIAL_SIGNER= +ETH_SEPOLIA_RPC= +BASE_SEPOLIA_RPC= +ETHERSCAN_API_KEY= +BASESCAN_API_KEY= +BASE_SEPOLIA_ACCOUNT= +SEPOLIA_ACCOUNT= +LOCAL_ACCOUNT= \ No newline at end of file diff --git a/.gitignore b/.gitignore index bdeb8b2..ce3d6c4 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ out/ !/broadcast /broadcast/*/31337/ /broadcast/**/dry-run/ +/broadcast # Docs docs/ diff --git a/Makefile b/Makefile index 80ff61a..78cb058 100644 --- a/Makefile +++ b/Makefile @@ -34,7 +34,13 @@ NETWORK_ARGS := --rpc-url http://localhost:8545 --account $(LOCAL_ACCOUNT) --bro ifeq ($(findstring --network sepolia,$(ARGS)),--network sepolia) NETWORK_ARGS := --rpc-url $(SEPOLIA_RPC_URL) --account $(SEPOLIA_ACCOUNT) --broadcast --verify --etherscan-api-key $(ETHERSCAN_API_KEY) -vvvv +else ifeq ($(findstring --network base-sepolia,$(ARGS)),--network base-sepolia) + NETWORK_ARGS := --rpc-url $(BASE_SEPOLIA_RPC_URL) --account $(BASE_SEPOLIA_ACCOUNT) --broadcast --verify --etherscan-api-key $(BASESCAN_API_KEY) -vvvv endif deploy-sepolia: @forge script script/DeployProofOfPassportRegister.s.sol:DeployProofOfPassportRegister $(NETWORK_ARGS) + +deploy-base-sepolia: + @forge script script/DeployProofOfPassportRegister.s.sol:DeployProofOfPassportRegister $(NETWORK_ARGS) + diff --git a/foundry.toml b/foundry.toml index 4392a71..cf06a6d 100644 --- a/foundry.toml +++ b/foundry.toml @@ -1,6 +1,7 @@ [profile.default] src = "src" out = "out" +solc = "0.8.20" libs = ["lib"] remappings = [ '@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/', diff --git a/script/DeployProofOfPassportRegister.s.sol b/script/DeployProofOfPassportRegister.s.sol index 417006e..b94dbec 100644 --- a/script/DeployProofOfPassportRegister.s.sol +++ b/script/DeployProofOfPassportRegister.s.sol @@ -11,7 +11,7 @@ contract DeployProofOfPassportRegister is Script, CodeConstants { HelperConfig helperConfig = new HelperConfig(); HelperConfig.NetworkConfig memory config = helperConfig.getConfig(); - vm.startBroadcast(config.deployerKey); + vm.startBroadcast(); ProofOfPassportRegister register = new ProofOfPassportRegister( config.signatureAlgorithms, config.verifiers, config.nullifiersIndexesInPubSigArray, config.signers ); diff --git a/script/HelperConfig.s.sol b/script/HelperConfig.s.sol index 70513c3..0b52269 100644 --- a/script/HelperConfig.s.sol +++ b/script/HelperConfig.s.sol @@ -3,10 +3,13 @@ pragma solidity ^0.8.20; import {Script, console} from "forge-std/Script.sol"; import {VerifierProveRSA65537SHA256} from "../src/verifiers/prove/Verifier_prove_rsa_65537_sha256.sol"; +import {VerifierProveRSA65537SHA1} from "../src/verifiers/prove/Verifier_prove_rsa_65537_sha1.sol"; +import {VerifierProveRSAPSS65537SHA256} from "../src/verifiers/prove/Verifier_prove_rsapss_65537_sha256.sol"; import {IProofOfPassportRegister} from "../src/interfaces/IProofOfPassportRegister.sol"; abstract contract CodeConstants { uint256 public constant MAINNET_ETH_CHAIN_ID = 1; + uint256 public constant BASE_SEPOLIA_CHAIN_ID = 84532; uint256 public constant ETH_SEPOLIA_CHAIN_ID = 11155111; uint256 public constant LOCAL_CHAIN_ID = 31337; @@ -22,9 +25,6 @@ abstract contract CodeConstants { address[] public initialVerifiers; uint256[] public initialNullifiersIndexesInPubSigArray; address[] public initialSigners; - - uint256 public DEFAULT_ANVIL_KEY = 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80; - address public DEFAULT_ANVIL_ADDRESS = 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266; } contract HelperConfig is CodeConstants, Script { @@ -35,21 +35,15 @@ contract HelperConfig is CodeConstants, Script { address[] verifiers; uint256[] nullifiersIndexesInPubSigArray; address[] signers; - uint256 deployerKey; - } - - NetworkConfig public networkConfig; - mapping(uint256 => NetworkConfig) public networkConfigs; - - constructor() { - networkConfigs[LOCAL_CHAIN_ID] = getOrCreateAnvilEthConfig(); } function getConfigByChainId(uint256 chainId) public returns (NetworkConfig memory) { - if (networkConfig.verifiers.length > 0 && networkConfigs[chainId].verifiers[0] != address(0)) { - return networkConfigs[chainId]; - } else if (chainId == LOCAL_CHAIN_ID) { + if (chainId == LOCAL_CHAIN_ID) { return getOrCreateAnvilEthConfig(); + } else if (chainId == ETH_SEPOLIA_CHAIN_ID) { + return getOrCreateSepoliaConfig(); + } else if (chainId == BASE_SEPOLIA_CHAIN_ID) { + return getOrCreateSepoliaConfig(); } else { revert HelperConfig__InvalidChainId(); } @@ -60,11 +54,6 @@ contract HelperConfig is CodeConstants, Script { } function getOrCreateAnvilEthConfig() public returns (NetworkConfig memory) { - // Check to see if we set an active network config - if (networkConfig.verifiers.length > 0 && networkConfig.verifiers[0] != address(0)) { - return networkConfig; - } - initialSignatureAlgorithms.push(SIGNATURE_ALGORITHM_RSA_65537_SHA256); // Get Signer @@ -80,14 +69,41 @@ contract HelperConfig is CodeConstants, Script { initialVerifiers.push(address(verifierProveRSA65537SHA256)); - networkConfig = NetworkConfig({ + return NetworkConfig({ signatureAlgorithms: initialSignatureAlgorithms, verifiers: initialVerifiers, nullifiersIndexesInPubSigArray: initialNullifiersIndexesInPubSigArray, - signers: initialSigners, - deployerKey: DEFAULT_ANVIL_KEY + signers: initialSigners }); + } + + function getOrCreateSepoliaConfig() public returns (NetworkConfig memory) { + vm.startBroadcast(); + VerifierProveRSA65537SHA256 verifierProveRSA65537SHA256 = new VerifierProveRSA65537SHA256(); + VerifierProveRSA65537SHA1 verifierProveRSA65537SHA1 = new VerifierProveRSA65537SHA1(); + VerifierProveRSAPSS65537SHA256 verifierProveRSA65537PSSSHA256 = new VerifierProveRSAPSS65537SHA256(); + vm.stopBroadcast(); + + initialSignatureAlgorithms.push(SIGNATURE_ALGORITHM_RSA_65537_SHA256); + initialSignatureAlgorithms.push(SIGNATURE_ALGORITHM_RSA_65537_SHA1); + initialSignatureAlgorithms.push(SIGNATURE_ALGORITHM_RSA_PSS_65537_SHA256); + + initialVerifiers.push(address(verifierProveRSA65537SHA256)); + initialVerifiers.push(address(verifierProveRSA65537SHA1)); + initialVerifiers.push(address(verifierProveRSA65537PSSSHA256)); + + initialNullifiersIndexesInPubSigArray.push(NULLIFIER_INDEX_IN_PUB_SIGNAL); + initialNullifiersIndexesInPubSigArray.push(NULLIFIER_INDEX_IN_PUB_SIGNAL); + initialNullifiersIndexesInPubSigArray.push(NULLIFIER_INDEX_IN_PUB_SIGNAL); + + address INITIAL_SIGNER = vm.envAddress("INITIAL_SIGNER"); + initialSigners.push(INITIAL_SIGNER); - return networkConfig; + return NetworkConfig({ + signatureAlgorithms: initialSignatureAlgorithms, + verifiers: initialVerifiers, + nullifiersIndexesInPubSigArray: initialNullifiersIndexesInPubSigArray, + signers: initialSigners + }); } } diff --git a/test/unit/TestProofOfPassportRegister.t.sol b/test/unit/TestProofOfPassportRegister.t.sol index e846174..706730e 100644 --- a/test/unit/TestProofOfPassportRegister.t.sol +++ b/test/unit/TestProofOfPassportRegister.t.sol @@ -71,17 +71,13 @@ contract TestProofOfPassportRegister is Test, Script, CodeConstants { address verifier = proofOfPassportRegister.getVerifier(SIGNATURE_ALGORITHM_RSA_65537_SHA256); uint256 nullifierIndex = proofOfPassportRegister.getNullifierIndex(SIGNATURE_ALGORITHM_RSA_65537_SHA256); uint256 signatureAlgorithmIndexInPubSignals = proofOfPassportRegister.SIGNATURE_ALGORITHM_INDEX_IN_PUB_SIGNALS(); - address owner = proofOfPassportRegister.owner(); + // address owner = proofOfPassportRegister.owner(); assertEq(isSigner, true); - // change those to test against the deployed values + // TODO: change this to test against the deployed values assertNotEq(verifier, address(0)); assertEq(nullifierIndex, NULLIFIER_INDEX_IN_PUB_SIGNAL); assertEq(signatureAlgorithmIndexInPubSignals, SIGNATURE_ALGORITHM_INDEX_IN_PUB_SIGNALS); - - if (block.chainid == LOCAL_CHAIN_ID) { - assertEq(owner, DEFAULT_ANVIL_ADDRESS); - } } /*//////////////////////////////////////////////////////////////