Sailos
V1

API

API

Introduction

Omnid aggregates multiple on/off-chain sources of reputation into an overall social graph where each source counts towards some points in building the overall TrustScore for any Ethereum Address. This score is continuously evolving. As more platforms get integrated, the weights and the score will update too.

Current Integrations and Score Weightage

#IntegrationKeyFactors and Score
1Aaveaave- totalCollateralETH
- totalDebtETH
- availableBorrowsETH
- currentLiquidationThreshold
- ltv
- healthFactor
Across: Main Market, AMM Market, Polygon Market, Avalanche Market
2AgeageAge of Ethereum Address in days on,
- Ethereum Mainnet
- Polygon Mainnet
3ArcXarcx- Points for each indexed ArcX Score
4Async Artasyncart- NFTs Sold
- Average Sale Value
5Boardroomboardroom- Number of Votes given
- DAOs participated In
- Voting History
6BrightIdbrightid37 Points for Verification
7Celo Verified Attestationscelo1 Point for each valid Attestation
8Coinvisecoinvise- Tokens Created(a) : (a)^0.5 Points
- NFTs Created(b) : (b)^0.5 Points
- Total NFTs Sold(c): c Points
- Airdrops Sent(d): d Points
- Multisends(e): e Points
- Liquidity Pools Created(f): f Points
9Contextcontext- Followers
- Folowing
10CoordinapecoordinapeNumber of teammates.
11CryptoScamDBcryptoscamdb-20 Points for being flagged
12Cyberconnectcyberconnect- Followers
- Following
- Social
- Display Name
13Dapplistdapplist- Dapps Hunted
- XP
14DeBankdebank- base_score
- rank
- social_coefficient
- social_score
- total_score
15DeepDAOdeepdao- score
- rank
- relativeScore
- daos
- proposals
- votes
16ENSens10 Points for Reverse Resolution to your Address.
17EtherscanetherscanFlagged Labels like Akropolis Hacker
18Fortaforta- Number of 'HIGH', 'MEDIUM', 'CRITICAL' Alerts
19Foundationfoundation- NFTs Sold
- Average Sale Value
- Followers
- Following
20Gitcoingitcoin10 Points for funding a Grant.
21Hive.onehiveonePoints for,
- Attention Score
-Insider Score
22Idenaidena1 Point for Verification
23Karma Protocolkarma- Karma Score
24Known Originknownorigin- NFTs Sold
- Average Sale Value
25Lens Protocollens- Lens Profile
26MetagamemetagameSeason XP ** 0.5
27MyEtherWalletmew-20 on being Blacklisted
28Mirrormirror10 Points for being a writer on Mirror
29POAPpoap1 Point for Each POAP Received
30Proof of Humanitypoh8 Points for Verification
31Proof of Personhoodpop- Price of Forgery
- Personhood Score
32Polygon EcosystempolygonRelative Score out of 100 based on,
- Number of Transactions
- Net Volume Transacted
- Retention
33Project Galaxyprojectgalaxy1 Point for each Eligible Credential
34RabbitHolerabbithole- Points equal to the Levels you cross on RabbitHole.
- TaskIDs of the tasks Completed
35Rariblerarible- Total NFTs Sold
- Total NFTs Created
- Total NFTs Owned
- Average Sale Value
- Followers
- Following
36RSS3rss3- Profile
- Backlinks
- Accounts
- Links
37Showtimeshowtime- Followers
- Following
38SuperRaresuperrare- NFTs Sold
- Average Sale Value
- Followers
- Following
39UnipassunipassPoints for Level
40Uniswap Sybiluniswap10 Points for Verification
41Unstoppable Domainsunstoppable10 Points for Reverse Reslution to your Address.
42Yupyup- Yup Score
43Zapperzapper- Following
- Followers
- xp
- zp
44Zorazora- Number of NFTs Sold
- Average Sale Value

Upcoming, Toucan's Carbon Offsets.

Integration

You can add a noCache=true query paramter to manually rebuild and cache the Social Graph anytime. Otherwise our indexers update your score every 8 hours.

Querying TrustScore

API Request format,

https://theconvo.space/api/identity?address=<ethereum-address-or-ens>&apikey=<apikey>

Example 1,

https://theconvo.space/api/identity?address=vitalik.eth&apikey=<apikey>
View Response
{
   "_id":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
   "_mod":1637202971089432300,
   "asyncart":{
      "totalCountSold":0,
      "totalAmountSold":0
   },
   "brightId":false,
   "celo":{
      "attestations":0
   },
   "coinvise":{
      "tokensCreated":0,
      "nftsCreated":0,
      "totalCountSold":0,
      "totalAmountSold":0,
      "totalPoolTvl":0,
      "totalPoolCount":0,
      "multisendCount":0,
      "airdropCount":0
   },
   "coordinape":{},
   "cryptoScamDb":false,
   "cyberconnect":{
      "displayName":"",
      "address":"0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
      "followingCount":0,
      "followerCount":610,
      "social":{
         "twitter":""
      }
   },
   "deepdao":0,
   "ens":"vitalik.eth",
   "foundation":{
      "totalCountSold":0,
      "totalAmountSold":0,
      "followerCount":0,
      "followingCount":0
   },
   "gitcoin":{
      "funder":true
   },
   "idena":false,
   "knownorigin":{
      "totalCountSold":0,
      "totalAmountSold":0
   },
   "mirror":false,
   "poap":46,
   "poh":false,
   "polygon":{
      "Score100":0
   },
   "rabbitHole":{
      "level":1,
      "tasksCompleted":[
         "UNI_V2_SWAP",
         "GNOSIS_SAFE_OWNER"
      ]
   },
   "rarible":{
      "totalCountSold":0,
      "totalAmountSold":0,
      "ownershipsWithStock":0,
      "itemsCreated":68,
      "ownerships":246,
      "hides":0,
      "followers":29,
      "following":0,
      "likes":0
   },
   "score":56,
   "showtime":{},
   "signature":"0x2957611d54f484111b74122da81c419cb3524fdba35ac93286cc919d5585e6de2e6d225e681033837527a006c2464062f44b20b138fc516cc227f0868dfd786a1c",
   "signatureAddress":"0xCCcccCcC54317EE02C2dBfdD832a67C7acD28e06",
   "success":true,
   "superrare":{
      "totalCountSold":0,
      "totalAmountSold":0,
      "following":0,
      "followers":0
   },
   "uniswapSybil":false,
   "unstoppableDomains":false,
   "zora":{
      "totalCountSold":0,
      "totalAmountSold":0
   },
   "rss3":{
      "profile":{},
      "backlinks":[],
      "accounts":[],
      "links":[]
   },
   "aave":{
      "totalHf":0,
      "mainMarket":{
         "healthFactor":false
      },
      "ammMarket":{
         "healthFactor":false
      },
      "polygonMarket":{
         "healthFactor":false
      },
      "avalancheMarket":{
         "healthFactor":false
      }
   },
   "context":{
      "followerCount":13,
      "followingCount":null
   },
   "age":2266,
   "arcx":{
      "totalScore":0,
      "details":{}
   },
   "boardroom":{
      "totalVotes":0,
      "daos":[],
      "votes":[]
   }
}

Example 2,

https://theconvo.space/api/identity?address=0xD665afb9A4019a8c482352aaa862567257Ed62CF&apikey=<apikey>
View Response
{
   "_id":"0xD665afb9A4019a8c482352aaa862567257Ed62CF",
   "_mod":1636426686535476700,
   "asyncart":{
      "totalCountSold":0,
      "totalAmountSold":0
   },
   "brightId":false,
   "celo":{
      "attestations":0
   },
   "coinvise":{
      "tokensCreated":0,
      "nftsCreated":0,
      "totalCountSold":0,
      "totalAmountSold":0,
      "totalPoolTvl":0,
      "totalPoolCount":0,
      "multisendCount":0,
      "airdropCount":0,
      "following":0,
      "followers":0
   },
   "coordinape":null,
   "cryptoScamDb":false,
   "deepdao":{
      "score":0,
      "rank":0,
      "relativeScore":0,
      "daos":0,
      "proposals":0,
      "votes":0
   },
   "ens":false,
   "foundation":{
      "totalCountSold":18,
      "totalAmountSold":2350717.40778,
      "followers":1604,
      "following":48
   },
   "gitcoin":{
      "funder":false
   },
   "idena":false,
   "knownorigin":{
      "totalCountSold":3,
      "totalAmountSold":16306.515
   },
   "mirror":false,
   "poap":1,
   "poh":false,
   "polygon":{
      "Score100":0
   },
   "rabbitHole":{
      "level":1,
      "tasksCompleted":[
         "SEA1",
         "SEA2",
         "UNI_V3_SWAP",
         "UNI_V2_SWAP",
         "SNAPSHOT_VOTE"
      ]
   },
   "rarible":{
      "totalCountSold":15,
      "totalAmountSold":728891.55738,
      "ownershipsWithStock":1,
      "itemsCreated":94,
      "ownerships":52,
      "hides":0,
      "followers":2219,
      "following":108,
      "likes":33
   },
   "score":1,
   "showtime":{
 
   },
   "signature":"0xcdadeac74b4fd888edb17edc5bf6c2f10f039f141f74280f93b69014942bc9783babb1d6f8c456c38c581a52876d8b69640710a58ab253210a2ee73d3a83a7e81c",
   "signatureAddress":"0xccccA960A949eaa4d963f0cE29170AD55D4F5E49",
   "success":true,
   "superrare":{
      "totalCountSold":2,
      "totalAmountSold":28718.991565550437,
      "following":36,
      "followers":72
   },
   "uniswapSybil":false,
   "unstoppableDomains":false,
   "zora":{
      "totalCountSold":0,
      "totalAmountSold":0
   },
   "aave":{
      "totalHf":0,
      "mainMarket":{
         "healthFactor":false
      },
      "ammMarket":{
         "healthFactor":false
      },
      "polygonMarket":{
         "healthFactor":false
      },
      "avalancheMarket":{
         "healthFactor":false
      }
   },
   "age":340,
   "context":{
      "followerCount":4,
      "followingCount":null
   },
   "cyberconnect":{
      "displayName":"",
      "followingCount":0,
      "followerCount":0,
      "social":{
         "twitter":"TheArchangel22"
      }
   },
   "rss3":{
      "profile":{},
      "backlinks":[],
      "accounts":[],
      "links":[]
   },
   "arcx":{
      "totalScore":0,
      "details":{}
   },
   "boardroom":{
      "totalVotes":0,
      "daos":[],
      "votes":[]
   }
}

Verifying Response Signature

Omnid uses 0xCCcccCcC54317EE02C2dBfdD832a67C7acD28e06 as SignatureAddress to sign the oracle data.

const { utils } = require('ethers');
 
let resp = await fetch('https://theconvo.space/api/identity?address=vitalik.eth&apikey=<apikey>');
let { signature, signatureAddress, _mod, ...scoreData } = await resp.json();
let recoveredAddress = utils.verifyMessage(JSON.stringify(scoreData), signature);
console.log( recoveredAddress === signatureAddress );

ZK Identity

Using a naive implementation of a Range Proof SNARK, we create a circuit to generate a proof of: whether a TrustScore is within a specific range (nearest-tenths in this case) without revealing the original score. Soon, this will also allow you to verify membership in categories/sources of reputation without revealing any personal traits.

Generating ZkProof

API Request format,

https://theconvo.space/api/zkidentity?address=<ethereum-address-or-ens>&apikey=<apikey>
View Response
{
   //score data,
   "inputs": [
      "0x000000000000000000000000000000000000000000000000000000000000003c",
      "0x0000000000000000000000000000000000000000000000000000000000000046",
      "0x0000000000000000000000000000000000000000000000000000000000000001"
   ],
   "proof": [
      [
         "0x2350f8a0e2632b6a6263f25399cccd7acac5071374deb3dfddc7a8f6403cda72",
         "0x2dcf696d400516b327bb793d7163353dbfa15f43ac55beb18dde9b76cc0b8629"
      ],
      [
         [
            "0x1e0741e5371dfb9b5d64a3648f6a00bd3ddd1f49773dd7e39d8e80f9528fb9c5",
            "0x065cda7a43fc0f9c9020222850a5ad926cedc7d6bddf239d034454bed5c4bd78"
         ],
         [
            "0x1cd443e08a0b98bd0ee6dabcb52d928993bc7565035e2fe14a0720415d284d6f",
            "0x03f5ca544c64be5a2215baba2a7d6e8b3554dd4a4087cd09fa9ee50557de3ee4"
         ]
      ],
      [
         "0x03e301fc3938c14a158ab393095fdcd86f6e0dd49838ce322940228f3fdd3c80",
         "0x28143f38cfd83b3151739f2ce1ed2aeeb3f23230b56a8c46d2354a853e4b2e05"
      ]
   ]
}

Verifying ZkProof

const { ethers } = require('ethers');
 
let resp = await fetch('https://theconvo.space/api/zkidentity?address=vitalik.eth');
let { inputs, proof } = await resp.json();
let verifierAddress = "0x1cb460256bcece9aa216e80ccff5c3b98f8c9263";
let verifierAbi = [{"inputs":[{"components":[{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct Pairing.G1Point","name":"a","type":"tuple"},{"components":[{"internalType":"uint256[2]","name":"X","type":"uint256[2]"},{"internalType":"uint256[2]","name":"Y","type":"uint256[2]"}],"internalType":"struct Pairing.G2Point","name":"b","type":"tuple"},{"components":[{"internalType":"uint256","name":"X","type":"uint256"},{"internalType":"uint256","name":"Y","type":"uint256"}],"internalType":"struct Pairing.G1Point","name":"c","type":"tuple"}],"internalType":"struct Verifier.Proof","name":"proof","type":"tuple"},{"internalType":"uint256[3]","name":"input","type":"uint256[3]"}],"name":"verifyTx","outputs":[{"internalType":"bool","name":"r","type":"bool"}],"stateMutability":"view","type":"function"}];
 
const provider = new ethers.providers.JsonRpcProvider();
const verifier = new ethers.Contract(verifierAddress, verifierAbi, provider);
let resp = verifier.verifyTx(proof, inputs);
 
console.log( resp === true );

Learn More

On this page