Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions contracts/examples/ERC20Verifier.sol
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
pragma solidity 0.8.16;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@iden3/contracts/lib/GenesisUtils.sol";
import "@iden3/contracts/interfaces/ICircuitValidator.sol";
import "@iden3/contracts/verifiers/ZKPVerifier.sol";
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {GenesisUtils} from "@iden3/contracts/lib/GenesisUtils.sol";
import {ICircuitValidator} from "@iden3/contracts/interfaces/ICircuitValidator.sol";
import {ZKPVerifier} from "@iden3/contracts/verifiers/ZKPVerifier.sol";

contract ERC20Verifier is ERC20, ZKPVerifier {
uint64 public constant TRANSFER_REQUEST_ID = 1;
Expand Down
101 changes: 101 additions & 0 deletions contracts/examples/IdentityExample.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.16;

import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import {IState} from "@iden3/contracts/interfaces/IState.sol";
import {ClaimBuilder} from "@iden3/contracts/lib/ClaimBuilder.sol";
import {OnChainIdentity} from "@iden3/contracts/lib/OnChainIdentity.sol";
import {IdentityBase} from "@iden3/contracts/lib/IdentityBase.sol";

// /**
// * @dev Contract managing onchain identity
// */
contract IdentityExample is IdentityBase, OwnableUpgradeable {
using OnChainIdentity for OnChainIdentity.Identity;

// This empty reserved space is put in place to allow future versions
// of the State contract to inherit from other contracts without a risk of
// breaking the storage layout. This is necessary because the parent contracts in the
// future may introduce some storage variables, which are placed before the State
// contract's storage variables.
// (see https://docs.openzeppelin.com/upgrades-plugins/1.x/writing-upgradeable#storage-gaps)
// slither-disable-next-line shadowing-state
// slither-disable-next-line unused-state
uint256[500] private __gap;

function initialize(address _stateContractAddr) public override initializer {
super.initialize(_stateContractAddr);
__Ownable_init();
}

function addClaimAndTransit(uint256[8] calldata claim) public onlyOwner {
addClaim(claim);
transitState();
}

function addClaimHashAndTransit(uint256 hashIndex, uint256 hashValue) public onlyOwner {
addClaimHash(hashIndex, hashValue);
transitState();
}

function revokeClaimAndTransit(uint64 revocationNonce) public onlyOwner {
revokeClaim(revocationNonce);
transitState();
}

/**
* @dev Add claim
* @param claim - claim data
*/
function addClaim(uint256[8] calldata claim) public virtual onlyOwner {
identity.addClaim(claim);
}

/**
* @dev Add claim hash
* @param hashIndex - hash of claim index part
* @param hashValue - hash of claim value part
*/
function addClaimHash(uint256 hashIndex, uint256 hashValue) public virtual onlyOwner {
identity.addClaimHash(hashIndex, hashValue);
}

/**
* @dev Revoke claim using it's revocationNonce
* @param revocationNonce - revocation nonce
*/
function revokeClaim(uint64 revocationNonce) public virtual onlyOwner {
identity.revokeClaim(revocationNonce);
}

/**
* @dev Make state transition
*/
function transitState() public virtual onlyOwner {
identity.transitState();
}

/**
* @dev Calculate IdentityState
* @return IdentityState
*/
function calcIdentityState() public view virtual returns (uint256) {
return identity.calcIdentityState();
}

function newClaimData() public pure virtual returns (ClaimBuilder.ClaimData memory) {
ClaimBuilder.ClaimData memory claimData;
return claimData;
}

/**
* @dev Builds claim
* @param claimData - claim data
* @return binary claim
*/
function buildClaim(
ClaimBuilder.ClaimData calldata claimData
) public pure virtual returns (uint256[8] memory) {
return ClaimBuilder.build(claimData);
}
}
15 changes: 12 additions & 3 deletions contracts/examples/Imports.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.16;

import "@iden3/contracts/lib/Poseidon.sol";
import "@iden3/contracts/state/StateV2.sol";
import "@iden3/contracts/lib/verifierV2.sol";
import{
PoseidonUnit1L,
PoseidonUnit2L,
PoseidonUnit3L,
PoseidonUnit4L,
PoseidonUnit5L,
PoseidonUnit6L,
SpongePoseidon,
PoseidonFacade} from "@iden3/contracts/lib/Poseidon.sol";
import {StateV2} from "@iden3/contracts/state/StateV2.sol";
import {VerifierV2} from "@iden3/contracts/lib/verifierV2.sol";
25 changes: 18 additions & 7 deletions contracts/validators/CredentialAtomicQueryMTPValidator.sol
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
pragma solidity 0.8.16;

import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "@iden3/contracts/lib/GenesisUtils.sol";
import "@iden3/contracts/interfaces/ICircuitValidator.sol";
import "@iden3/contracts/interfaces/IVerifier.sol";
import "@iden3/contracts/interfaces/IState.sol";
import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import {GenesisUtils} from "@iden3/contracts/lib/GenesisUtils.sol";
import {ICircuitValidator} from "@iden3/contracts/interfaces/ICircuitValidator.sol";
import {IVerifier} from "@iden3/contracts/interfaces/IVerifier.sol";
import {IState} from "@iden3/contracts/interfaces/IState.sol";

contract CredentialAtomicQueryMTPValidator is OwnableUpgradeable, ICircuitValidator {
string constant CIRCUIT_ID = "credentialAtomicQueryMTPV2OnChain";
Expand All @@ -15,12 +15,14 @@ contract CredentialAtomicQueryMTPValidator is OwnableUpgradeable, ICircuitValida
IState public state;

uint256 public revocationStateExpirationTime;
uint256 public proofGenerationExpirationTime;

function initialize(
address _verifierContractAddr,
address _stateContractAddr
) public initializer {
revocationStateExpirationTime = 1 hours;
proofGenerationExpirationTime = 1 hours;
verifier = IVerifier(_verifierContractAddr);
state = IState(_stateContractAddr);
__Ownable_init();
Expand All @@ -30,6 +32,10 @@ contract CredentialAtomicQueryMTPValidator is OwnableUpgradeable, ICircuitValida
revocationStateExpirationTime = expirationTime;
}

function setProofGenerationExpirationTime(uint256 expirationTime) public virtual onlyOwner {
proofGenerationExpirationTime = expirationTime;
}

function getCircuitId() external pure returns (string memory id) {
return CIRCUIT_ID;
}
Expand All @@ -55,6 +61,7 @@ contract CredentialAtomicQueryMTPValidator is OwnableUpgradeable, ICircuitValida
uint256 issuerId = inputs[6];
uint256 issuerClaimIdenState = inputs[7];
uint256 issuerClaimNonRevState = inputs[9];
uint256 proofGenerationTimestamp = inputs[10];

IState.GistRootInfo memory rootInfo = state.getGISTRootInfo(gistRoot);

Expand Down Expand Up @@ -101,9 +108,13 @@ contract CredentialAtomicQueryMTPValidator is OwnableUpgradeable, ICircuitValida
) {
revert("Non-Revocation state of Issuer expired");
}

if (block.timestamp - proofGenerationTimestamp > proofGenerationExpirationTime) {
revert("Generated proof is outdated");
}
}
}

return (true);
}
}
}
26 changes: 19 additions & 7 deletions contracts/validators/CredentialAtomicQuerySigValidator.sol
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
pragma solidity 0.8.16;

import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import "@iden3/contracts/lib/GenesisUtils.sol";
import "@iden3/contracts/interfaces/ICircuitValidator.sol";
import "@iden3/contracts/interfaces/IVerifier.sol";
import "@iden3/contracts/interfaces/IState.sol";
import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import {GenesisUtils} from "@iden3/contracts/lib/GenesisUtils.sol";
import {ICircuitValidator} from "@iden3/contracts/interfaces/ICircuitValidator.sol";
import {IVerifier} from "@iden3/contracts/interfaces/IVerifier.sol";
import {IState} from "@iden3/contracts/interfaces/IState.sol";

contract CredentialAtomicQuerySigValidator is OwnableUpgradeable, ICircuitValidator {
string constant CIRCUIT_ID = "credentialAtomicQuerySigV2OnChain";
Expand All @@ -15,12 +15,14 @@ contract CredentialAtomicQuerySigValidator is OwnableUpgradeable, ICircuitValida
IState public state;

uint256 public revocationStateExpirationTime;
uint256 public proofGenerationExpirationTime;

function initialize(
address _verifierContractAddr,
address _stateContractAddr
) public initializer {
revocationStateExpirationTime = 1 hours;
proofGenerationExpirationTime = 1 hours;
verifier = IVerifier(_verifierContractAddr);
state = IState(_stateContractAddr);
__Ownable_init();
Expand All @@ -30,6 +32,10 @@ contract CredentialAtomicQuerySigValidator is OwnableUpgradeable, ICircuitValida
revocationStateExpirationTime = expirationTime;
}

function setProofGenerationExpirationTime(uint256 expirationTime) public virtual onlyOwner {
proofGenerationExpirationTime = expirationTime;
}

function getCircuitId() external pure returns (string memory id) {
return CIRCUIT_ID;
}
Expand All @@ -53,6 +59,7 @@ contract CredentialAtomicQuerySigValidator is OwnableUpgradeable, ICircuitValida
uint256 gistRoot = inputs[6];
uint256 issuerId = inputs[7];
uint256 issuerClaimNonRevState = inputs[9];
uint256 proofGenerationTimestamp = inputs[10];

IState.GistRootInfo memory rootInfo = state.getGISTRootInfo(gistRoot);

Expand Down Expand Up @@ -99,8 +106,13 @@ contract CredentialAtomicQuerySigValidator is OwnableUpgradeable, ICircuitValida
) {
revert("Non-Revocation state of Issuer expired");
}

if (block.timestamp - proofGenerationTimestamp > proofGenerationExpirationTime) {
revert("Generated proof is outdated");
}

}
}
return (true);
}
}
}
14 changes: 7 additions & 7 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
"typescript": "^4.6.4"
},
"dependencies": {
"@iden3/contracts": "^1.0.0",
"@iden3/contracts": "^1.1.0",
"@openzeppelin/contracts": "^4.6.0",
"@openzeppelin/contracts-upgradeable": "^4.8.3",
"braces": ">=3.0.2",
Expand Down
5 changes: 5 additions & 0 deletions test/helpers/ChainIdDefTypeMap.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
export const chainIdDefaultIdTypeMap = new Map()
.set(31337, '0x0212') // hardhat
.set(80001, '0x0212') // polygon mumbai
.set(137, '0x0211'); // polygon main

Loading