Skip to content

Commit 69d6492

Browse files
authored
Merge pull request #21 from sourcifyeth/staging
Release
2 parents 7632ed1 + 2b783d8 commit 69d6492

File tree

7 files changed

+154
-52
lines changed

7 files changed

+154
-52
lines changed

public/evm-storage.png

9.44 KB
Loading

public/monvision.svg

Lines changed: 9 additions & 0 deletions
Loading

public/parsec.jpg

5.9 KB
Loading

public/ronin.svg

Lines changed: 15 additions & 0 deletions
Loading

src/data/integrations.json

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
[
2+
{
3+
"name": "Blockscout",
4+
"url": "https://docs.blockscout.com/devs/verification/contracts-verification-via-sourcify",
5+
"logo": "/blockscout.png"
6+
},
7+
{
8+
"name": "Otterscan",
9+
"url": "https://docs.otterscan.io/contract-verification/sourcify/",
10+
"logo": "/otterscan.jpg"
11+
},
12+
{
13+
"name": "Wagmi",
14+
"url": "https://wagmi.sh/cli/api/plugins/sourcify#sourcify",
15+
"logo": "/wagmi.png"
16+
},
17+
{
18+
"name": "DexGuru Explorer",
19+
"url": "https://ethereum.dex.guru/verifyContract",
20+
"logo": "/dexGuru.svg"
21+
},
22+
{
23+
"name": "Chainlens",
24+
"url": "https://www.chainlens.com/documentation-articles/source-code-verification",
25+
"logo": "/chainlens.png"
26+
},
27+
{
28+
"name": "Hedera Hashscan",
29+
"url": "https://hedera.com/blog/smart-contract-verification-on-hedera",
30+
"logo": "/hashscan.webp"
31+
},
32+
{
33+
"name": "BuildBear",
34+
"url": "https://www.buildbear.io/blogs/sourcify_plugin",
35+
"logo": "/buildbear.jpg"
36+
},
37+
{
38+
"name": "Avalanche Explorer",
39+
"url": "https://support.avax.network/en/articles/6333375-explorer-how-do-i-manage-smart-contracts",
40+
"logo": "/avalanche.svg"
41+
},
42+
{
43+
"name": "Graph CLI",
44+
"url": "https://x.com/graphprotocol/status/1897291358114897929",
45+
"logo": "/graph-dev.jpg"
46+
},
47+
{
48+
"name": "Wake",
49+
"url": "https://github.com/Ackee-Blockchain/wake/releases/tag/v4.14.0",
50+
"logo": "/wake-logo.png"
51+
},
52+
{
53+
"name": "EVM Storage",
54+
"url": "https://evm-storage.codes/",
55+
"logo": "/evm-storage.png"
56+
}
57+
]

src/data/selfHostedInstances.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
[
2+
{
3+
"name": "Ronin Chain",
4+
"logo": "/ronin.svg",
5+
"url": "https://sourcify.roninchain.com/server"
6+
},
7+
{
8+
"name": "Hashscan",
9+
"logo": "/hashscan.webp",
10+
"url": "https://server-verify.hashscan.io"
11+
},
12+
{
13+
"name": "MonVision Explorer",
14+
"logo": "/monvision.svg",
15+
"url": "https://sourcify-api-monad.blockvision.org"
16+
},
17+
{
18+
"name": "Parsec",
19+
"logo": "/parsec.jpg",
20+
"url": "https://sourcify.parsec.finance"
21+
}
22+
]

src/pages/LandingPage/Tooling.tsx

Lines changed: 51 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ import bashLang from "react-syntax-highlighter/dist/esm/languages/prism/bash";
44
import javascriptLang from "react-syntax-highlighter/dist/esm/languages/prism/javascript";
55
import codeStyle from "react-syntax-highlighter/dist/esm/styles/prism/dracula";
66
import { motion, useInView } from "framer-motion";
7+
import integrationsData from "../../data/integrations.json";
8+
import selfHostedInstancesData from "../../data/selfHostedInstances.json";
9+
import Button from "../../components/Button";
710

811
// Register languages
912
SyntaxHighlighter.registerLanguage("bash", bashLang);
@@ -13,6 +16,8 @@ export default function Tooling() {
1316
const [activeTab, setActiveTab] = useState("foundry");
1417
const integrationsRef = useRef(null);
1518
const areIntegrationsInView = useInView(integrationsRef, { once: true });
19+
const selfHostedRef = useRef(null);
20+
const areSelfHostedInView = useInView(selfHostedRef, { once: true });
1621
const [displayedCode, setDisplayedCode] = useState("");
1722
const codeRef = useRef(null);
1823
const isCodeInView = useInView(codeRef, { once: true });
@@ -22,58 +27,8 @@ export default function Tooling() {
2227
const areTabsInView = useInView(tabsRef, { once: true });
2328

2429
const tabs = ["foundry", "hardhat", "remix"];
25-
const integrations = [
26-
{
27-
name: "Blockscout",
28-
url: "https://docs.blockscout.com/devs/verification/contracts-verification-via-sourcify",
29-
logo: "/blockscout.png",
30-
},
31-
{
32-
name: "Otterscan",
33-
url: "https://docs.otterscan.io/contract-verification/sourcify/",
34-
logo: "/otterscan.jpg",
35-
},
36-
{
37-
name: "Wagmi",
38-
url: "https://wagmi.sh/cli/api/plugins/sourcify#sourcify",
39-
logo: "/wagmi.png",
40-
},
41-
{
42-
name: "DexGuru Explorer",
43-
url: "https://ethereum.dex.guru/verifyContract",
44-
logo: "/dexGuru.svg",
45-
},
46-
{
47-
name: "Chainlens",
48-
url: "https://www.chainlens.com/documentation-articles/source-code-verification",
49-
logo: "/chainlens.png",
50-
},
51-
{
52-
name: "Hedera Hashscan",
53-
url: "https://hedera.com/blog/smart-contract-verification-on-hedera",
54-
logo: "/hashscan.webp",
55-
},
56-
{
57-
name: "BuildBear",
58-
url: "https://www.buildbear.io/blogs/sourcify_plugin",
59-
logo: "/buildbear.jpg",
60-
},
61-
{
62-
name: "Avalanche Explorer",
63-
url: "https://support.avax.network/en/articles/6333375-explorer-how-do-i-manage-smart-contracts",
64-
logo: "/avalanche.svg",
65-
},
66-
{
67-
name: "Graph CLI",
68-
url: "https://x.com/graphprotocol/status/1897291358114897929",
69-
logo: "/graph-dev.jpg",
70-
},
71-
{
72-
name: "Wake",
73-
url: "https://github.com/Ackee-Blockchain/wake/releases/tag/v4.14.0",
74-
logo: "/wake-logo.png",
75-
},
76-
];
30+
const integrations = integrationsData;
31+
const selfHostedInstances = selfHostedInstancesData;
7732

7833
const foundryExample = `# Deploy and verify
7934
$ forge create --rpc-url <rpc-url> --private-key <private-key> src/MyContract.sol:MyContract --verify --verifier sourcify
@@ -317,6 +272,50 @@ $ npx hardhat verify --network mainnet 0x1F98431c8aD98523631AE4a59f267346ea31F98
317272
))}
318273
</div>
319274
</div>
275+
276+
<div className="text-center mx-4">
277+
<h2 className="text-4xl md:text-6xl font-bold text-ceruleanBlue-500 mb-4">Self-hosting</h2>
278+
<p className="text-base md:text-lg text-gray-600 mb-12">
279+
Sourcify is open-source and for self-hosting. Here are some public instances we are aware of:
280+
</p>
281+
<div className="flex flex-wrap justify-center gap-2 md:gap-8 mt-12 mx-2" ref={selfHostedRef}>
282+
{selfHostedInstances
283+
.sort((a, b) => a.name.localeCompare(b.name))
284+
.map((instance, index) => (
285+
<motion.a
286+
initial={{ opacity: 0 }}
287+
animate={
288+
areSelfHostedInView
289+
? {
290+
opacity: 1,
291+
y: [0, 0, -20],
292+
transition: { duration: 0.6, delay: index * 0.1 },
293+
}
294+
: { opacity: 0 }
295+
}
296+
whileHover={{ scale: 1.1, transition: { duration: 0.1, delay: 0 } }}
297+
href={instance.url + "/health"}
298+
target="_blank"
299+
rel="noopener noreferrer"
300+
key={instance.name}
301+
className="w-16 flex flex-col items-center text-center"
302+
>
303+
<img src={instance.logo} alt={instance.name} className="w-10 h-10 md:w-14 md:h-14 rounded-full" />
304+
<div className="text-gray-700 text-xs md:text-sm mt-1 text-wrap">{instance.name}</div>
305+
</motion.a>
306+
))}
307+
</div>
308+
<div className="mb-8 mt-4">
309+
<div className="text-gray-500 mb-2 text-sm">Are you running a self-hosted instance?</div>
310+
<a
311+
href="https://github.com/ethereum/sourcify/issues/new?template=self-hosted-instance.md"
312+
target="_blank"
313+
rel="noopener noreferrer"
314+
>
315+
<Button className="font-semibold">Add your instance</Button>
316+
</a>
317+
</div>
318+
</div>
320319
</section>
321320
);
322321
}

0 commit comments

Comments
 (0)