Skip to content

Commit

Permalink
Added mock stake and nominate API
Browse files Browse the repository at this point in the history
  • Loading branch information
isunaslabs committed Jan 10, 2023
1 parent 94b845e commit 94040ff
Show file tree
Hide file tree
Showing 7 changed files with 224 additions and 16 deletions.
2 changes: 1 addition & 1 deletion packages/app-providers/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
"@polkadot/ui-keyring": "^2.9.14",
"@polkadot/util": "^10.2.1",
"axios": "^1.2.1",
"darwinia-js-sdk": "^1.2.9",
"darwinia-js-sdk": "1.2.11",
"ethers": "^5.7.2",
"graphql": "^16.6.0",
"react": "^18.2.0",
Expand Down
48 changes: 44 additions & 4 deletions packages/app-providers/src/dispatchProvider.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { DispatchCtx } from "@darwinia/app-types";
import { DispatchCtx, StakeAndNominateParams } from "@darwinia/app-types";
import { createContext, PropsWithChildren, useCallback, useContext } from "react";
import { clientBuilder } from "darwinia-js-sdk";
import { Web3Provider } from "@ethersproject/providers";
Expand All @@ -9,24 +9,34 @@ const initialState: DispatchCtx = {
//do nothing
return Promise.resolve(true);
},
stakeAndNominate: (params: StakeAndNominateParams) => {
//do nothing
return Promise.resolve(true);
},
};

const DispatchContext = createContext(initialState);

export const DispatchProvider = ({ children }: PropsWithChildren) => {
const getClient = (provider: Web3Provider) => {
return clientBuilder.buildPangolin2Client(provider);
};
const setCollatorSessionKey = useCallback(
async (sessionKey: string, provider: Web3Provider | undefined): Promise<boolean> => {
try {
if (!provider) {
return Promise.resolve(false);
}
console.log("clientBuilder", clientBuilder);
console.log("clientBuilder AAA=====💣", clientBuilder);
console.log("clientBuilder.buildPangolin2Client", clientBuilder.buildPangolin2Client);
const client = clientBuilder.buildPangolin2Client(provider);

/* We appended 00 to the session key to represent that we don't need any proof. Originally the setKeys method
* required two params which are session key and proof but here we append both values into one param */
const sessionKeyWithProof = `${sessionKey}00`;
const res = await client.calls.session.setKeysD(provider.getSigner(), sessionKeyWithProof as HexString);
const res = await getClient(provider).calls.session.setKeysD(
provider.getSigner(),
sessionKeyWithProof as HexString
);
console.log("sessionKeyRes=======", res);
return Promise.resolve(true);
} catch (e) {
Expand All @@ -38,10 +48,40 @@ export const DispatchProvider = ({ children }: PropsWithChildren) => {
[]
);

const stakeAndNominate = useCallback(
async ({ provider, collatorAddress, ringAmount, ktonAmount, depositIds }: StakeAndNominateParams) => {
try {
if (!provider) {
return Promise.resolve(false);
}
const signer = provider.getSigner();
// prepare calls
const nominateCall = getClient(provider).calls.staking.nominateD(signer, collatorAddress as HexString);

const stakeCall = getClient(provider).calls.staking.stake(
signer,
ringAmount.toString(),
ktonAmount.toString(),
depositIds
);

// dispatch
const res = await getClient(provider).calls.utility.batchAll(signer, [nominateCall, stakeCall]);
return true;
} catch (e) {
console.log(e);
console.log("AN error caught=======");
return Promise.resolve(false);
}
},
[]
);

return (
<DispatchContext.Provider
value={{
setCollatorSessionKey,
stakeAndNominate,
}}
>
{children}
Expand Down
10 changes: 10 additions & 0 deletions packages/app-types/src/staking.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import type { AccountId, BlockNumber } from "@polkadot/types/interfaces/runtime"
import BigNumber from "bignumber.js";
import { RegistrationJudgement } from "@polkadot/types/interfaces";
import { UnbondingAsset } from "./storage";
import { BigNumber as EthersBigNumber } from "ethers";
import { Web3Provider } from "@ethersproject/providers";

export interface PalletIdentityIdentityInfo extends Struct {
display?: string;
Expand Down Expand Up @@ -117,3 +119,11 @@ export interface UnbondingDeposit {
}

/*Staking types end here*/

export interface StakeAndNominateParams {
ringAmount: EthersBigNumber;
ktonAmount: EthersBigNumber;
depositIds: EthersBigNumber[];
collatorAddress: string;
provider: Web3Provider | undefined;
}
2 changes: 2 additions & 0 deletions packages/app-types/src/wallet.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { ContractInterface } from "ethers";
import { Web3Provider, JsonRpcSigner } from "@ethersproject/providers";
import { Contract } from "@ethersproject/contracts";
import { StakeAndNominateParams } from "./staking";

export type SupportedWallet = "MetaMask";
export type SupportedBrowser = "Chrome" | "Firefox" | "Brave" | "Edge" | "Opera";
Expand Down Expand Up @@ -82,4 +83,5 @@ export interface WalletCtx {

export interface DispatchCtx {
setCollatorSessionKey: (sessionKey: string, provider: Web3Provider | undefined) => Promise<boolean>;
stakeAndNominate: (params: StakeAndNominateParams) => Promise<boolean>;
}
7 changes: 3 additions & 4 deletions packages/app/src/components/ManageCollatorModal/index.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
import { ChangeEvent, forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from "react";
import { Button, Input, ModalEnhanced, notification, Tab, Table, Tabs, Tooltip } from "@darwinia/ui";
import { ChangeEvent, forwardRef, useImperativeHandle, useRef, useState } from "react";
import { Button, Input, ModalEnhanced, notification, Tab, Tabs, Tooltip } from "@darwinia/ui";
import { localeKeys, useAppTranslation } from "@darwinia/app-locale";
import { Collator } from "@darwinia/app-types";
import { isValidNumber } from "@darwinia/app-utils";
import helpIcon from "../../assets/images/help.svg";
import { useDispatch, useStorage, useWallet } from "@darwinia/app-providers";
import BigNumber from "bignumber.js";
import { useDispatch, useWallet } from "@darwinia/app-providers";
import { BigNumber as EthersBigNumber } from "@ethersproject/bignumber/lib/bignumber";
import { TransactionResponse } from "@ethersproject/providers";

Expand Down
15 changes: 13 additions & 2 deletions packages/app/src/components/StakingOverview/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { localeKeys, useAppTranslation } from "@darwinia/app-locale";
import { Button, CheckboxGroup, Dropdown, Input, notification } from "@darwinia/ui";
import ringIcon from "../../assets/images/ring.svg";
import ktonIcon from "../../assets/images/kton.svg";
import { useStorage, useWallet } from "@darwinia/app-providers";
import { useDispatch, useStorage, useWallet } from "@darwinia/app-providers";
import caretDownIcon from "../../assets/images/caret-down.svg";
import JazzIcon from "../JazzIcon";
import switchIcon from "../../assets/images/switch.svg";
Expand All @@ -17,7 +17,7 @@ import { TransactionResponse } from "@ethersproject/providers";

const StakingOverview = () => {
const { t } = useAppTranslation();
const { selectedNetwork, stakingContract, setTransactionStatus } = useWallet();
const { selectedNetwork, stakingContract, setTransactionStatus, provider } = useWallet();
const { deposits, stakedDepositsIds, calculateExtraPower, balance } = useStorage();
const selectCollatorModalRef = useRef<SelectCollatorRefs>(null);
const [selectedCollator, setSelectedCollator] = useState<Collator>();
Expand All @@ -30,6 +30,7 @@ const StakingOverview = () => {
const [powerByRing, setPowerByRing] = useState(BigNumber(0));
const [powerByKton, setPowerByKton] = useState(BigNumber(0));
const [powerByDeposits, setPowerByDeposits] = useState(BigNumber(0));
const { stakeAndNominate } = useDispatch();
/*This is the minimum Ring balance that should be left on the account
* for gas fee */
const minimumRingBalance = 2;
Expand Down Expand Up @@ -193,8 +194,18 @@ const StakingOverview = () => {
ktonToStake.trim().length > 0 ? formatToWei(ktonToStake.trim()) : EthersBigNumber.from(0);

try {
if (!selectedCollator?.accountAddress) {
return;
}
const depositsIds = depositsToStake.map((item) => EthersBigNumber.from(item.id));
setTransactionStatus(true);
/*const response = await stakeAndNominate({
ringAmount: ringEthersBigNumber,
ktonAmount: ktonEthersBigNumber,
provider: provider,
collatorAddress: selectedCollator?.accountAddress,
depositIds: depositsIds
});*/
const response = (await stakingContract?.stake(
ringEthersBigNumber,
ktonEthersBigNumber,
Expand Down
Loading

0 comments on commit 94040ff

Please sign in to comment.