Skip to content

Commit

Permalink
Merge pull request #23 from zer0-os/je/configurable-config
Browse files Browse the repository at this point in the history
Allow modification of zAuction config before an instance is created
  • Loading branch information
JamesEarle committed Nov 11, 2021
2 parents 8443e2a + d426ca5 commit 08a4ed7
Show file tree
Hide file tree
Showing 8 changed files with 193 additions and 44 deletions.
32 changes: 32 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}\\build\\src\\index.js"
},
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"program": "${workspaceFolder}\\build\\src\\index.js"
},
{
"type": "node",
"request": "launch",
"name": "Mocha Tests",
"program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
"args": [
"-r",
"ts-node/register",
"--slow",
"5000",
"test/**/*.test.ts",
],
"cwd": "${workspaceRoot}",
"internalConsoleOptions": "openOnSessionStart"
}
]
}
39 changes: 39 additions & 0 deletions src/configuration/configuration.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { ethers } from "ethers";
import * as zAuction from "@zero-tech/zauction-sdk";

export const zAuctionConfiguration = (
web3Provider: ethers.providers.Web3Provider,
apiUri?: string,
subgraphUri?: string,
zAuctionAddress?: string,
tokenContract?: string
): zAuction.Config => {
let defaultApiUri;
let defaultSubgraphUri;
let defaultZAuctionAddress;
let defaultTokenContract;

if (web3Provider.network.name == "mainnet") {
defaultApiUri = "https://mainnet.zauction.api.zero.tech/api";
defaultSubgraphUri =
"https://api.thegraph.com/subgraphs/name/zer0-os/zauction";
defaultZAuctionAddress = "0x05cBD37cA528B7ea50800aA80ddD0F9F30C952F0";
defaultTokenContract = "0xc2e9678A71e50E5AEd036e00e9c5caeb1aC5987D";
} else if (web3Provider.network.name === "kovan") {
defaultApiUri = "https://zauction-kovan-api.herokuapp.com/api";
defaultSubgraphUri =
"https://api.thegraph.com/subgraphs/name/zer0-os/zauction-kovan";
defaultZAuctionAddress = "0x18A804a028aAf1F30082E91d2947734961Dd7f89";
defaultTokenContract = "0xC613fCc3f81cC2888C5Cccc1620212420FFe4931";
} else {
throw Error(`Network ${web3Provider.network.name} is not supported`);
}

return {
web3Provider: web3Provider,
apiUri: apiUri ?? defaultApiUri,
subgraphUri: subgraphUri ?? defaultSubgraphUri,
zAuctionAddress: zAuctionAddress ?? defaultZAuctionAddress,
tokenContract: tokenContract ?? defaultTokenContract,
} as zAuction.Config;
};
31 changes: 10 additions & 21 deletions src/configurations.ts → src/configuration/index.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
import * as zAuction from "@zero-tech/zauction-sdk";
import { ethers } from "ethers";
import { Config } from ".";
import { zAuctionRoute } from "./types";
import * as zAuction from "@zero-tech/zauction-sdk";
import { Config } from "..";
import { zAuctionConfiguration } from "./configuration";
import { zAuctionRoute } from "../types";

const mainnetRegistrar = "0xc2e9678A71e50E5AEd036e00e9c5caeb1aC5987D";
const mainnetStaking = "0x45b13d8e6579d5C3FeC14bB9998A3640CD4F008D";

export const mainnetConfiguration = (
provider: ethers.providers.Provider
provider: ethers.providers.Web3Provider
): Config => {
return {
subgraphUri: "https://api.thegraph.com/subgraphs/name/zer0-os/zns",
Expand All @@ -16,14 +17,8 @@ export const mainnetConfiguration = (
zAuctionRoutes: [
{
uriPattern: "wilder",
instance: zAuction.createInstance({
apiUri: "https://mainnet.zauction.api.zero.tech/api",
subgraphUri:
"https://api.thegraph.com/subgraphs/name/zer0-os/zauction",
zAuctionAddress: "0x05cBD37cA528B7ea50800aA80ddD0F9F30C952F0",
tokenContract: mainnetRegistrar,
web3Provider: provider,
} as zAuction.Config),
// Use default values
config: zAuctionConfiguration(provider, "mainnet") as zAuction.Config,
} as zAuctionRoute,
],
basicController: "0xa05Ae774Da859943B7B859cd2A6aD9F5f1651d6a",
Expand All @@ -35,7 +30,7 @@ const kovanRegistrar = "0xC613fCc3f81cC2888C5Cccc1620212420FFe4931";
const kovanStaking = "0x1E3F8B31b24EC0E938BE45ecF6971584F90A1602";

export const kovanConfiguration = (
provider: ethers.providers.Provider
provider: ethers.providers.Web3Provider
): Config => {
return {
subgraphUri: "https://api.thegraph.com/subgraphs/name/zer0-os/zns-kovan",
Expand All @@ -44,14 +39,8 @@ export const kovanConfiguration = (
zAuctionRoutes: [
{
uriPattern: "wilder",
instance: zAuction.createInstance({
apiUri: "https://zauction-kovan-api.herokuapp.com/api",
subgraphUri:
"https://api.thegraph.com/subgraphs/name/zer0-os/zauction-kovan",
zAuctionAddress: "0x18A804a028aAf1F30082E91d2947734961Dd7f89",
tokenContract: kovanRegistrar,
web3Provider: provider,
} as zAuction.Config),
// Use default values
config: zAuctionConfiguration(provider, "kovan") as zAuction.Config,
} as zAuctionRoute,
],
basicController: "0x2EF34C52138781C901Fe9e50B64d80aA9903f730",
Expand Down
22 changes: 18 additions & 4 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ import {
PlaceBidParams,
SubdomainParams,
} from "./types";
import { getZAuctionInstanceForDomain } from "./utilities";
import {
getZAuctionInstanceForDomain,
createZAuctionInstances,
} from "./utilities";
import { ethers } from "ethers";
import { Registrar } from "./contracts/types";
import { getBasicController, getRegistrar } from "./contracts";
Expand All @@ -18,16 +21,18 @@ import * as domains from "./utilities/domains";
import { Bid } from "./zAuction";
export { domains };

import * as configurations from "./configurations";
import * as configuration from "./configuration";
import { getDomainMetrics } from "./actions/getDomainMetrics";

export { Config } from "./types";
export { configurations };
export { Config, RouteUriToInstance } from "./types";
export { configuration };

export const createInstance = (config: Config): Instance => {
const subgraphClient = subgraph.createClient(config.subgraphUri);
const apiClient = api.createClient(config.apiUri);

const zAuctionRouteUriToInstance = createZAuctionInstances(config);

const domainIdToDomainName = async (domainId: string) => {
const domainData = await subgraphClient.getDomainById(domainId);
return domainData.name;
Expand All @@ -37,6 +42,7 @@ export const createInstance = (config: Config): Instance => {
const zAuctionInstance = await getZAuctionInstanceForDomain(
domainId,
config.zAuctionRoutes,
zAuctionRouteUriToInstance,
domainIdToDomainName
);

Expand All @@ -55,6 +61,7 @@ export const createInstance = (config: Config): Instance => {
const zAuctionInstance = await getZAuctionInstanceForDomain(
domainId,
config.zAuctionRoutes,
zAuctionRouteUriToInstance,
domainIdToDomainName
);

Expand All @@ -69,6 +76,7 @@ export const createInstance = (config: Config): Instance => {
getZAuctionInstanceForDomain(
domainId,
config.zAuctionRoutes,
zAuctionRouteUriToInstance,
domainIdToDomainName
),
getAllDomains: subgraphClient.getAllDomains,
Expand Down Expand Up @@ -160,6 +168,7 @@ export const createInstance = (config: Config): Instance => {
const zAuctionInstance = await getZAuctionInstanceForDomain(
domainId,
config.zAuctionRoutes,
zAuctionRouteUriToInstance,
domainIdToDomainName
);

Expand All @@ -176,6 +185,7 @@ export const createInstance = (config: Config): Instance => {
const zAuctionInstance = await getZAuctionInstanceForDomain(
domainId,
config.zAuctionRoutes,
zAuctionRouteUriToInstance,
domainIdToDomainName
);

Expand All @@ -192,6 +202,7 @@ export const createInstance = (config: Config): Instance => {
const zAuctionInstance = await getZAuctionInstanceForDomain(
params.domainId,
config.zAuctionRoutes,
zAuctionRouteUriToInstance,
domainIdToDomainName
);

Expand All @@ -210,6 +221,7 @@ export const createInstance = (config: Config): Instance => {
const zAuctionInstance = await getZAuctionInstanceForDomain(
domainId,
config.zAuctionRoutes,
zAuctionRouteUriToInstance,
domainIdToDomainName
);

Expand All @@ -225,6 +237,7 @@ export const createInstance = (config: Config): Instance => {
const zAuctionInstance = await getZAuctionInstanceForDomain(
domainId,
config.zAuctionRoutes,
zAuctionRouteUriToInstance,
domainIdToDomainName
);

Expand All @@ -239,6 +252,7 @@ export const createInstance = (config: Config): Instance => {
const zAuctionInstance = await getZAuctionInstanceForDomain(
bid.tokenId,
config.zAuctionRoutes,
zAuctionRouteUriToInstance,
domainIdToDomainName
);

Expand Down
6 changes: 5 additions & 1 deletion src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ export interface Config {
registrar: string;
}

export interface RouteUriToInstance {
[key: string]: zAuction.Instance
}

/**
* An instance of the zNS SDK
*/
Expand Down Expand Up @@ -222,7 +226,7 @@ export interface Instance {

export interface zAuctionRoute {
uriPattern: string;
instance: zAuction.Instance;
config: zAuction.Config;
}

export interface Domain {
Expand Down
16 changes: 14 additions & 2 deletions src/utilities/zAuctionRouting.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,33 @@
import * as zAuction from "@zero-tech/zauction-sdk";
import { zAuctionRoute } from "../types";
import { zAuctionRoute, RouteUriToInstance } from "../types";
import { Config } from "..";

type GetDomainNameFromIdFunction = (domainId: string) => Promise<string>;

export const getZAuctionInstanceForDomain = async (
domainId: string,
zAuctionRoutes: zAuctionRoute[],
routeUriToInstance: RouteUriToInstance,
getDomainName: GetDomainNameFromIdFunction
): Promise<zAuction.Instance> => {
const domainName = await getDomainName(domainId);

for (const route of zAuctionRoutes) {
const match = RegExp(`^${route.uriPattern}`).exec(domainName);
if (match) {
return route.instance;
return routeUriToInstance[route.uriPattern];
}
}

throw Error(`No zAuction Route configured for this domain!`);
};

export const createZAuctionInstances = (config: Config): RouteUriToInstance => {
const routeUriToInstance: RouteUriToInstance = {};
for (const route of config.zAuctionRoutes) {
routeUriToInstance[route.uriPattern] = zAuction.createInstance(
route.config
);
}
return routeUriToInstance;
};
8 changes: 4 additions & 4 deletions test/getDomainEvents.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { DomainEventType, DomainMintEvent, DomainTransferEvent } from "../src";
import { DomainEventType, DomainMintEvent, DomainTransferEvent } from "../src/types";
import { getDomainEvents } from "../src/actions";

import { expect } from "chai";
Expand Down Expand Up @@ -34,7 +34,7 @@ describe("getDomainEvents", () => {
{
getBidEvents: Sinon.fake.returns([]),
getMintEvents: Sinon.fake.returns(mintEvent),
getTransferEvents: Sinon.fake.returns(transferEvents);
getTransferEvents: Sinon.fake.returns(transferEvents),
getSaleEvents: Sinon.fake.returns([])
}
);
Expand All @@ -57,7 +57,7 @@ describe("getDomainEvents", () => {
{
getBidEvents: Sinon.fake.returns([]),
getMintEvents: Sinon.fake.returns(mintEvent),
getTransferEvents: Sinon.fake.returns(transferEvents);
getTransferEvents: Sinon.fake.returns(transferEvents),
getSaleEvents: Sinon.fake.returns([])
}
);
Expand Down Expand Up @@ -92,7 +92,7 @@ describe("getDomainEvents", () => {
{
getBidEvents: Sinon.fake.returns([]),
getMintEvents: Sinon.fake.returns(mintEvent),
getTransferEvents: Sinon.fake.returns(transferEvents);
getTransferEvents: Sinon.fake.returns(transferEvents),
getSaleEvents: Sinon.fake.returns([])
}
);
Expand Down
Loading

0 comments on commit 08a4ed7

Please sign in to comment.