Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Utxorpc #341

Merged
merged 9 commits into from
Oct 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added apps/playground/public/providers/utxo-rpc.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,14 @@ export default function BlockchainProviderCodeSnippet() {
codeMaestro += ` turboSubmit: false // Read about paid turbo transaction submission feature at https://docs.gomaestro.org/docs/Dapp%20Platform/Turbo%20Transaction.\n`;
codeMaestro += `});\n`;

let codeU5c = `import { U5CProvider } from "@meshsdk/core";\n\n`;
codeU5c += `const blockchainProvider = new U5CProvider({\n`;
codeU5c += ` url: "http://localhost:5005U5c",\n`;
codeU5c += ` headers: {\n`;
codeU5c += ` "dmtr-api-key": "<api-key>",\n`;
codeU5c += ` },\n`;
codeU5c += `});\n`;

let code = codeBF;
if (blockchainProvider == "koios") {
code = codeKoios;
Expand All @@ -36,6 +44,9 @@ export default function BlockchainProviderCodeSnippet() {
if (blockchainProvider == "maestro") {
code = codeMaestro;
}
if (blockchainProvider == "utxorpc") {
code = codeU5c;
}

return (
<>
Expand All @@ -56,6 +67,11 @@ export default function BlockchainProviderCodeSnippet() {
label: "Koios",
onClick: () => setBlockchainProvider("koios"),
},
{
key: "utxorpc",
label: "UTxORPC",
onClick: () => setBlockchainProvider("utxorpc"),
},
]}
currentSelected={blockchainProvider}
/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ export default function BlockchainProviderKey({
const setYaciUrl = useProviders((state) => state.setYaciUrl);
const ogmiosUrl = useProviders((state) => state.ogmiosUrl);
const setOgmiosUrl = useProviders((state) => state.setOgmiosUrl);
const utxorpc = useProviders((state) => state.utxorpc);
const setUTxORPC = useProviders((state) => state.setUTxORPC);
const hydraUrl = useProviders((state) => state.hydraUrl);
const setHydraUrl = useProviders((state) => state.setHydraUrl);

Expand Down Expand Up @@ -167,5 +169,29 @@ export default function BlockchainProviderKey({
);
}

if (provider == "utxorpc") {
return (
<InputTable
listInputs={[
<Input
value={utxorpc.url}
onChange={(e) => setUTxORPC(e.target.value, utxorpc.key)}
placeholder="Instance URL"
label="Instance URL"
key={0}
/>,
<Input
value={utxorpc.key}
onChange={(e) => setUTxORPC(utxorpc.url, e.target.value)}
placeholder="Key"
label="Key"
type="password"
key={1}
/>,
]}
/>
);
}

return <></>;
}
2 changes: 2 additions & 0 deletions apps/playground/src/components/site/navbar/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ export default function Navbar() {
<MenuItemDropdown title="SDK" items={linksApi} />
<MenuItemDropdown title="Solutions" items={linksSolutions} />
<MenuItem title="Docs" link="https://docs.meshjs.dev/" />
<MenuItem title="Docs" link="https://docs.meshjs.dev/" />
<MenuItemDropdown title="Solutions" items={linksSolutions} />
<MenuItemDropdown title="About" items={linksAbout} />
</ul>
</div>
Expand Down
8 changes: 8 additions & 0 deletions apps/playground/src/data/links-providers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,13 @@ export const metaBlockfrost = {
thumbnail: "/providers/blockfrost.png",
};

export const metaU5c = {
title: "UTxORPC",
link: "/providers/utxorpc",
desc: "Facilitates access to this state in a standardized and efficient manner through gRPC",
thumbnail: "/providers/utxo-rpc.png",
};

export const metaYaci = {
title: "Yaci Provider",
link: "/providers/yaci",
Expand Down Expand Up @@ -50,6 +57,7 @@ export const linksProviders: MenuItem[] = [
metaMaestro,
// metaHydra,
metaOgmios,
metaU5c,
metaYaci,
];

Expand Down
4 changes: 4 additions & 0 deletions apps/playground/src/hooks/useProviders.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ interface State {
setYaciUrl: (url: string) => void;
ogmiosUrl: string;
setOgmiosUrl: (url: string) => void;
utxorpc: { url: string; key: string };
setUTxORPC: (url: string, key: string) => void;
hydraUrl: string;
setHydraUrl: (url: string) => void;
}
Expand All @@ -37,6 +39,8 @@ export const useProviders = create<State>(
setYaciUrl: (url) => set({ yaciUrl: url }),
ogmiosUrl: "",
setOgmiosUrl: (url) => set({ ogmiosUrl: url }),
utxorpc: { url: "http://localhost:50051", key: "api-key" },
setUTxORPC: (url, key) => set({ utxorpc: { url, key } }),
hydraUrl: "",
setHydraUrl: (url) => set({ hydraUrl: url }),
}),
Expand Down
4 changes: 3 additions & 1 deletion apps/playground/src/pages/providers/evaluators/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import {
BlockfrostProvider,
MaestroProvider,
OgmiosProvider,
U5CProvider,
YaciProvider,
} from "@meshsdk/core";

Expand All @@ -28,4 +29,5 @@ export type SupportedEvaluators =
| BlockfrostProvider
| YaciProvider
| MaestroProvider
| OgmiosProvider;
| OgmiosProvider
| U5CProvider;
4 changes: 3 additions & 1 deletion apps/playground/src/pages/providers/fetchers/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import {
BlockfrostProvider,
KoiosProvider,
MaestroProvider,
U5CProvider,
YaciProvider,
} from "@meshsdk/core";

Expand Down Expand Up @@ -81,4 +82,5 @@ export type SupportedFetchers =
| BlockfrostProvider
| KoiosProvider
| YaciProvider
| MaestroProvider;
| MaestroProvider
| U5CProvider;
4 changes: 3 additions & 1 deletion apps/playground/src/pages/providers/listeners/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import {
BlockfrostProvider,
KoiosProvider,
MaestroProvider,
U5CProvider,
YaciProvider,
} from "@meshsdk/core";

Expand All @@ -28,4 +29,5 @@ export type SupportedListeners =
| BlockfrostProvider
| YaciProvider
| MaestroProvider
| KoiosProvider;
| KoiosProvider
| U5CProvider;
4 changes: 3 additions & 1 deletion apps/playground/src/pages/providers/submitters/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {
KoiosProvider,
MaestroProvider,
OgmiosProvider,
U5CProvider,
YaciProvider,
} from "@meshsdk/core";

Expand Down Expand Up @@ -30,4 +31,5 @@ export type SupportedSubmitters =
| YaciProvider
| MaestroProvider
| KoiosProvider
| OgmiosProvider;
| OgmiosProvider
| U5CProvider;
137 changes: 137 additions & 0 deletions apps/playground/src/pages/providers/utxorpc.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
import type { NextPage } from "next";

import { U5CProvider } from "@meshsdk/core";

import ButtonFloatDocumentation from "~/components/button/button-float-documentation";
import SidebarFullwidth from "~/components/layouts/sidebar-fullwidth";
import Link from "~/components/link";
import TitleIconDescriptionBody from "~/components/sections/title-icon-description-body";
import Metatags from "~/components/site/metatags";
import Codeblock from "~/components/text/codeblock";
import { metaU5c } from "~/data/links-providers";
import { useProviders } from "~/hooks/useProviders";
import ProviderEvaluators from "./evaluators";
import ProviderFetchers from "./fetchers";
import ProviderListeners from "./listeners";
import ProviderSubmitters from "./submitters";

const ReactPage: NextPage = () => {
const sidebarItems = [
{ label: "Get data from URL", to: "get" },
{ label: "Fetch Account Info", to: "fetchAccountInfo" },
{ label: "Fetch Address Assets", to: "fetchAddressAssets" },
{ label: "Fetch Address Utxos", to: "fetchAddressUtxos" },
{ label: "Fetch Asset Addresses", to: "fetchAssetAddresses" },
{ label: "Fetch Asset Metadata", to: "fetchAssetMetadata" },
{ label: "Fetch Block Info", to: "fetchBlockInfo" },
{ label: "Fetch Collection Assets", to: "fetchCollectionAssets" },
{ label: "Fetch Handle Address", to: "fetchHandleAddress" },
{ label: "Fetch Handle", to: "fetchHandle" },
{ label: "Fetch Protocol Parameters", to: "fetchProtocolParameters" },
{ label: "Fetch Transaction Info", to: "fetchTxInfo" },
{ label: "Evaluate Tx", to: "evaluateTx" },
{ label: "Submit Tx", to: "submitTx" },
{ label: "On Transaction Confirmed", to: "onTxConfirmed" },
];

let code1 = `import { U5CProvider } from "@meshsdk/core";\n\n`;
code1 += `const blockchainProvider = new U5CProvider({\n`;
code1 += ` url: "http://localhost:50051",\n`;
code1 += ` headers: {\n`;
code1 += ` "dmtr-api-key": "<api-key>",\n`;
code1 += ` },\n`;
code1 += `});\n`;

const utxorpc = useProviders((state) => state.utxorpc);

const blockchainProvider = new U5CProvider({
url: utxorpc.url,
headers: {
"dmtr-api-key": utxorpc.key,
},
});

return (
<>
<Metatags title={metaU5c.title} description={metaU5c.desc} />
<SidebarFullwidth sidebarItems={sidebarItems}>
<TitleIconDescriptionBody
title={metaU5c.title}
description={metaU5c.desc}
>
<p>
The UTxORPC (u5c) provider facilitates access to this state in a
standardized and efficient manner through gRPC, using a compact and
high-performance binary format. It enables seamless interaction with
the Cardano blockchain, to facilitate the creation, signing, and
submission of transactions.
</p>

<ul>
<li>
<b>Standardized Interface</b>: Implements the UTxORPC
specification to ensure compatibility and interoperability across
UTxO-based blockchains.
</li>
<li>
<b>Performance Optimized</b>: Utilizes gRPC for efficient
communication with blockchain nodes, minimizing network overhead
and message size.
</li>
<li>
<b>Flexible Provider Options</b>: Suitable for use with hosted
services, local nodes like Dolos, or any UTxORPC-compliant
service.
</li>
</ul>

<p>
The following code samples assume that the UTxORPC node is running
locally on localhost:50051. If your node is hosted remotely or on a
different server, replace "http://localhost:50051" with the
appropriate server URL and port for your environment.
</p>

<p>
You can also use the UTxORPC provider with a hosted service like{" "}
<Link href="https://demeter.run/">Demeter.run</Link>. Demeter is a
PaaS (Platform-as-a-Service) that provides managed Cardano
infrastructure. One of their services consists of a cloud-hosted
endpoint for Cardano integration using the UTxO RPC spec. Developers
can sign-up and get access to the API on a per-request basis.
</p>

<p>
For more details on configuring your node, refer to the{" "}
<Link href="https://github.com/utxorpc/docs/blob/main/pages/servers.md">
UTxORPC Ecosystem Servers Documentation
</Link>
.
</p>

<Codeblock data={code1} />
</TitleIconDescriptionBody>
<ButtonFloatDocumentation href="https://docs.meshjs.dev/providers/classes/U5CProvider" />

<ProviderFetchers
blockchainProvider={blockchainProvider}
provider="utxorpc"
/>
<ProviderEvaluators
blockchainProvider={blockchainProvider}
provider="utxorpc"
/>
<ProviderSubmitters
blockchainProvider={blockchainProvider}
provider="utxorpc"
/>
<ProviderListeners
blockchainProvider={blockchainProvider}
provider="utxorpc"
/>
</SidebarFullwidth>
</>
);
};

export default ReactPage;
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export default function ReactProvider() {
}

function Left() {
let example = ``;
let example = `import "@meshsdk/react/styles.css";`;
example += `import { MeshProvider } from "@meshsdk/react";\n`;
example += `\n`;
example += `function MyApp({ Component, pageProps }: AppProps) {\n`;
Expand Down
Loading