2021-04-22 18:48:54 +00:00
|
|
|
import axios from "axios";
|
|
|
|
|
2021-04-22 18:25:49 +00:00
|
|
|
const SNAPSHOT_API = "https://hub.snapshot.page/api/";
|
|
|
|
|
2021-04-22 18:48:54 +00:00
|
|
|
interface Space {
|
|
|
|
strategies: any[];
|
|
|
|
plugins: any;
|
|
|
|
filters: any;
|
|
|
|
name: string;
|
|
|
|
network: string; // '1', '56', etc
|
2021-04-22 18:53:20 +00:00
|
|
|
members?: [];
|
2021-04-22 18:48:54 +00:00
|
|
|
symbol: string;
|
|
|
|
domain: string;
|
|
|
|
about: string;
|
|
|
|
twitter: string;
|
|
|
|
github: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
function filterObject(obj: any, predicate: Function) {
|
|
|
|
let result: Record<string, any> = {};
|
|
|
|
|
|
|
|
for (let key in obj) {
|
2021-04-22 18:53:20 +00:00
|
|
|
if (obj.hasOwnProperty(key) && predicate(obj[key])) {
|
2021-04-22 18:48:54 +00:00
|
|
|
result[key] = obj[key];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
async function fetchAllSpaces(): Promise<Record<string, Space>> {
|
|
|
|
return axios.get(`${SNAPSHOT_API}/spaces`).then((res) => {
|
|
|
|
const spaces = res.data;
|
|
|
|
|
|
|
|
return spaces;
|
2021-04-22 18:25:49 +00:00
|
|
|
});
|
|
|
|
}
|
2021-04-22 18:48:54 +00:00
|
|
|
|
|
|
|
async function fetchMainnetSpaces() {
|
|
|
|
const allSpaces = await fetchAllSpaces();
|
|
|
|
|
2021-04-22 18:53:20 +00:00
|
|
|
const filtered = filterObject(allSpaces, (space: Space) => space.network === "1");
|
2021-04-22 18:48:54 +00:00
|
|
|
|
|
|
|
return filtered;
|
|
|
|
}
|
|
|
|
|
2021-04-22 19:23:19 +00:00
|
|
|
function extractTokenAddress(space: Space): string | null {
|
|
|
|
const strategyWithAddress = space.strategies.find((strategy) => strategy.name === "erc20-balance-of");
|
|
|
|
|
|
|
|
if (strategyWithAddress) {
|
|
|
|
return strategyWithAddress.params.address;
|
|
|
|
} else {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-04-22 18:53:20 +00:00
|
|
|
async function run() {
|
|
|
|
const allMainnetSpaces = await fetchMainnetSpaces();
|
2021-04-22 18:48:54 +00:00
|
|
|
|
2021-04-22 19:23:19 +00:00
|
|
|
// console.log(Object.keys(allMainnetSpaces).length);
|
2021-04-22 18:48:54 +00:00
|
|
|
|
2021-04-22 18:53:20 +00:00
|
|
|
const withMembers = filterObject(allMainnetSpaces, (space: Space) => space.members && space.members.length > 4);
|
|
|
|
|
2021-04-22 19:23:19 +00:00
|
|
|
// console.log(Object.keys(withMembers).length);
|
2021-04-22 18:53:20 +00:00
|
|
|
|
2021-04-22 19:23:19 +00:00
|
|
|
for (let i = 0; i < Object.keys(withMembers).length; i++) {
|
|
|
|
const key = Object.keys(withMembers)[i];
|
|
|
|
|
|
|
|
const tokenAddress = extractTokenAddress(withMembers[key]);
|
|
|
|
|
|
|
|
console.log(tokenAddress);
|
|
|
|
}
|
2021-04-22 18:53:20 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
run();
|