diff --git a/src/App.tsx b/src/App.tsx
index b7f335c..32076f5 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -28,10 +28,21 @@ import {
} from "./settings";
// Imgs
import metamaskIcon from "./img/metamask-white.png";
-import { RequestStatus, RepoAddresses, Manifest, FormField } from "types";
-import { IPFS_GATEWAY, SDK_INSTALL_URL } from "params";
+import {
+ RequestStatus,
+ RepoAddresses,
+ Manifest,
+ FormField,
+ NetworkId,
+} from "types";
+import {
+ dappnodeKnownDpmRegistries,
+ IPFS_GATEWAY,
+ SDK_INSTALL_URL,
+} from "params";
import { signRelease } from "utils/signRelease";
import { fetchReleaseSignature } from "utils/fetchRelease";
+import { publishXDaiTx } from "utils/dpm/publishXDAITx";
const fetchManifestMem = memoizee(fetchManifest, { promise: true });
const resolveDnpNameMem = memoizee(resolveDnpName, { promise: true });
@@ -82,6 +93,12 @@ export function App() {
useEffect(() => {
const urlParams = parseUrlQuery(window.location.search);
console.log("URL params", urlParams);
+ // r: **repo** human readable ENS dnpName: 'geth.dnp.dappnode.eth'
+ // v: **version** semver version: '0.5.6'
+ // d: **developer address** for new Repo only, address that will control the package: '0xf35960302a07022aba880dffaec2fdd64d5bf1c1'
+ // h: **contentURI** hash for the package:
+ // - APM: '/ipfs/QmdjrkKfD8ZAA8zHBAFC9y162R52qKcikuVXDNMKMhEsUr'
+ // - DPM: 'ipfs://QmRAQB6YaCyidP37UdDnjFY5vQuiBrcqdyoW1CuDgwxkD'
if (urlParams.r) setDnpName(urlParams.r);
if (urlParams.v) setVersion(urlParams.v);
if (urlParams.d) setDeveloperAddress(urlParams.d);
@@ -186,7 +203,7 @@ export function App() {
}
}
- async function publish() {
+ async function publishMainnet() {
try {
if (!dnpName) throw Error("Must provide a dnpName");
if (!version) throw Error("Must provide a version");
@@ -197,7 +214,7 @@ export function App() {
if (!provider) throw Error(`Must connect to Metamask first`);
const network = await provider.getNetwork();
- if (network && String(network.chainId) !== "1")
+ if (network && String(network.chainId) !== NetworkId.Mainnet)
throw Error("Transactions must be published on Ethereum Mainnet");
const accounts = await provider.listAccounts();
@@ -228,6 +245,29 @@ export function App() {
}
}
+ async function publishXDAI() {
+ try {
+ if (!dnpName) throw Error("Must provide a dnpName");
+ if (!version) throw Error("Must provide a version");
+ if (!releaseHash) throw Error("Must provide a manifestHash");
+ if (!provider) throw Error(`Must connect to Metamask first`);
+
+ setPublishReqStatus({ loading: true });
+
+ const { txHash } = await publishXDaiTx(
+ { dnpName, version, releaseHash, developerAddress },
+ provider,
+ // TODO: Extend with user provided input
+ dappnodeKnownDpmRegistries
+ );
+
+ setPublishReqStatus({ result: txHash });
+ } catch (e) {
+ console.error(e);
+ setPublishReqStatus({ error: e as Error });
+ }
+ }
+
/**
* Description of the input fields
*/
@@ -399,13 +439,22 @@ export function App() {
{/* Publish button */}
{provider ? (
-
+ <>
+
+
+ >
) : (