Skip to content

Commit

Permalink
support v3 in snapshot phone and gov-id endpoints
Browse files Browse the repository at this point in the history
  • Loading branch information
calebtuttle committed Feb 15, 2024
1 parent 23e6ca7 commit faa0a2e
Showing 1 changed file with 64 additions and 3 deletions.
67 changes: 64 additions & 3 deletions src/services/snapshot-strategies.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,22 @@ import express from "express";
import { ethers } from "ethers";
import { thisAddress, providers } from "../init.js";
import { logWithTimestamp, assertValidAddress } from "../utils/utils.js";
import { defaultActionId } from "../constants/misc.js";
import {
defaultActionId,
hubV3Address,
govIdIssuerAddress,
v3KYCSybilResistanceCircuitId,
v3PhoneSybilResistanceCircuitId,
phoneIssuerAddress,
} from "../constants/misc.js";
import {
resStoreAddrsByNetwork,
sybilResistanceAddrsByNetwork,
sybilResistancePhoneAddrsByNetwork,
} from "../constants/contractAddresses.js";
import ResidencyStoreABI from "../constants/ResidencyStoreABI.js";
import AntiSybilStoreABI from "../constants/AntiSybilStoreABI.js";
import HubV3ABI from "../constants/HubV3ABI.js";

/**
* Query params: network, snapshot, addresses.
Expand Down Expand Up @@ -122,7 +130,32 @@ async function sybilResistanceGovId(req, res) {
const addresses = req.query.addresses.split(",");
for (const address of addresses) {
try {
const isUnique = await contract.isUniqueForAction(address, actionId); //, overrides);
// Check v1/v2 contract
const isUniqueV1 = await contract.isUniqueForAction(address, actionId); //, overrides);

// Check v3 contract
let isUniqueV3 = false;
try {
const hubV3Contract = new ethers.Contract(hubV3Address, HubV3ABI, provider);

const sbt = await hubV3Contract.getSBT(address, v3KYCSybilResistanceCircuitId);

const publicValues = sbt[1];
const actionIdInSBT = publicValues[2].toString();
const issuerAddress = publicValues[4].toHexString();

const actionIdIsValid = actionId == actionIdInSBT;
const issuerIsValid = govIdIssuerAddress == issuerAddress;

isUniqueV3 = issuerIsValid && actionIdIsValid;
} catch (err) {
if (!(err.errorArgs?.[0] ?? "").includes("SBT is expired")) {
throw err;
}
}

const isUnique = isUniqueV1 || isUniqueV3;

scores.push({ address: address, score: isUnique ? 1 : 0 });
} catch (err) {
console.log(err);
Expand Down Expand Up @@ -180,7 +213,35 @@ async function sybilResistancePhone(req, res) {
const addresses = req.query.addresses.split(",");
for (const address of addresses) {
try {
const isUnique = await contract.isUniqueForAction(address, actionId); //, overrides);
// Check v1/v2 contract
const isUniqueV1 = await contract.isUniqueForAction(address, actionId); //, overrides);

// Check v3 contract
let isUniqueV3 = false;
try {
const hubV3Contract = new ethers.Contract(hubV3Address, HubV3ABI, provider);

const sbt = await hubV3Contract.getSBT(
address,
v3PhoneSybilResistanceCircuitId
);

const publicValues = sbt[1];
const actionIdInSBT = publicValues[2].toString();
const issuerAddress = publicValues[4].toHexString();

const actionIdIsValid = actionId == actionIdInSBT;
const issuerIsValid = phoneIssuerAddress == issuerAddress;

isUniqueV3 = issuerIsValid && actionIdIsValid;
} catch (err) {
if (!(err.errorArgs?.[0] ?? "").includes("SBT is expired")) {
throw err;
}
}

const isUnique = isUniqueV1 || isUniqueV3;

scores.push({ address: address, score: isUnique ? 1 : 0 });
} catch (err) {
console.log(err);
Expand Down

0 comments on commit faa0a2e

Please sign in to comment.