mirror of
https://github.com/bitcoin-s/bitcoin-s.git
synced 2024-11-20 02:11:40 +01:00
249 lines
8.0 KiB
JavaScript
249 lines
8.0 KiB
JavaScript
/**
|
|
* Copyright (c) 2017-present, Facebook, Inc.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
const React = require("react");
|
|
|
|
const CompLibrary = require("../../core/CompLibrary.js");
|
|
|
|
const MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */
|
|
const Container = CompLibrary.Container;
|
|
const GridBlock = CompLibrary.GridBlock;
|
|
|
|
const Logo = props => (
|
|
<div className="projectLogo">
|
|
<img src={props.img_src} alt="Project Logo" />
|
|
</div>
|
|
);
|
|
|
|
class HomeSplash extends React.Component {
|
|
render() {
|
|
const { siteConfig, language = "" } = this.props;
|
|
const { baseUrl, docsUrl } = siteConfig;
|
|
const docsPart = `${docsUrl ? `${docsUrl}/` : ""}`;
|
|
const langPart = `${language ? `${language}/` : ""}`;
|
|
const docUrl = doc => `${baseUrl}${docsPart}${langPart}${doc}`;
|
|
|
|
const SplashContainer = props => (
|
|
<div className="homeContainer">
|
|
<div className="homeSplashFade">
|
|
<div className="wrapper homeWrapper">{props.children}</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
|
|
const ProjectTitle = () => (
|
|
<h2 className="projectTitle">
|
|
<small>{siteConfig.tagline}</small>
|
|
</h2>
|
|
);
|
|
|
|
const PromoSection = props => (
|
|
<div className="section promoSection">
|
|
<div className="promoRow">
|
|
<div className="pluginRowBlock">{props.children}</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
|
|
return (
|
|
<SplashContainer>
|
|
<div className="inner">
|
|
<ProjectTitle siteConfig={siteConfig} />
|
|
<PromoSection>
|
|
{/*
|
|
<Button href="#try">Try It Out</Button>
|
|
<Button href={docUrl("doc1.html")}>Example Link</Button>
|
|
<Button href={docUrl("doc2.html")}>Example Link 2</Button> */}
|
|
</PromoSection>
|
|
</div>
|
|
</SplashContainer>
|
|
);
|
|
}
|
|
}
|
|
|
|
class Index extends React.Component {
|
|
render() {
|
|
const { config: siteConfig, language = "" } = this.props;
|
|
const { baseUrl, docsUrl } = siteConfig;
|
|
const docsPart = `${docsUrl ? `${docsUrl}/` : ""}`;
|
|
const langPart = `${language ? `${language}/` : ""}`;
|
|
const docUrl = doc => `${baseUrl}${docsPart}${langPart}${doc}`;
|
|
|
|
const Block = props => (
|
|
<Container
|
|
padding={["bottom", "top"]}
|
|
id={props.id}
|
|
background={props.background}
|
|
>
|
|
<GridBlock
|
|
align="center"
|
|
contents={props.children}
|
|
layout={props.layout}
|
|
/>
|
|
</Container>
|
|
);
|
|
|
|
const Button = props => (
|
|
<div style={props.style} className="pluginWrapper buttonWrapper">
|
|
<a className="dark-button" href={props.href} target={props.target}>
|
|
{props.children}
|
|
</a>
|
|
</div>
|
|
);
|
|
|
|
// cribbed from Bloop site, https://github.com/scalacenter/bloop/blob/6b5384241d1bba4143315e66f668876d65a2e34f/website/pages/en/index.js#L92
|
|
const Hero = ({ siteConfig }) => (
|
|
<div className="hero">
|
|
<div className="hero__container">
|
|
<Logo img_src={`${siteConfig.baseUrl}img/bitcoin-s-logo.svg`} />
|
|
<h1>{siteConfig.tagline}</h1>
|
|
<Button href={docUrl("getting-started")}>Get started</Button>
|
|
</div>
|
|
</div>
|
|
);
|
|
|
|
const TryOut = () => (
|
|
<Block id="try">
|
|
{[
|
|
{
|
|
content: [
|
|
"Use our RPC clients for `bitcoind`/Bitcoin Core and Eclair, and get powerful",
|
|
"static typing baked into your RPC calls. All returned values you get from `bitcoind`",
|
|
"and Eclair are converted into native Bitcoin/Lightning data structures for you.",
|
|
"Is that raw hex string you've been passing around a transaction or a Lightning invoice?",
|
|
"With Bitcoin-S you get both confidence in your code _and_ powerful methods available",
|
|
"on your data"
|
|
].join(" "),
|
|
image: `${baseUrl}img/undraw_target_kriv.svg`,
|
|
imageAlign: "left",
|
|
title: "Super-powered RPC clients"
|
|
}
|
|
]}
|
|
</Block>
|
|
);
|
|
|
|
const Description = () => (
|
|
<Block background="dark">
|
|
{[
|
|
{
|
|
content: [
|
|
"Bitcoin-S is used in production today, facilitating transactions and systems handling",
|
|
"millions of dollars each day. It has a very high degree of code coverage,",
|
|
"with unit tests, property based tests and integration tests."
|
|
].join(" "),
|
|
image: `${baseUrl}img/undraw_Security_on_s9ym.svg`,
|
|
imageAlign: "right",
|
|
title: "Battle tested, high quality code"
|
|
}
|
|
]}
|
|
</Block>
|
|
);
|
|
|
|
const LearnHow = () => (
|
|
<Block background="light">
|
|
{[
|
|
{
|
|
content: [
|
|
"We provide solid APIs for constructing and signing transactions.",
|
|
"From small-scale 1-in 2-out transactions, to custom logic powering exchange withdrawals, we've got you covered.",
|
|
"Check out our [`TxBuilder` example](docs/core/txbuilder) to see how."
|
|
].join(" "),
|
|
image: `${baseUrl}img/undraw_transfer_money_rywa.svg`,
|
|
imageAlign: "right",
|
|
title: "Construct and sign bitcoin transactions"
|
|
}
|
|
]}
|
|
</Block>
|
|
);
|
|
|
|
const Features = () => (
|
|
<Block layout="fourColumn">
|
|
{[
|
|
{
|
|
content: [
|
|
"Bitcoin-S allows you to interact with data structures found in the",
|
|
"Bitcoin and Lightning protocols as first-class citizens of your app.",
|
|
"Go back and forth between hex, byte and JVM representation trivially,",
|
|
"letting our abstractions focus on what you want to build"
|
|
].join(" "),
|
|
image: `${baseUrl}img/undraw_digital_currency_qpak.svg`,
|
|
imageAlign: "top",
|
|
title: "Deep protocol understanding"
|
|
},
|
|
{
|
|
content: [
|
|
"Code with confidence, knowing your data won't change under you. All",
|
|
"data structures in Bitcoin-S are immutable. This eliminates a big",
|
|
"range of bugs right away, and enable you to write concurrent code",
|
|
"much easier"
|
|
].join(" "),
|
|
image: `${baseUrl}img/undraw_code_review_l1q9.svg`,
|
|
imageAlign: "top",
|
|
title: "Immutable data structures"
|
|
},
|
|
{
|
|
content: [
|
|
"Get the compiler to work for you, ensuring your logic covers all cases.",
|
|
"Modelling your application with mathematically founded types enables greater confidence in the correctness of your code"
|
|
].join(" "),
|
|
image: `${baseUrl}img/undraw_mathematics_4otb.svg`,
|
|
imageAlign: "top",
|
|
title: "Algebraic data types"
|
|
}
|
|
]}
|
|
</Block>
|
|
);
|
|
|
|
const Showcase = () => {
|
|
if ((siteConfig.users || []).length === 0) {
|
|
return null;
|
|
}
|
|
|
|
const showcase = siteConfig.users
|
|
.filter(user => user.pinned)
|
|
.map(user => (
|
|
<a href={user.infoLink} key={user.infoLink}>
|
|
<img src={user.image} alt={user.caption} title={user.caption} />
|
|
</a>
|
|
));
|
|
|
|
const pageUrl = page => baseUrl + (language ? `${language}/` : "") + page;
|
|
|
|
return (
|
|
<div className="productShowcaseSection paddingBottom">
|
|
<h2>Who is using Bitcoin-S?</h2>
|
|
<p>
|
|
Bitcoin-S is used in production applications, by both small and
|
|
large companies
|
|
</p>
|
|
<div className="logos">{showcase}</div>
|
|
<div className="more-users">
|
|
<a className="button" href={pageUrl("users.html")}>
|
|
Read more
|
|
</a>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
return (
|
|
<div>
|
|
<Hero siteConfig={siteConfig} />
|
|
<div className="mainContainer">
|
|
<Features />
|
|
<LearnHow />
|
|
<TryOut />
|
|
<Description />
|
|
<Showcase />
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
}
|
|
|
|
module.exports = Index;
|