Reorg Sourcify code
This commit is contained in:
parent
971554fe82
commit
d3618c2691
|
@ -2,7 +2,7 @@ import React, { useMemo, useState } from "react";
|
|||
import { Outlet } from "react-router-dom";
|
||||
import Header from "./Header";
|
||||
import { AppConfig, AppConfigContext } from "./useAppConfig";
|
||||
import { SourcifySource } from "./url";
|
||||
import { SourcifySource } from "./sourcify/useSourcify";
|
||||
|
||||
const Main: React.FC = () => {
|
||||
const [sourcifySource, setSourcifySource] = useState<SourcifySource>(
|
||||
|
|
|
@ -2,8 +2,8 @@ import React, { PropsWithChildren } from "react";
|
|||
import { Menu } from "@headlessui/react";
|
||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||
import { faBars } from "@fortawesome/free-solid-svg-icons/faBars";
|
||||
import { SourcifySource } from "./url";
|
||||
import { useAppConfigContext } from "./useAppConfig";
|
||||
import { SourcifySource } from "./sourcify/useSourcify";
|
||||
|
||||
const SourcifyMenu: React.FC = () => {
|
||||
const { sourcifySource, setSourcifySource } = useAppConfigContext();
|
||||
|
|
|
@ -3,7 +3,6 @@ import { Interface } from "@ethersproject/abi";
|
|||
import { ErrorDescription } from "@ethersproject/abi/lib/interface";
|
||||
import useSWRImmutable from "swr/immutable";
|
||||
import { ChecksummedAddress, TransactionData } from "../types";
|
||||
import { sourcifyMetadata, SourcifySource, sourcifySourceFile } from "../url";
|
||||
import { useAppConfigContext } from "../useAppConfig";
|
||||
|
||||
export type UserMethod = {
|
||||
|
@ -82,6 +81,55 @@ export type Metadata = {
|
|||
};
|
||||
};
|
||||
|
||||
export enum SourcifySource {
|
||||
// Resolve trusted IPNS for root IPFS
|
||||
IPFS_IPNS,
|
||||
|
||||
// Centralized Sourcify servers
|
||||
CENTRAL_SERVER,
|
||||
}
|
||||
|
||||
const sourcifyIPNS =
|
||||
"k51qzi5uqu5dll0ocge71eudqnrgnogmbr37gsgl12uubsinphjoknl6bbi41p";
|
||||
const defaultIpfsGatewayPrefix = `https://ipfs.io/ipns/${sourcifyIPNS}`;
|
||||
const sourcifyHttpRepoPrefix = `https://repo.sourcify.dev`;
|
||||
|
||||
const resolveSourcifySource = (source: SourcifySource) => {
|
||||
if (source === SourcifySource.IPFS_IPNS) {
|
||||
return defaultIpfsGatewayPrefix;
|
||||
}
|
||||
if (source === SourcifySource.CENTRAL_SERVER) {
|
||||
return sourcifyHttpRepoPrefix;
|
||||
}
|
||||
|
||||
throw new Error(`Unknown Sourcify integration source code: ${source}`);
|
||||
};
|
||||
|
||||
/**
|
||||
* Builds a complete Sourcify metadata.json URL given the contract address
|
||||
* and chain.
|
||||
*/
|
||||
export const sourcifyMetadata = (
|
||||
address: ChecksummedAddress,
|
||||
chainId: number,
|
||||
source: SourcifySource,
|
||||
type: MatchType
|
||||
) =>
|
||||
`${resolveSourcifySource(source)}/contracts/${
|
||||
type === MatchType.FULL_MATCH ? "full_match" : "partial_match"
|
||||
}/${chainId}/${address}/metadata.json`;
|
||||
|
||||
export const sourcifySourceFile = (
|
||||
address: ChecksummedAddress,
|
||||
chainId: number,
|
||||
filepath: string,
|
||||
source: SourcifySource,
|
||||
type: MatchType
|
||||
) =>
|
||||
`${resolveSourcifySource(source)}/contracts/${
|
||||
type === MatchType.FULL_MATCH ? "full_match" : "partial_match"
|
||||
}/${chainId}/${address}/sources/${filepath}`;
|
||||
|
||||
export enum MatchType {
|
||||
FULL_MATCH,
|
||||
PARTIAL_MATCH,
|
||||
|
|
50
src/url.ts
50
src/url.ts
|
@ -1,5 +1,4 @@
|
|||
import { BlockTag } from "@ethersproject/abstract-provider";
|
||||
import { MatchType } from "./sourcify/useSourcify";
|
||||
import { ChecksummedAddress } from "./types";
|
||||
|
||||
export const fourBytesURL = (
|
||||
|
@ -30,54 +29,5 @@ export const transactionURL = (txHash: string) => `/tx/${txHash}`;
|
|||
export const addressByNonceURL = (address: ChecksummedAddress, nonce: number) =>
|
||||
`/address/${address}?nonce=${nonce}`;
|
||||
|
||||
export enum SourcifySource {
|
||||
// Resolve trusted IPNS for root IPFS
|
||||
IPFS_IPNS,
|
||||
|
||||
// Centralized Sourcify servers
|
||||
CENTRAL_SERVER,
|
||||
}
|
||||
|
||||
const sourcifyIPNS =
|
||||
"k51qzi5uqu5dll0ocge71eudqnrgnogmbr37gsgl12uubsinphjoknl6bbi41p";
|
||||
const defaultIpfsGatewayPrefix = `https://ipfs.io/ipns/${sourcifyIPNS}`;
|
||||
const sourcifyHttpRepoPrefix = `https://repo.sourcify.dev`;
|
||||
|
||||
const resolveSourcifySource = (source: SourcifySource) => {
|
||||
if (source === SourcifySource.IPFS_IPNS) {
|
||||
return defaultIpfsGatewayPrefix;
|
||||
}
|
||||
if (source === SourcifySource.CENTRAL_SERVER) {
|
||||
return sourcifyHttpRepoPrefix;
|
||||
}
|
||||
|
||||
throw new Error(`Unknown Sourcify integration source code: ${source}`);
|
||||
};
|
||||
|
||||
/**
|
||||
* Builds a complete Sourcify metadata.json URL given the contract address
|
||||
* and chain.
|
||||
*/
|
||||
export const sourcifyMetadata = (
|
||||
address: ChecksummedAddress,
|
||||
chainId: number,
|
||||
source: SourcifySource,
|
||||
type: MatchType
|
||||
) =>
|
||||
`${resolveSourcifySource(source)}/contracts/${
|
||||
type === MatchType.FULL_MATCH ? "full_match" : "partial_match"
|
||||
}/${chainId}/${address}/metadata.json`;
|
||||
|
||||
export const sourcifySourceFile = (
|
||||
address: ChecksummedAddress,
|
||||
chainId: number,
|
||||
filepath: string,
|
||||
source: SourcifySource,
|
||||
type: MatchType
|
||||
) =>
|
||||
`${resolveSourcifySource(source)}/contracts/${
|
||||
type === MatchType.FULL_MATCH ? "full_match" : "partial_match"
|
||||
}/${chainId}/${address}/sources/${filepath}`;
|
||||
|
||||
export const openInRemixURL = (checksummedAddress: string, networkId: number) =>
|
||||
`https://remix.ethereum.org/#activate=sourcify&call=sourcify//fetchAndSave//${checksummedAddress}//${networkId}`;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import React, { useContext } from "react";
|
||||
import { SourcifySource } from "./url";
|
||||
import { SourcifySource } from "./sourcify/useSourcify";
|
||||
|
||||
export type AppConfig = {
|
||||
sourcifySource: SourcifySource;
|
||||
|
|
Loading…
Reference in New Issue