Skip to content

Commit

Permalink
Interface for ISWTRProxy.sol added (#5)
Browse files Browse the repository at this point in the history
* interface added

* interface moved to right folder

* missing function interface added

* new contract deployed

---------

Co-authored-by: Lesther Caballero <[email protected]>
  • Loading branch information
itslesther and Lesther Caballero authored Jul 2, 2024
1 parent 46c9c91 commit 2ac01a5
Show file tree
Hide file tree
Showing 9 changed files with 185 additions and 93 deletions.
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ It's designed for managing issuer records and verifying user compliance based on

- `addIssuersRecord(string[] memory name, uint32[] memory version, address[] memory issuerAddress)`: Adds multiple issuer records.
- `removeIssuerRecord(string memory name, uint32 version)`: Removes an issuer record.
- `function getIssuerAddressesByNameAndVersions(`: Get list of Issuer addresses by their name and versions
- ` function getIssuerRecordByAddress(address issuerAddress)`: Gets the issuer record by its address.
- `getIssuerAddressesByNameAndVersions(string memory name, uint32[] memory version)`: Get list of Issuer addresses by their name and versions
- `updateIssuerRecord(address issuerAddress, string memory name)`: Updates the name of an issuer.
- `listIssuersRecord(uint256 start, uint256 end)`: Lists issuer records within a specified range.
- `issuerRecordCount()`: Returns the total number of issuer records.
Expand Down Expand Up @@ -53,5 +54,5 @@ It's designed for managing issuer records and verifying user compliance based on

| Contract | Address |
|------------|--------------------------------------------|
| ProxyAdmin | `0xe49de5cAC6aa19E70499D89D04E475a7CcDC58C1` |
| SWTRProxy | `0x7a838b0545513aC19920128Fdc8ECd25C9b1b1bD` |
| ProxyAdmin | `0x96e3ba5a33d21f64E5504Fd964656d1535a87F7e` |
| SWTRProxy | `0xBF896E5616d12fE6Bd7a376D2DBb924ff531CFDF` |
63 changes: 0 additions & 63 deletions contracts/IComplianceBridge.sol

This file was deleted.

43 changes: 22 additions & 21 deletions contracts/SWTRImplementation.sol
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.24;

import {IComplianceBridge} from "./IComplianceBridge.sol";
import {IComplianceBridge} from "./interfaces/IComplianceBridge.sol";
import {Strings} from "@openzeppelin/contracts/utils/Strings.sol";
import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import {ISWTRProxy} from "./interfaces/ISWTRProxy.sol";

contract SWTRImplementation is OwnableUpgradeable {
struct Issuer {
string name;
uint32 version;
address issuerAddress;
}

contract SWTRImplementation is ISWTRProxy, OwnableUpgradeable {
Issuer[] public issuers;
mapping(address => Issuer) public issuerByAddress;
mapping(address => uint256) issuerIndex;
Expand Down Expand Up @@ -73,6 +68,12 @@ contract SWTRImplementation is OwnableUpgradeable {
delete issuerAddressByNameAndVersion[name][version];
}

function getIssuerRecordByAddress(
address issuerAddress
) public view returns (Issuer memory) {
return issuerByAddress[issuerAddress];
}

function getIssuerAddressesByNameAndVersions(
string memory name,
uint32[] memory version
Expand Down Expand Up @@ -103,7 +104,7 @@ contract SWTRImplementation is OwnableUpgradeable {

function isUserVerified(
address userAddress,
IComplianceBridge.VerificationType verificationType
ISWTRProxy.VerificationType verificationType
) public view returns (bool) {
address[] memory allowedIssuers;
bytes memory payload = abi.encodeCall(
Expand All @@ -120,7 +121,7 @@ contract SWTRImplementation is OwnableUpgradeable {

function isUserVerifiedBy(
address userAddress,
IComplianceBridge.VerificationType verificationType,
ISWTRProxy.VerificationType verificationType,
address[] memory allowedIssuers
) public view returns (bool) {
bytes memory payload = abi.encodeCall(
Expand All @@ -138,18 +139,18 @@ contract SWTRImplementation is OwnableUpgradeable {
function listVerificationData(
address userAddress,
address issuerAddress
) public view returns (IComplianceBridge.VerificationData[] memory) {
) public view returns (ISWTRProxy.VerificationData[] memory) {
bytes memory payload = abi.encodeCall(
IComplianceBridge.getVerificationData,
(userAddress, issuerAddress)
);
(bool success, bytes memory data) = address(1028).staticcall(payload);
IComplianceBridge.VerificationData[] memory verificationData;
ISWTRProxy.VerificationData[] memory verificationData;
if (success) {
// Decode the bytes data into an array of structs
verificationData = abi.decode(
data,
(IComplianceBridge.VerificationData[])
(ISWTRProxy.VerificationData[])
);
}
return verificationData;
Expand All @@ -159,8 +160,8 @@ contract SWTRImplementation is OwnableUpgradeable {
address userAddress,
address issuerAddress,
bytes memory verificationId
) public view returns (IComplianceBridge.VerificationData memory) {
IComplianceBridge.VerificationData[]
) public view returns (ISWTRProxy.VerificationData memory) {
ISWTRProxy.VerificationData[]
memory verificationData = listVerificationData(
userAddress,
issuerAddress
Expand All @@ -185,9 +186,9 @@ contract SWTRImplementation is OwnableUpgradeable {
function getVerificationCountry(
address userAddress,
address issuerAddress,
IComplianceBridge.VerificationType verificationType
ISWTRProxy.VerificationType verificationType
) public view returns (string memory) {
IComplianceBridge.VerificationData[]
ISWTRProxy.VerificationData[]
memory verificationData = listVerificationData(
userAddress,
issuerAddress
Expand Down Expand Up @@ -257,9 +258,9 @@ contract SWTRImplementation is OwnableUpgradeable {
function passedVerificationType(
address userAddress,
address issuerAddress,
IComplianceBridge.VerificationType verificationType
ISWTRProxy.VerificationType verificationType
) public view returns (bool) {
IComplianceBridge.VerificationData[]
ISWTRProxy.VerificationData[]
memory verificationData = listVerificationData(
userAddress,
issuerAddress
Expand All @@ -286,7 +287,7 @@ contract SWTRImplementation is OwnableUpgradeable {
passedVerificationType(
userAddress,
issuerAddress,
IComplianceBridge.VerificationType.VT_HUMANITY
ISWTRProxy.VerificationType.VT_HUMANITY
);
}

Expand All @@ -298,7 +299,7 @@ contract SWTRImplementation is OwnableUpgradeable {
passedVerificationType(
userAddress,
issuerAddress,
IComplianceBridge.VerificationType.VT_AML
ISWTRProxy.VerificationType.VT_AML
);
}
}
28 changes: 28 additions & 0 deletions contracts/interfaces/IComplianceBridge.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.24;

interface IComplianceBridge {
function hasVerification(
address userAddress,
uint32 verificationType,
uint32 expirationTimestamp,
address[] memory allowedIssuers
) external returns (bool);

function getVerificationData(
address userAddress,
address issuerAddress
) external returns (bytes memory);

function addVerificationDetails(
address userAddress,
string memory originChain,
uint32 verificationType,
uint32 issuanceTimestamp,
uint32 expirationTimestamp,
bytes memory proofData,
string memory schema,
string memory issuerVerificationId,
uint32 version
) external;
}
125 changes: 125 additions & 0 deletions contracts/interfaces/ISWTRProxy.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.24;

interface ISWTRProxy {
struct VerificationData {
// Verification type
uint32 verificationType;
// Verification Id
bytes verificationId;
// Verification issuer address
address issuerAddress;
// From which chain proof was transferred
string originChain;
// Original issuance timestamp
uint32 issuanceTimestamp;
// Original expiration timestamp
uint32 expirationTimestamp;
// Original proof data (ZK-proof)
bytes originalData;
// ZK-proof original schema
string schema;
// Verification id for checking(KYC/KYB/AML etc) from issuer side
string issuerVerificationId;
// Version
uint32 version;
}

enum VerificationType {
VT_UNSPECIFIED, // VT_UNSPECIFIED defines an invalid/undefined verification type.
VT_KYC, // Know Your Custom
VT_KYB, // Know Your Business
VT_KYW, // Know Your Wallet
VT_HUMANITY, // Check humanity
VT_AML, // Anti Money Laundering (check transactions)
VT_ADDRESS,
VT_CUSTOM,
VT_CREDIT_SCORE
}

struct Issuer {
string name;
uint32 version;
address issuerAddress;
}

function getIssuerRecordByAddress(
address issuerAddress
) external view returns (Issuer memory);

function getIssuerAddressesByNameAndVersions(
string memory name,
uint32[] memory version
) external view returns (address[] memory);

function listIssuersRecord(
uint256 start,
uint256 end
) external view returns (Issuer[] memory);

function issuerRecordCount() external view returns (uint256);

function isUserVerified(
address userAddress,
ISWTRProxy.VerificationType verificationType
) external view returns (bool);

function isUserVerifiedBy(
address userAddress,
ISWTRProxy.VerificationType verificationType,
address[] memory allowedIssuers
) external view returns (bool);

function listVerificationData(
address userAddress,
address issuerAddress
) external view returns (ISWTRProxy.VerificationData[] memory);

function getVerificationDataById(
address userAddress,
address issuerAddress,
bytes memory verificationId
) external view returns (ISWTRProxy.VerificationData memory);

function getVerificationCountry(
address userAddress,
address issuerAddress,
ISWTRProxy.VerificationType verificationType
) external view returns (string memory);

function decodeQuadrataPassportV1OriginalData(
bytes memory originalData
)
external
pure
returns (
uint8 aml,
string memory country,
string memory did,
bool isBusiness,
bool investorStatus
);

function decodeWorldcoinV1OriginalData(
bytes memory originalData
)
external
pure
returns (
string memory merkle_root,
string memory nullifier_hash,
string memory proof,
string memory verification_level
);

function passedVerificationType(
address userAddress,
address issuerAddress,
ISWTRProxy.VerificationType verificationType
) external view returns (bool);

function walletPassedAML(
address userAddress,
address issuerAddress
) external view returns (bool);
}
2 changes: 1 addition & 1 deletion scripts/addIssuers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ async function main() {
const [signer] = await ethers.getSigners();
const contract = await ethers.getContractAt(
"SWTRImplementation",
"0x7a838b0545513aC19920128Fdc8ECd25C9b1b1bD" // proxy address
"0xBF896E5616d12fE6Bd7a376D2DBb924ff531CFDF" // proxy address
);

console.log("Adding new records...");
Expand Down
4 changes: 2 additions & 2 deletions scripts/getAdminAndImplementation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@ async function main() {

const SWTRProxy = await ethers.getContractAt(
"SWTRProxy",
"0x7a838b0545513aC19920128Fdc8ECd25C9b1b1bD" // proxy address
"0xBF896E5616d12fE6Bd7a376D2DBb924ff531CFDF" // proxy address
);

const proxyAdmin = await ethers.getContractAt(
"ProxyAdmin",
"0xe49de5cAC6aa19E70499D89D04E475a7CcDC58C1" // proxy admin address
"0x96e3ba5a33d21f64E5504Fd964656d1535a87F7e" // proxy admin address
);

const implementation = (
Expand Down
2 changes: 1 addition & 1 deletion scripts/listIssuers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ async function main() {
const [signer] = await ethers.getSigners();
const contract = await ethers.getContractAt(
"SWTRImplementation",
"0x7a838b0545513aC19920128Fdc8ECd25C9b1b1bD" // proxy address
"0xBF896E5616d12fE6Bd7a376D2DBb924ff531CFDF" // proxy address
);

const issuerCount = (await readContractData(
Expand Down
Loading

0 comments on commit 2ac01a5

Please sign in to comment.