d6599b2933
* started todo list for rework * startd long todo list * startd long todo list * remove ts docs from ts sdk dir * started new docs draft * rearranged code example dir structure * modified code component filepaths * first pass rust sdk * small shift typescript org * updated todo list * consolidating images folders in one place * first pass @ operator docs * gen updates * sdk in its own dir * first pass developers structure * first pass network structure * structure * add licensing * moved old docs -> old_docs dir for clarity when devving * moving around new docs - think this is the final dir structure * updated todo list * new autodoc version (#4781) * Update rework_todo.md * quick first sketch of landing page * rework of structure of developers * added arch and concepts stubs * add new bits to todo list * new list * tweak to overview * mixnet node overview * tweak overview * first pass new arch * first pass concepts * first pass traffic * more network docs * moved some chain files to the dev portal stubs * removed old reference to archive * note to client * concepts 2nd pass * crypto first proper pass, sphinx * stub for not p2p * structure change * traffic 2nd pass * misc * hid root index * overhaul arch * overhaul arch * add links + tweaks * update todo list * updating nyx section * added zknym docs * added zknym docs * note on where to find deployed info * smart contracts done * started moving integrations docs over from ts sdk * pass @ integration page * todo for the tldr overview * added ffi stub files * updated todo list * move sdks to developers * initial pass at new clients overview for developers * rework intro * add echo serv to tools * sidebar autocollapse * integration overview work + tools * concepts overview for devporta * stub * more for networking pages * added to concepts in dev portal * updated arch * crypto overview page * typo fix * add credential stub * first pass concepts done * start reorg of rust sdk docs * reorg + added FFI table * added no scroll to inline code * finished ffi overview page * first pass @ rest of rust sdk doc * first pass ffi * tweaks * added testnet example + note to custom topology example overview * stripped unnecessary stuff from TS * tweaks to ffi * updated faq * first pass tcpproxy * commit before moving image dir * moved images/ to correct place * started on client redo * chain first pass * moved cli wallet out of tools * first pass new ws client * new chain info, left todo links in * links * more links * chain registry * added echo server to tools * rust sdk links * ts sdk links * final linkchecks * redo acks diagram as mermaid * add mermaid flow diagram * added links for codecs + full flow diagram * removed todo * remove forced dark mode * diagram + concepts overview * small correction re tcpproxy ffi * remove diagram title * new sock5 diagram, minor client docs tweaks * diagrams * change order in list * added note for standalone: can be accessed via sdk * tweaks * replaced old diagram with mermaid * fixed link * hardcoded import version for the moment * update deps * remove test component * recreated tools dir * remove tools dir moved to wrong palce * prebuild and predev script for autodoc commands * make script own command instead of prebuild * made code blocks sh * updated autogenerated docs * temp * auto commit generated command files * add link to autodoc generated files * updated autodoc for committing changing else exit * auto commit generated command files * updated readme * make subcommand headers smaller * removed mdbook related scripts * update readme * update readme * removed backups of root meta.json * cherry pick yana commits + some extra config in theme * update readme * update theme: width of page and padding * some more themeing * changed erroneous note * docs redirects first pass * tweaking * new pages + rest of redirects for old docs/ * brought in archive + done rewrites for devportal * cherry pick yana landingpage * tweaked landing page component * changed theme of mermaid diagram to match everything else * updated todo list * [DOCs]: Operators rework to next.js (#4930) * initialise operators guides v2 * new introduction page * add variables csv and page * add baseurl to allow short path * add sandbox page * added building from source page * add binary pages * add preliminary steps * clean preliminary steps dir * syntax edit * syntax edit * add configuration page * create new proxy configuration page * create new proxy configuration page * create bonding.mdx page * correct images path * syntax edit * add new validator setup page * add api setup page * add nyx configuration page * add nym node and maintenance pages * finish maintenance and add nymvisor conf page * add manual upgrade page * add nymvisor upgrade page * add performance testing page and dir * add node api check page * add explore nym scripts page * add testing pages * fix menu issue by moving snippets to coomponents * add all troubleshooting pages * add general faq page * add nym node faq page * add nyx faq page * revamp legal forum to community counsel and add all pages * rewire relative paths to new structure * simplify setup and remove lock file * syntax fix * rm package.json * re add package.json, rm package-lock.json * removed old books from commit * address review comments --------- Co-authored-by: mfahampshire <maxhampshire@pm.me> Co-authored-by: mx <33262279+mfahampshire@users.noreply.github.com> * tweak client links * also moved matrix images to correct place * Max/fix links new docs framework (#4989) * tweak client links * standardise images in public/ * old images move to public/archive * rename overview to more descriptive * links (#4990) * links * removed todos * updated todo list * minor themeing * operator redirects * pick yana's edits: remove specified callout theming * added todo comments for old ts sdk redirects * [new/docs/operators]: Create archive section - PR ready to merge (#5004) * [new-docs/operators] : Fix callout syntax (#5006) * fix callout syntax from color to type * correct callout from danger to warning * update footer * updated footer * finalised rewrites * tweaks to clients and reintroduced old examples page * update todo * Max/individual command autodocs (#5015) * auto commit generated command files * added to autodoc.sh: build all binaries before running * autodoc move individual command outputs to components * Max/individual command autodocs (#5018) * updated autodoc script * updated autodoc script for fix + reintroduced gitignore file for generated markdown * auto commit generated command files * auto commit generated command files * added command-outputs to autodoc script * fix merge conflicts * repush components * remove old docs dirs * auto commit generated command files * auto commit generated command files * updated messages paradigm with the standalone proxies * [NEW-DOCs/operators]: Command output, accordion, api scraping & all final tasks (#5026) * add custom scripts, create prebuild to import data to pages * update after latest prebuild * auto commit generated command files * add accordion component * add changbelog page * add node_api_check outputs * finish all command outputs * more accordions beautifications * finish accordion * PR ready to go * address review comments --------- Co-authored-by: mfahampshire <maxhampshire@pm.me> * Adjust padding * Fix responsive design * cherry pick yana landingpage flex update * reremove old docs * added dependencies to readme * pushing build attempt changes * fix merge errors, path errors, dump uselss dinosaurs - BUILT THE F*N DOCS w success * moved prebuild to its own script * generate timenow * auto commit generated command files * remove comment * auto commit generated command files * auto commit generated command files * auto commit generated command files * build from new configs * add mdx type as explicit dep * remove rc from version in package * change predev script * update readme with scripts * update general info * add license * auto commit generated command files * add updated components * removed old examples page for the moment * remove old list will reintroduce hidden behind gitignore for future * reintroduce todo list behind gitignore * added standalone tcpproxy binary info * nothing change for redeploy test * make build standalone * updated readme * working on new cd * remove export * updated ci/cd for docs * added ci script for dist * hide text on laptop wide screen * add pnpm to ci/cd * add pnpm version to ci/cd * add default dir to ci/cd * change path to script * update projct name ci * lint ci branch ignore * add basePath to next.config.js * update doc rewrites * revert basePath addition * update basePath * add mobile styles * fix responsive style * remove old ts sdk docs workflow * temp remove autodoc from workspace * update sidebar for clarity: crypto = cryptography * ignore documentation in pr-validation workflow --------- Co-authored-by: Yana <yanok87@users.noreply.github.com> Co-authored-by: import this <97586125+serinko@users.noreply.github.com> Co-authored-by: fmtabbara <fmtabbara@hotmail.co.uk>
263 lines
7.8 KiB
TypeScript
263 lines
7.8 KiB
TypeScript
import React, { createContext, useContext, useState, useCallback, useEffect, useMemo } from 'react';
|
|
import { Coin } from '@cosmjs/stargate';
|
|
import { SigningCosmWasmClient } from '@cosmjs/cosmwasm-stargate';
|
|
import { settings } from '../../client';
|
|
import { signerAccount, fetchSignerCosmosWasmClient, fetchSignerClient } from './wallet.methods';
|
|
|
|
/**
|
|
* This context provides the state for wallet.
|
|
*/
|
|
|
|
interface WalletState {
|
|
accountLoading: boolean;
|
|
account: string;
|
|
clientsAreLoading: boolean;
|
|
connect?: (mnemonic: string) => void;
|
|
balance?: Coin;
|
|
balanceLoading: boolean;
|
|
setRecipientAddress?: (value: string) => void;
|
|
setTokensToSend?: (value: string) => void;
|
|
sendingTokensLoading: boolean;
|
|
log?: { type: 'delegate' | 'sendTokens'; node: React.ReactNode[] };
|
|
sendTokens?: (recipientAddress: string, tokensToSend: string) => void;
|
|
delegations?: any;
|
|
doDelegate?: (mixId: string, amount: string) => void;
|
|
delegationLoader?: boolean;
|
|
unDelegateAll?: () => void;
|
|
unDelegateAllLoading?: boolean;
|
|
}
|
|
|
|
export const WalletContext = createContext<WalletState>({
|
|
accountLoading: false,
|
|
account: '',
|
|
clientsAreLoading: false,
|
|
balanceLoading: false,
|
|
sendingTokensLoading: false,
|
|
});
|
|
|
|
export const useWalletContext = (): React.ContextType<typeof WalletContext> => useContext<WalletState>(WalletContext);
|
|
|
|
export const WalletContextProvider = ({ children }: { children: JSX.Element }) => {
|
|
const [cosmWasmSignerClient, setCosmWasmSignerClient] = useState<SigningCosmWasmClient>(null);
|
|
const [nymWasmSignerClient, setNymWasmSignerClient] = useState<any>(null);
|
|
const [account, setAccount] = useState<string>('');
|
|
const [accountLoading, setAccountLoading] = useState<boolean>(false);
|
|
const [delegations, setDelegations] = useState<{ delegations: any[]; start_next_after: any }>();
|
|
const [clientsAreLoading, setClientsAreLoading] = useState<boolean>(false);
|
|
const [balance, setBalance] = useState<Coin>(null);
|
|
const [balanceLoading, setBalanceLoading] = useState<boolean>(false);
|
|
const [sendingTokensLoading, setSendingTokensLoading] = useState<boolean>(false);
|
|
const [log, setLog] = useState<{ type: 'delegate' | 'sendTokens'; node: React.ReactNode[] }>();
|
|
const [delegationLoader, setDelegationLoader] = useState<boolean>(false);
|
|
const [unDelegateAllLoading, setUnDelegateAllLoading] = useState<boolean>(false);
|
|
|
|
const Reset = () => {
|
|
setAccountLoading(false);
|
|
setDelegations(null);
|
|
setClientsAreLoading(false);
|
|
setBalance(null);
|
|
setBalanceLoading(false);
|
|
setSendingTokensLoading(false);
|
|
};
|
|
|
|
const getSignerAccount = async (mnemonic: string) => {
|
|
setAccountLoading(true);
|
|
try {
|
|
const signer = await signerAccount(mnemonic);
|
|
const accounts = await signer.getAccounts();
|
|
if (accounts[0]) {
|
|
setAccount(accounts[0].address);
|
|
}
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
setAccountLoading(false);
|
|
};
|
|
|
|
const getClients = async (mnemonic: string) => {
|
|
setClientsAreLoading(true);
|
|
try {
|
|
setCosmWasmSignerClient(await fetchSignerCosmosWasmClient(mnemonic));
|
|
setNymWasmSignerClient(await fetchSignerClient(mnemonic));
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
setClientsAreLoading(false);
|
|
};
|
|
|
|
const connect = async (mnemonic: string) => {
|
|
getSignerAccount(mnemonic);
|
|
getClients(mnemonic);
|
|
};
|
|
|
|
const getBalance = useCallback(async () => {
|
|
setBalanceLoading(true);
|
|
try {
|
|
const newBalance = await cosmWasmSignerClient?.getBalance(account, 'unym');
|
|
setBalance(newBalance);
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
setBalanceLoading(false);
|
|
}, [account, cosmWasmSignerClient]);
|
|
|
|
const getDelegations = useCallback(async () => {
|
|
const delegationsReceived = await nymWasmSignerClient.getDelegatorDelegations({
|
|
delegator: settings.address,
|
|
});
|
|
setDelegations(delegationsReceived);
|
|
}, [nymWasmSignerClient]);
|
|
|
|
const sendTokens = async (recipientAddress: string, tokensToSend: string) => {
|
|
const memo: string = 'test sending tokens';
|
|
setSendingTokensLoading(true);
|
|
try {
|
|
const res = await cosmWasmSignerClient.sendTokens(
|
|
account,
|
|
recipientAddress,
|
|
[{ amount: tokensToSend, denom: 'unym' }],
|
|
'auto',
|
|
memo,
|
|
);
|
|
setLog({
|
|
type: 'sendTokens',
|
|
node: [
|
|
<div key={JSON.stringify(res, null, 2)}>
|
|
<code style={{ marginRight: '2rem' }}>{new Date().toLocaleTimeString()}</code>
|
|
<pre>{JSON.stringify(res, null, 2)}</pre>
|
|
</div>,
|
|
],
|
|
});
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
setSendingTokensLoading(false);
|
|
};
|
|
|
|
const doDelegate = async (mixId: string, amount: string) => {
|
|
setDelegationLoader(true);
|
|
const memo: string = 'test delegation';
|
|
const coinAmount: Coin = { amount, denom: 'unym' };
|
|
try {
|
|
const res = await nymWasmSignerClient.delegateToMixnode({ mixId: parseInt(mixId, 10) }, 'auto', memo, [
|
|
coinAmount,
|
|
]);
|
|
setLog({
|
|
type: 'delegate',
|
|
node: [
|
|
<div key={JSON.stringify(res, null, 2)}>
|
|
<code style={{ marginRight: '2rem' }}>{new Date().toLocaleTimeString()}</code>
|
|
<pre>{JSON.stringify(res, null, 2)}</pre>
|
|
</div>,
|
|
],
|
|
});
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
setDelegationLoader(false);
|
|
};
|
|
|
|
const unDelegateAll = async () => {
|
|
setUnDelegateAllLoading(true);
|
|
try {
|
|
const logs: React.ReactNode[] = [];
|
|
// eslint-disable-next-line no-restricted-syntax
|
|
for (const delegation of delegations.delegations) {
|
|
// eslint-disable-next-line no-await-in-loop
|
|
const res = await nymWasmSignerClient.undelegateFromMixnode({ mixId: delegation.mix_id }, 'auto');
|
|
setUnDelegateAllLoading(false);
|
|
logs.push(
|
|
<div key={JSON.stringify(res, null, 2)}>
|
|
<code style={{ marginRight: '2rem' }}>{new Date().toLocaleTimeString()}</code>
|
|
<pre>{JSON.stringify(res, null, 2)}</pre>
|
|
</div>,
|
|
);
|
|
}
|
|
setLog({
|
|
type: 'delegate',
|
|
node: logs,
|
|
});
|
|
} catch (error) {
|
|
console.error(error);
|
|
setUnDelegateAllLoading(false);
|
|
}
|
|
};
|
|
|
|
// const withdrawRewards = async () => {
|
|
// const validatorAdress = '';
|
|
// const memo = 'test withdraw rewards';
|
|
// setWithdrawLoading(true);
|
|
// try {
|
|
// const res = await cosmWasmSignerClient.withdrawRewards(account, validatorAdress, 'auto', memo);
|
|
// setLog({
|
|
// type: 'delegate',
|
|
// node: [
|
|
// <div key={JSON.stringify(res, null, 2)}>
|
|
// <code style={{ marginRight: '2rem' }}>{new Date().toLocaleTimeString()}</code>
|
|
// <pre>{JSON.stringify(res, null, 2)}</pre>
|
|
// </div>,
|
|
// ],
|
|
// });
|
|
// } catch (error) {
|
|
// console.error(error);
|
|
// }
|
|
// setWithdrawLoading(false);
|
|
// };
|
|
|
|
useEffect(
|
|
() => () => {
|
|
Reset();
|
|
},
|
|
[],
|
|
);
|
|
|
|
useEffect(() => {
|
|
if (cosmWasmSignerClient) {
|
|
getBalance();
|
|
}
|
|
}, [cosmWasmSignerClient]);
|
|
|
|
useEffect(() => {
|
|
if (nymWasmSignerClient) {
|
|
getDelegations();
|
|
}
|
|
}, [nymWasmSignerClient]);
|
|
|
|
const state = useMemo<WalletState>(
|
|
() => ({
|
|
accountLoading,
|
|
account,
|
|
clientsAreLoading,
|
|
connect,
|
|
balance,
|
|
balanceLoading,
|
|
sendingTokensLoading,
|
|
log,
|
|
sendTokens,
|
|
delegations,
|
|
doDelegate,
|
|
delegationLoader,
|
|
unDelegateAll,
|
|
unDelegateAllLoading,
|
|
}),
|
|
[
|
|
accountLoading,
|
|
account,
|
|
clientsAreLoading,
|
|
connect,
|
|
balance,
|
|
balanceLoading,
|
|
sendingTokensLoading,
|
|
log,
|
|
sendTokens,
|
|
delegations,
|
|
doDelegate,
|
|
delegationLoader,
|
|
unDelegateAll,
|
|
unDelegateAllLoading,
|
|
],
|
|
);
|
|
|
|
return <WalletContext.Provider value={state}>{children}</WalletContext.Provider>;
|
|
};
|