diff --git a/apps/extension/src/Approvals/Approvals.tsx b/apps/extension/src/Approvals/Approvals.tsx
index 76a1f24e65..fe20581ee1 100644
--- a/apps/extension/src/Approvals/Approvals.tsx
+++ b/apps/extension/src/Approvals/Approvals.tsx
@@ -15,6 +15,7 @@ import { ApproveTransfer, ConfirmTransfer } from "./ApproveTransfer";
import { ApproveConnection } from "./ApproveConnection";
import { TopLevelRoute } from "Approvals/types";
import { ConfirmLedgerTransfer } from "./ApproveTransfer/ConfirmLedgerTransfer";
+import { ApproveBond, ConfirmBond, ConfirmLedgerBond } from "./ApproveBond";
export enum Status {
Completed,
@@ -50,6 +51,20 @@ export const Approvals: React.FC = () => {
path={TopLevelRoute.ConfirmLedgerTransfer}
element={}
/>
+
+ }
+ />
+ }
+ />
+ }
+ />
InternalHandler = (service) => {
return async (_, { msgId }) => {
- return await service.rejectTransfer(msgId);
+ return await service.rejectTx(msgId);
};
};
diff --git a/apps/extension/src/background/approvals/service.ts b/apps/extension/src/background/approvals/service.ts
index cf29bb348f..e016bca6ce 100644
--- a/apps/extension/src/background/approvals/service.ts
+++ b/apps/extension/src/background/approvals/service.ts
@@ -41,14 +41,7 @@ export class ApprovalsService {
"approvals.html"
)}#/approve-transfer?type=${type}&id=${id}&source=${source}&target=${target}&token=${token}&amount=${amount}`;
- browser.windows.create({
- url,
- width: 415,
- height: 510,
- type: "popup",
- });
-
- return;
+ this._launchApprovalWindow(url);
}
// Deserialize bond details and prompt user
@@ -65,22 +58,16 @@ export class ApprovalsService {
);
const { source, token, amount: amountBN } = txDetails;
const amount = new BigNumber(amountBN.toString());
+
const url = `${browser.runtime.getURL(
"approvals.html"
)}#/approve-bond?type=${type}&id=${id}&source=${source}&token=${token}&amount=${amount}`;
- browser.windows.create({
- url,
- width: 415,
- height: 510,
- type: "popup",
- });
-
- return;
+ this._launchApprovalWindow(url);
}
// Remove pending transaction from storage
- async rejectTransfer(msgId: string): Promise {
+ async rejectTx(msgId: string): Promise {
await this._clearPendingTx(msgId);
}
@@ -126,4 +113,13 @@ export class ApprovalsService {
private async _clearPendingTx(msgId: string): Promise {
return await this.txStore.set(msgId, null);
}
+
+ private _launchApprovalWindow = (url: string): void => {
+ browser.windows.create({
+ url,
+ width: 415,
+ height: 510,
+ type: "popup",
+ });
+ };
}
diff --git a/apps/extension/src/provider/Anoma.ts b/apps/extension/src/provider/Anoma.ts
index d6e555e43e..90f207190c 100644
--- a/apps/extension/src/provider/Anoma.ts
+++ b/apps/extension/src/provider/Anoma.ts
@@ -88,7 +88,11 @@ export class Anoma implements IAnoma {
);
}
- public async submitBond(txMsg: string, type?: AccountType): Promise {
+ public async submitBond(props: {
+ txMsg: string;
+ type?: AccountType;
+ }): Promise {
+ const { txMsg, type } = props;
return await this.requester?.sendMessage(
Ports.Background,
new ApproveBondMsg(txMsg, type)
diff --git a/apps/extension/src/provider/InjectedAnoma.ts b/apps/extension/src/provider/InjectedAnoma.ts
index 9bdf8ca883..f2297f17e5 100644
--- a/apps/extension/src/provider/InjectedAnoma.ts
+++ b/apps/extension/src/provider/InjectedAnoma.ts
@@ -50,8 +50,18 @@ export class InjectedAnoma implements IAnoma {
return new Signer(chainId, this);
}
- public async submitBond(txMsg: string): Promise {
- return await InjectedProxy.requestMethod("submitBond", txMsg);
+ public async submitBond(props: {
+ txMsg: string;
+ type: AccountType;
+ }): Promise {
+ const { txMsg, type } = props;
+ return await InjectedProxy.requestMethod<
+ { txMsg: string; type: AccountType },
+ void
+ >("submitBond", {
+ txMsg,
+ type,
+ });
}
public async submitUnbond(txMsg: string): Promise {
diff --git a/apps/extension/src/provider/Signer.ts b/apps/extension/src/provider/Signer.ts
index 99239519ae..6b0bca4efc 100644
--- a/apps/extension/src/provider/Signer.ts
+++ b/apps/extension/src/provider/Signer.ts
@@ -43,13 +43,16 @@ export class Signer implements ISigner {
/**
* Submit bond transaction
*/
- public async submitBond(args: SubmitBondProps): Promise {
+ public async submitBond(
+ args: SubmitBondProps,
+ type: AccountType
+ ): Promise {
const msgValue = new SubmitBondMsgValue(args);
const msg = new Message();
const encoded = msg.encode(SubmitBondMsgSchema, msgValue);
- return await this._anoma.submitBond(toBase64(encoded));
+ return await this._anoma.submitBond({ txMsg: toBase64(encoded), type });
}
/**
diff --git a/apps/namada-interface/src/App/Staking/NewBondingPosition/NewBondingPosition.tsx b/apps/namada-interface/src/App/Staking/NewBondingPosition/NewBondingPosition.tsx
index 5f28de4a2a..a600d3d0ce 100644
--- a/apps/namada-interface/src/App/Staking/NewBondingPosition/NewBondingPosition.tsx
+++ b/apps/namada-interface/src/App/Staking/NewBondingPosition/NewBondingPosition.tsx
@@ -68,8 +68,11 @@ export const NewBondingPosition = (props: Props): JSX.Element => {
const currentBondingPosition = currentBondingPositions.find(
(pos) => pos.owner === currentAccount?.details.address
);
- const stakedAmount: BigNumber = new BigNumber(currentBondingPosition?.stakedAmount || "0");
- const currentNAMBalance: BigNumber = currentAccount.balance["NAM"] || new BigNumber(0);
+ const stakedAmount: BigNumber = new BigNumber(
+ currentBondingPosition?.stakedAmount || "0"
+ );
+ const currentNAMBalance: BigNumber =
+ currentAccount.balance["NAM"] || new BigNumber(0);
const handleAddressChange = (
e: React.ChangeEvent
@@ -167,6 +170,7 @@ export const NewBondingPosition = (props: Props): JSX.Element => {
owner: currentAddress,
validatorId: currentBondingPositions[0].validatorId,
};
+ console.log({ changeInStakingPosition });
confirmBonding(changeInStakingPosition);
}}
disabled={isEntryIncorrectOrEmpty}
diff --git a/apps/namada-interface/src/slices/StakingAndGovernance/actions.ts b/apps/namada-interface/src/slices/StakingAndGovernance/actions.ts
index 5e0a83e68e..afb1307ad3 100644
--- a/apps/namada-interface/src/slices/StakingAndGovernance/actions.ts
+++ b/apps/namada-interface/src/slices/StakingAndGovernance/actions.ts
@@ -44,9 +44,9 @@ const toMyValidators = (
index == -1
? (arr: MyValidators[]) => arr
: (arr: MyValidators[], idx: number) => [
- ...arr.slice(0, idx),
- ...arr.slice(idx + 1),
- ];
+ ...arr.slice(0, idx),
+ ...arr.slice(idx + 1),
+ ];
const stakedAmount = new BigNumber(stake)
.plus(new BigNumber(v?.stakedAmount || 0))
@@ -159,20 +159,28 @@ export const postNewBonding = createAsyncThunk<
{ state: RootState }
>(POST_NEW_STAKING, async (change, thunkApi) => {
const { chainId } = thunkApi.getState().settings;
+ const { derived } = thunkApi.getState().accounts;
const integration = getIntegration(chainId);
const signer = integration.signer() as Signer;
- await signer.submitBond({
- source: change.owner,
- validator: change.validatorId,
- amount: new BigNumber(change.amount),
- nativeToken: Tokens.NAM.address || "",
- tx: {
- token: Tokens.NAM.address || "",
- feeAmount: new BigNumber(0),
- gasLimit: new BigNumber(0),
- chainId,
+ const { owner, validatorId, amount } = change;
+ const account = derived[chainId][owner];
+ const type = account.details.type;
+
+ await signer.submitBond(
+ {
+ source: owner,
+ validator: validatorId,
+ amount: new BigNumber(amount),
+ nativeToken: Tokens.NAM.address || "",
+ tx: {
+ token: Tokens.NAM.address || "",
+ feeAmount: new BigNumber(0),
+ gasLimit: new BigNumber(0),
+ chainId,
+ },
},
- });
+ type
+ );
});
// we post an unstake transaction
diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts
index af68f75bf1..9e1f4f0eba 100644
--- a/packages/shared/src/index.ts
+++ b/packages/shared/src/index.ts
@@ -8,7 +8,7 @@ type TimeoutOpts = {
error?: string;
};
-const DEFAULT_TIMEOUT = 5000;
+const DEFAULT_TIMEOUT = 60000;
const DEFAULT_OPTS: TimeoutOpts = {
timeout: DEFAULT_TIMEOUT,
@@ -23,19 +23,19 @@ const promiseWithTimeout =
fn: (...args: U) => Promise,
opts?: TimeoutOpts
) =>
- (...args: U): Promise => {
- const { timeout, error } = { ...DEFAULT_OPTS, ...opts };
+ (...args: U): Promise => {
+ const { timeout, error } = { ...DEFAULT_OPTS, ...opts };
- return new Promise(async (resolve, reject) => {
- const t = setTimeout(() => {
- reject(error);
- }, timeout);
+ return new Promise(async (resolve, reject) => {
+ const t = setTimeout(() => {
+ reject(error);
+ }, timeout);
- const res = await fn(...args);
- clearTimeout(t);
- resolve(res);
- });
- };
+ const res = await fn(...args);
+ clearTimeout(t);
+ resolve(res);
+ });
+ };
export class Query extends RustQuery {
query_balance = promiseWithTimeout(super.query_balance.bind(this), {
diff --git a/packages/types/src/anoma.ts b/packages/types/src/anoma.ts
index cbe134d8dd..773db7edb8 100644
--- a/packages/types/src/anoma.ts
+++ b/packages/types/src/anoma.ts
@@ -11,7 +11,7 @@ export interface Anoma {
suggestChain(chainConfig: Chain): Promise;
chain: (chainId: string) => Promise;
chains: () => Promise;
- submitBond: (txMsg: string) => Promise;
+ submitBond: (props: { txMsg: string; type: AccountType }) => Promise;
submitUnbond: (txMsg: string) => Promise;
submitTransfer: (props: {
txMsg: string;
diff --git a/packages/types/src/signer.ts b/packages/types/src/signer.ts
index c0cfa51494..059e49bcc0 100644
--- a/packages/types/src/signer.ts
+++ b/packages/types/src/signer.ts
@@ -9,7 +9,7 @@ import {
export interface Signer {
accounts: () => Promise;
- submitBond(args: SubmitBondProps): Promise;
+ submitBond(args: SubmitBondProps, type: AccountType): Promise;
submitUnbond(args: SubmitUnbondProps): Promise;
submitTransfer(args: TransferProps, type: AccountType): Promise;
submitIbcTransfer(args: IbcTransferProps): Promise;