Skip to content

Commit

Permalink
add treasure ruby chain config data (#34)
Browse files Browse the repository at this point in the history
* add treasure ruby chain configs

* add more zeeverse contracts; refactor seed script

* add ruby nft contract

* add changeset
  • Loading branch information
alecananian authored May 27, 2024
1 parent 26538eb commit c5dc87b
Show file tree
Hide file tree
Showing 7 changed files with 195 additions and 82 deletions.
5 changes: 5 additions & 0 deletions .changeset/empty-horses-drive.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@treasure-dev/tdk-core": patch
---

Added Treasure Ruby chain configuration data
206 changes: 136 additions & 70 deletions apps/api/prisma/seed.ts
Original file line number Diff line number Diff line change
@@ -1,84 +1,144 @@
import type { Prisma } from "@prisma/client";
import { PrismaClient } from "@prisma/client";
import { type Contract, getContractAddress } from "@treasure-dev/tdk-core";
import {
type Contract,
getContractAddress,
treasureRuby,
} from "@treasure-dev/tdk-core";
import { arbitrum, arbitrumSepolia, sepolia } from "viem/chains";

type Environment = "local" | "dev" | "prod";

type RemoteEnvironment = "dev" | "prod";
type Environment = "local" | RemoteEnvironment;
type ProjectMetadata = Omit<Prisma.ProjectCreateInput, "slug">;

const METADATA: Record<string, ProjectMetadata> = {
const PROJECT_DATA: Record<
string,
{
metadata: ProjectMetadata;
redirectUris: Record<Environment, string[]>;
callTargets: Record<RemoteEnvironment, [number, Contract][]>;
}
> = {
app: {
name: "Treasure",
},
realm: {
name: "Realm",
metadata: {
name: "Treasure",
},
redirectUris: {
local: ["http://localhost:3000", "http://localhost:5174"],
dev: ["https://app-testnet.treasure.lol"],
prod: ["https://app.treasure.lol"],
},
callTargets: {
dev: [[treasureRuby.id, "RubyNFT"]],
prod: [],
},
},
zeeverse: {
name: "Zeeverse",
cover: "https://images.treasure.lol/tdk/login/zeeverse_cover.png",
icon: "https://images.treasure.lol/tdk/login/zeeverse_icon.png",
color: "#8fd24f",
bitmates: {
metadata: {
name: "Bitmates",
},
redirectUris: {
local: [],
dev: [],
prod: [],
},
callTargets: {
dev: [],
prod: [],
},
},
};

const REDIRECT_URIS: Record<string, Record<Environment, string[]>> = {
app: {
local: ["http://localhost:3000"],
dev: ["https://app-testnet.treasure.lol"],
prod: ["https://app.treasure.lol"],
harness: {
metadata: {
name: "TDK Harness",
},
redirectUris: {
local: [],
dev: [],
prod: [],
},
callTargets: {
dev: [
[arbitrumSepolia.id, "MAGIC"],
[arbitrumSepolia.id, "Consumables"],
[arbitrumSepolia.id, "Legions"],
[arbitrumSepolia.id, "CorruptionRemoval"],
[arbitrumSepolia.id, "ERC1155TokenSetCorruptionHandler"],
[arbitrumSepolia.id, "HarvesterEmberwing"],
[arbitrumSepolia.id, "NftHandlerEmberwing"],
[arbitrumSepolia.id, "ZeeverseZee"],
[arbitrumSepolia.id, "ZeeverseItems"],
[arbitrumSepolia.id, "BulkTransferHelper"],
[sepolia.id, "MAGIC"],
],
prod: [],
},
},
realm: {
local: ["http://localhost:3000"],
dev: ["https://app-testnet.treasure.lol"],
prod: ["https://app.treasure.lol"],
metadata: {
name: "Realm",
},
redirectUris: {
local: [],
dev: [],
prod: [],
},
callTargets: {
dev: [],
prod: [],
},
},
zeeverse: {
local: [
"http://localhost:5174",
"http://localhost:3000/harvesters/zeeverse",
],
dev: [
"https://tdk-examples-harvester.vercel.app",
"https://bridgeworld-staging.treasure.lol/harvesters/zeeverse",
],
prod: ["https://bridgeworld.treasure.lol/harvesters/zeeverse"],
metadata: {
name: "Zeeverse",
icon: "https://images.treasure.lol/tdk/login/zeeverse_icon.png",
},
redirectUris: {
local: [
"http://localhost:5174",
"http://localhost:3000/harvesters/zeeverse",
],
dev: [
"https://tdk-examples-harvester.vercel.app",
"https://bridgeworld-staging.treasure.lol/harvesters/zeeverse",
],
prod: ["https://bridgeworld.treasure.lol/harvesters/zeeverse"],
},
callTargets: {
dev: [
[arbitrumSepolia.id, "MAGIC"],
[arbitrumSepolia.id, "VEE"],
[arbitrumSepolia.id, "Consumables"],
[arbitrumSepolia.id, "Legions"],
[arbitrumSepolia.id, "CorruptionRemoval"],
[arbitrumSepolia.id, "ERC1155TokenSetCorruptionHandler"],
[arbitrumSepolia.id, "HarvesterEmberwing"],
[arbitrumSepolia.id, "NftHandlerEmberwing"],
[arbitrumSepolia.id, "ZeeverseZee"],
[arbitrumSepolia.id, "ZeeverseItems"],
[arbitrumSepolia.id, "ZeeverseVeeClaimer"],
[arbitrumSepolia.id, "BulkTransferHelper"],
],
prod: [
[arbitrum.id, "MAGIC"],
[arbitrum.id, "VEE"],
[arbitrum.id, "Consumables"],
[arbitrum.id, "Legions"],
[arbitrum.id, "CorruptionRemoval"],
[arbitrum.id, "ERC1155TokenSetCorruptionHandler"],
[arbitrum.id, "HarvesterEmberwing"],
[arbitrum.id, "NftHandlerEmberwing"],
[arbitrum.id, "ZeeverseZee"],
[arbitrum.id, "ZeeverseItems"],
[arbitrum.id, "ZeeverseVeeClaimer"],
[arbitrum.id, "BulkTransferHelper"],
],
},
},
};

const CALL_TARGETS: Record<string, [number, Contract][]> = {
app: [
[arbitrumSepolia.id, "MAGIC"],
[sepolia.id, "MAGIC"],
],
realm: [[arbitrumSepolia.id, "MAGIC"]],
zeeverse: [
[arbitrumSepolia.id, "MAGIC"],
[arbitrumSepolia.id, "Consumables"],
[arbitrumSepolia.id, "Legions"],
[arbitrumSepolia.id, "CorruptionRemoval"],
[arbitrumSepolia.id, "ERC1155TokenSetCorruptionHandler"],
[arbitrumSepolia.id, "HarvesterEmberwing"],
[arbitrumSepolia.id, "NftHandlerEmberwing"],
[arbitrumSepolia.id, "ZeeverseZee"],
[arbitrumSepolia.id, "ZeeverseItems"],
[arbitrumSepolia.id, "BulkTransferHelper"],
[arbitrum.id, "MAGIC"],
[arbitrum.id, "Consumables"],
[arbitrum.id, "Legions"],
[arbitrum.id, "CorruptionRemoval"],
[arbitrum.id, "ERC1155TokenSetCorruptionHandler"],
[arbitrum.id, "HarvesterEmberwing"],
[arbitrum.id, "NftHandlerEmberwing"],
[arbitrum.id, "ZeeverseZee"],
[arbitrum.id, "ZeeverseItems"],
[arbitrum.id, "BulkTransferHelper"],
],
};

const prisma = new PrismaClient();

const createProject = ({
const createProject = async ({
slug,
metadata,
redirectUris = [],
Expand All @@ -102,12 +162,11 @@ const createProject = ({
);
}

const callTarget = { chainId, address };
return {
where: {
chainId_address: callTarget,
chainId_address: { chainId, address },
},
create: callTarget,
create: { chainId, address },
};
}),
},
Expand All @@ -124,12 +183,19 @@ const createProject = ({
const environment = (args[0] as Environment) ?? "local";

try {
for (const slug of Object.keys(METADATA)) {
// Clear all call targets
await prisma.callTarget.deleteMany();

// Upsert projects
for (const [
slug,
{ metadata, redirectUris, callTargets },
] of Object.entries(PROJECT_DATA)) {
await createProject({
slug,
metadata: METADATA[slug],
redirectUris: REDIRECT_URIS[slug][environment],
callTargets: CALL_TARGETS[slug],
metadata,
redirectUris: redirectUris[environment],
callTargets: callTargets[environment === "local" ? "dev" : environment],
});
}

Expand Down
1 change: 0 additions & 1 deletion apps/login/.env.example
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
VITE_TDK_API_URL=http://localhost:8080
VITE_THIRDWEB_AUTH_DOMAIN=localhost:5173
VITE_THIRDWEB_CLIENT_ID=
2 changes: 0 additions & 2 deletions apps/login/app/utils/env.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
export const env = {
VITE_TDK_API_URL: import.meta.env.VITE_TDK_API_URL as string,
VITE_THIRDWEB_AUTH_DOMAIN: import.meta.env
.VITE_THIRDWEB_AUTH_DOMAIN as string,
VITE_THIRDWEB_CLIENT_ID: import.meta.env.VITE_THIRDWEB_CLIENT_ID as string,
};
51 changes: 46 additions & 5 deletions packages/core/src/constants.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
import { zeroAddress } from "viem";
import { defineChain, zeroAddress } from "viem";
import { arbitrum, arbitrumSepolia, mainnet, sepolia } from "viem/chains";

import type { AddressString, Contract } from "./types";

export const PLATFORM_API_BASE_URI = "https://trove-api.treasure.lol";

// Default values
export const DEFAULT_TDK_API_BASE_URI = "https://tdk-api.treasure.lol";
export const DEFAULT_TDK_APP = "app";
export const DEFAULT_TDK_CHAIN_ID = arbitrum.id;
export const DEFAULT_TDK_LOGIN_DOMAIN = "https://login.treasure.lol";

// APIs
export const PLATFORM_API_BASE_URI = "https://trove-api.treasure.lol";

export const BRIDGEWORLD_API_URL = {
[arbitrum.id]:
"https://api.goldsky.com/api/public/project_clrm53zqegpoi01x18coz2fb5/subgraphs/bridgeworld/live/gn",
Expand All @@ -24,14 +26,41 @@ export const BRIDGEWORLD_CORRUPTION_API_URL = {
"https://api.goldsky.com/api/public/project_clrm53zqegpoi01x18coz2fb5/subgraphs/bridgeworld-corruption-dev/live/gn",
} as const;

// Chains
export const TREASURE_RUBY_CHAIN_DEFINITION = {
id: 978_657,
name: "Treasure Ruby",
nativeCurrency: {
name: "MAGIC",
symbol: "MAGIC",
decimals: 18,
},
rpcUrls: {
default: {
http: ["https://rpc-testnet.treasure.lol/http"],
},
},
blockExplorers: {
default: {
name: "Treasurescan",
url: "https://testnet.treasurescan.io",
apiUrl: "https://testnet.treasurescan.io/node-api/proxy/api/v2",
},
},
testnet: true,
};
export const treasureRuby = defineChain(TREASURE_RUBY_CHAIN_DEFINITION);

export const SUPPORTED_CHAINS = [
arbitrum,
arbitrumSepolia,
mainnet,
sepolia,
treasureRuby,
] as const;
export const SUPPORTED_CHAIN_IDS = SUPPORTED_CHAINS.map(({ id }) => id);

// Tokens
export const TOKEN_IDS = {
Consumables: {
SmallPrism: 1n,
Expand Down Expand Up @@ -107,6 +136,7 @@ export const TOKEN_IDS = {
},
} as const;

// Contracts
export const CONTRACT_ADDRESSES: Record<
number,
Partial<Record<Contract, AddressString>>
Expand All @@ -115,6 +145,7 @@ export const CONTRACT_ADDRESSES: Record<
// Tokens
MAGIC: "0x539bde0d7dbd336b79148aa742883198bbf60342",
ARB: "0x912ce59144191c1204e64559fe8253a0e49e6548",
VEE: "0x0caadd427a6feb5b5fc1137eb05aa7ddd9c08ce9",
// Price feeds
MAGICUSDPriceFeed: "0x47e55ccec6582838e173f252d08afd8116c2202d",
ARBUSDPriceFeed: "0xb2a824043730fe05f3da2efafa1cbbe83fa548d6",
Expand Down Expand Up @@ -147,17 +178,19 @@ export const CONTRACT_ADDRESSES: Record<
NftHandlerThundermane: "0x0c73a18364850239571afca78dd5d39193f288be",
// Treasure Misc
PaymentsModule: "0xf325ac5c9dc74a3c3b7f2474a709154e9f6bc194",
ManagedAccountFactory: "0x463effB51873C7720c810AC7Fb2e145Ec2f8Cc60",
ManagedAccountFactory: "0x463effb51873c7720c810ac7fb2e145ec2f8cc60",
BulkTransferHelper: "0x0000000000c2d145a2526bd8c716263bfebe1a72",
TreasureConduit: "0x8bf85fa9213647ec3485afd9dd5888b4db017434",
// Zeeverse
ZeeverseZee: "0x094fa8ae08426ab180e71e60fa253b079e13b9fe",
ZeeverseItems: "0x58318bceaa0d249b62fad57d134da7475e551b47",
ZeeverseVeeClaimer: "0x1cebdde81a9e4cd377bc7da5000797407cf9a58a",
},
[arbitrumSepolia.id]: {
// Tokens
MAGIC: "0x55d0cf68a1afe0932aff6f36c87efa703508191c",
ARB: zeroAddress,
VEE: "0x23be0504127475387a459fe4b01e54f1e336ffae",
// Price feeds
MAGICUSDPriceFeed: "0x0fb99723aee6f420bead13e6bbb79b7e6f034298",
ARBUSDPriceFeed: zeroAddress,
Expand Down Expand Up @@ -190,17 +223,25 @@ export const CONTRACT_ADDRESSES: Record<
NftHandlerThundermane: "0x00a191804f5bc4942828ae8cde937a4b644d53cf",
// Treasure Misc
PaymentsModule: "0x06e308c2ed6168afd158a4b495b084e9677f4e1d",
ManagedAccountFactory: "0xae7f7e9286f5f9ede167a19d1d605df4fdbc417b",
ManagedAccountFactory: "0x463effb51873c7720c810ac7fb2e145ec2f8cc60",
BulkTransferHelper: "0x0000000000c2d145a2526bd8c716263bfebe1a72",
TreasureConduit: "0x74c4ed7e3bcbdf8e32b56d4d11d2cbd34ad4dc0b",
// Zeeverse
ZeeverseZee: "0xb1af672c7e0e8880c066ecc24930a12ff2ee8534",
ZeeverseItems: "0xfaad5aa3209ab1b25ede22ed4da5521538b649fa",
ZeeverseVeeClaimer: "0xf7abce65b1e683b7a42113f69ef76ee35cabbddc",
},
[mainnet.id]: {},
[sepolia.id]: {
// Tokens
MAGIC: "0x013cb2854daad8203c6686682f5d876e5d3de4a2",
// Treasure Misc
ManagedAccountFactory: "0x463effb51873c7720c810ac7fb2e145ec2f8cc60",
},
[treasureRuby.id]: {
// Treasure Misc
ManagedAccountFactory: "0x463effb51873c7720c810ac7fb2e145ec2f8cc60",
RubyNFT: "0x76c3b527b711a3b6aa01e4f76ec34b41a671ca29",
},
};

Expand Down
Loading

0 comments on commit c5dc87b

Please sign in to comment.