Skip to content

Commit

Permalink
fix: add reuasable hook to use stake flow actions directly in any nav…
Browse files Browse the repository at this point in the history
…igator; use directly in earn nav
  • Loading branch information
beths-ledger committed Aug 25, 2023
1 parent 541447c commit c4c16e6
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 72 deletions.
5 changes: 5 additions & 0 deletions .changeset/fresh-dragons-smile.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"live-mobile": patch
---

Re-use account-specific stake flow actions directly in the Earn Navigator to avoid empty stake flow navigation that was causing empty modals to appear.
Original file line number Diff line number Diff line change
Expand Up @@ -289,11 +289,6 @@ export default function BaseNavigator() {
options={{ headerShown: false }}
{...noNanoBuyNanoWallScreenOptions}
/>
<Stack.Screen
name={NavigatorName.Earn}
component={EarnLiveAppNavigator}
options={{ headerShown: false }}
/>
<Stack.Screen
name={NavigatorName.PlatformExchange}
component={PlatformExchangeNavigator}
Expand Down Expand Up @@ -516,6 +511,11 @@ export default function BaseNavigator() {
options={{ ...TransparentHeaderNavigationOptions, title: "" }}
component={RedirectToOnboardingRecoverFlowScreen}
/>
<Stack.Screen
name={NavigatorName.Earn}
component={EarnLiveAppNavigator}
options={{ headerShown: false }}
/>
<Stack.Screen
name={NavigatorName.NoFundsFlow}
component={NoFundsFlowNavigator}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import { EarnScreen } from "../../screens/PTX/Earn";
import { getAccountIdFromWalletAccountId } from "@ledgerhq/live-common/wallet-api/converters";
import { accountsSelector } from "../../reducers/accounts";
import { EarnInfoDrawer } from "../../screens/PTX/Earn/EarnInfoDrawer";
import { useStakingDrawer } from "../Stake/useStakingDrawer";

const Stack = createStackNavigator<EarnLiveAppNavigatorParamList>();

Expand All @@ -29,6 +30,12 @@ const Earn = (props: NavigationProps) => {
const accounts = useSelector(accountsSelector);
const route = useRoute();

const openStakingDrawer = useStakingDrawer({
navigation,
parentRoute: route,
alwaysShowNoFunds: false,
});

useEffect(() => {
if (!ptxEarn?.enabled) {
return navigation.pop();
Expand Down Expand Up @@ -63,13 +70,7 @@ const Earn = (props: NavigationProps) => {
const accountId = getAccountIdFromWalletAccountId(walletId);
const account = accounts.find(acc => acc.id === accountId);
if (account) {
navigation.navigate(NavigatorName.StakeFlow, {
screen: ScreenName.Stake,
params: {
account,
parentRoute: route,
},
});
openStakingDrawer(account);
} else {
// eslint-disable-next-line no-console
console.log("no matching account found for given id.");
Expand All @@ -88,7 +89,7 @@ const Earn = (props: NavigationProps) => {
params: {
currencies: [currencyId],
parentRoute: route,
// Stake flow will get CryptoCurrency and Account, and navigate to NoFunds flow:
// Stake flow will skip step 1 (select CryptoCurrency) and step 2 (select Account), and navigate straight to NoFunds flow:
alwaysShowNoFunds: true, // Navigate to NoFunds even if some funds available.
},
});
Expand All @@ -105,7 +106,15 @@ const Earn = (props: NavigationProps) => {
deeplinkRouting();

return clearDeepLink();
}, [paramAction, ptxEarn?.enabled, props.route.params, accounts, navigation, route]);
}, [
paramAction,
ptxEarn?.enabled,
props.route.params,
accounts,
navigation,
route,
openStakingDrawer,
]);

return (
<>
Expand Down
66 changes: 8 additions & 58 deletions apps/ledger-live-mobile/src/components/Stake/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
import { useMemo, useLayoutEffect, useCallback } from "react";
import { StackNavigationProp } from "@react-navigation/stack";
import { useNavigation } from "@react-navigation/native";
import { Account } from "@ledgerhq/types-live";
import { listCurrencies, filterCurrencies } from "@ledgerhq/live-common/currencies/helpers";
import { useFeature } from "@ledgerhq/live-common/featureFlags/index";
import { NavigatorName, ScreenName } from "../../const";
import perFamilyAccountActions from "../../generated/accountActions";
import type { StackNavigatorProps, BaseComposite } from "../RootNavigator/types/helpers";
import type { StakeNavigatorParamList } from "../RootNavigator/types/StakeNavigator";

import { useStakingDrawer } from "./useStakingDrawer";

type Props = BaseComposite<StackNavigatorProps<StakeNavigatorParamList, ScreenName.Stake>>;

const StakeFlow = ({ route }: Props) => {
Expand All @@ -26,57 +26,7 @@ const StakeFlow = ({ route }: Props) => {
});
}, [currencies]);

const goToAccount = useCallback(
(account: Account, parentAccount?: Account) => {
if (alwaysShowNoFunds) {
navigation.navigate(NavigatorName.Base, {
screen: NavigatorName.NoFundsFlow,
drawer: undefined,
params: {
screen: ScreenName.NoFunds,
params: {
account,
parentAccount,
},
},
});
return;
}

// @ts-expect-error issue in typing
const decorators = perFamilyAccountActions[account?.currency?.family];
const familySpecificMainActions =
(decorators &&
decorators.getMainActions &&
decorators.getMainActions({
account,
parentAccount,
colors: {},
parentRoute,
})) ||
[];
const stakeFlow = familySpecificMainActions.find(
(action: { id: string }) => action.id === "stake",
)?.navigationParams;
if (!stakeFlow) return null;

const [name, options] = stakeFlow;

navigation.navigate(NavigatorName.Base, {
screen: name,
drawer: options?.drawer,
params: {
screen: options.screen,
params: {
...(options?.params || {}),
account,
parentAccount,
},
},
});
},
[navigation, parentRoute, alwaysShowNoFunds],
);
const goToAccountStakeFlow = useStakingDrawer({ navigation, parentRoute, alwaysShowNoFunds });

const requestAccount = useCallback(() => {
if (cryptoCurrencies.length === 1) {
Expand All @@ -85,7 +35,7 @@ const StakeFlow = ({ route }: Props) => {
screen: ScreenName.RequestAccountsSelectAccount,
params: {
currency: cryptoCurrencies[0],
onSuccess: goToAccount,
onSuccess: goToAccountStakeFlow,
allowAddAccount: true, // if no account, need to be able to add one to get funds.
},
});
Expand All @@ -95,19 +45,19 @@ const StakeFlow = ({ route }: Props) => {
params: {
currencies: cryptoCurrencies,
allowAddAccount: true,
onSuccess: goToAccount,
onSuccess: goToAccountStakeFlow,
},
});
}
}, [cryptoCurrencies, navigation, goToAccount]);
}, [cryptoCurrencies, navigation, goToAccountStakeFlow]);

useLayoutEffect(() => {
if (account) {
goToAccount(account);
goToAccountStakeFlow(account);
} else {
requestAccount();
}
}, [requestAccount, goToAccount, account]);
}, [requestAccount, goToAccountStakeFlow, account]);

return null;
};
Expand Down
68 changes: 68 additions & 0 deletions apps/ledger-live-mobile/src/components/Stake/useStakingDrawer.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import { StackNavigationProp } from "@react-navigation/stack";
import { ParamListBase, RouteProp } from "@react-navigation/native";
import { Account } from "@ledgerhq/types-live";
import { NavigatorName, ScreenName } from "../../const";
import perFamilyAccountActions from "../../generated/accountActions";

/** Open the stake flow for a given account from any navigator. Returns to parent route on completion. */
export function useStakingDrawer({
navigation,
parentRoute,
alwaysShowNoFunds,
}: {
navigation: StackNavigationProp<{ [key: string]: object | undefined }>;
parentRoute: RouteProp<ParamListBase> | undefined;
alwaysShowNoFunds?: boolean | undefined;
}) {
return (account: Account, parentAccount?: Account) => {
if (alwaysShowNoFunds) {
// get funds to stake with
navigation.navigate(NavigatorName.Base, {
screen: NavigatorName.NoFundsFlow,
drawer: undefined,
params: {
screen: ScreenName.NoFunds,
params: {
account,
parentAccount,
},
},
});
return;
}

// @ts-expect-error issue in typing
const decorators = perFamilyAccountActions[account?.currency?.family];
// get the stake flow for the specific currency
const familySpecificMainActions =
(decorators &&
decorators.getMainActions &&
decorators.getMainActions({
account,
parentAccount,
colors: {},
parentRoute,
})) ||
[];
const stakeFlow = familySpecificMainActions.find(
(action: { id: string }) => action.id === "stake",
)?.navigationParams;
if (!stakeFlow) return null;

const [name, options] = stakeFlow;

// open staking drawer (or stake flow screens) for the specific currency, inside the current navigator
navigation.navigate(NavigatorName.Base, {
screen: name,
drawer: options?.drawer,
params: {
screen: options.screen,
params: {
...(options?.params || {}),
account,
parentAccount,
},
},
});
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -111,10 +111,12 @@ export default function TransferDrawer({ onClose }: Omit<ModalProps, "isRequesti
screen: ScreenName.SwapForm,
});
}, [onNavigate, page, track]);

const onBuy = useCallback(
() => onNavigate(NavigatorName.Exchange, { screen: ScreenName.ExchangeBuy }),
[onNavigate],
);

const onSell = useCallback(
() => onNavigate(NavigatorName.Exchange, { screen: ScreenName.ExchangeSell }),
[onNavigate],
Expand Down

2 comments on commit c4c16e6

@vercel
Copy link

@vercel vercel bot commented on c4c16e6 Aug 25, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bot "super report" on 7 last days

What is the Bot and how does it work? Everything is documented here!

7 last days: 7 runs, 655 success txs. ⚠️ 76% success rate. ⚠️ 46% coverage rate.

Spec Availability (scan success) Transactions success Mutations Coverage Operations
Bitcoin Testnet ✅ 100% N/A ❌ 0%
Bitcoin Cash ✅ 100% 92% ✅ 100% 24
Bitcoin Gold ✅ 100% ✅ 100% ✅ 100% 23
Dash ✅ 100% ✅ 100% ✅ 100% 27
Digibyte ✅ 100% ✅ 100% ✅ 100% 27
DogeCoin ✅ 100% ✅ 100% ✅ 100% 26
Komodo ✅ 100% ✅ 100% ✅ 100% 22
Litecoin ✅ 100% ✅ 100% ✅ 100% 30
Peercoin ✅ 100% ✅ 100% ✅ 100% 17
PivX ✅ 100% 86% ✅ 100% 18
Vertcoin ✅ 100% ✅ 100% ✅ 100% 20
Viacoin ✅ 100% ✅ 100% ✅ 100% 15
ZCash ✅ 100% ✅ 100% ✅ 100% 17
Horizen ✅ 100% ⚠️ 76% 80% 16
Celo ✅ 100% ⚠️ 58% ⚠️ 67% 7
osmosis ✅ 100% ❌ 0% ❌ 0%
desmos ✅ 100% ❌ 0% ❌ 0%
umee ✅ 100% ❌ 0% ❌ 0%
persistence ⚠️ -100% ❌ 0% ❌ 0%
quicksilver ✅ 100% N/A ❌ 0%
onomy ✅ 100% ❌ 0% ❌ 0%
stargaze ✅ 100% ❌ 0% ❌ 0%
coreum ✅ 100% N/A ❌ 0%
Crypto org ✅ 100% ⚠️ 77% ✅ 100% 17
Elrond ✅ 100% ❌ 0% ❌ 0%
Polygon ✅ 100% ❌ 0% ❌ 0%
Ethereum Classic ✅ 100% ❌ 0% ❌ 0%
Ethereum Goerli ✅ 100% ❌ 0% ❌ 0%
Hedera 80% N/A ❌ 0%
InternetComputer ✅ 100% ✅ 100% ✅ 100% 10
NEAR ✅ 100% 92% ✅ 100% 11
XRP ✅ 100% ✅ 100% ✅ 100% 9
Solana ✅ 100% ⚠️ 52% ⚠️ 50% 17
Stacks ✅ 100% ⚠️ 44% ✅ 100% 4
Stellar ✅ 100% ✅ 100% ⚠️ 50% 18
Tezos ✅ 100% ❌ 0% ❌ 0%
Algorand ✅ 100% 95% ⚠️ 60% 19
Ethereum EVM (TEST ONLY DO NOT USE) ✅ 100% N/A ❌ 0%
Polygon EVM (TEST ONLY DO NOT USE) N/A N/A ❌ 0%
Arbitrum Goerli ✅ 100% ✅ 100% ✅ 100% 15
Flare ✅ 100% ✅ 100% ⚠️ 67% 14
Songbird ✅ 100% ✅ 100% ⚠️ 67% 15
Moonbeam ✅ 100% ⚠️ 36% ⚠️ 67% 4
RSK ✅ 100% ✅ 100% ⚠️ 67% 15
Bittorent Chain ✅ 100% ✅ 100% ⚠️ 67% 14
Kava EVM ✅ 100% ✅ 100% ⚠️ 67% 15
Evmos EVM ❌ 0% ❌ 0% ❌ 0%
OP Mainnet ✅ 100% N/A ❌ 0%
Optimism Goerli ✅ 100% ✅ 100% ✅ 100% 16
Energy Web ✅ 100% ✅ 100% ⚠️ 67% 14
Astar ✅ 100% ✅ 100% ⚠️ 67% 15
Metis ✅ 100% ✅ 100% ⚠️ 67% 15
Moonriver ✅ 100% 92% ⚠️ 67% 12
Velas EVM ✅ 100% ✅ 100% ⚠️ 67% 15
Syscoin ✅ 100% 86% ⚠️ 67% 12
Polygon zkEVM Testnet ✅ 100% ❌ 0% ❌ 0%
Base ✅ 100% ✅ 100% ⚠️ 67% 13
Base Goerli ✅ 100% ✅ 100% ⚠️ 67% 15
Klaytn N/A N/A ❌ 0%
Qtum ✅ 100% ✅ 100% 80% 7
Decred ✅ 100% ✅ 100% ⚠️ 60% 4
cardano ✅ 100% ✅ 100% ⚠️ 67% 4
axelar ✅ 100% ❌ 0% ❌ 0%
cosmos ✅ 100% ❌ 0% ❌ 0%
secret_network ✅ 100% ❌ 0% ❌ 0%
Avalanche C-Chain ✅ 100% ❌ 0% ❌ 0%
BSC ✅ 100% ❌ 0% ❌ 0%
Filecoin ✅ 100% ⚠️ 50% ⚠️ 50% 1
Tron ✅ 100% ⚠️ 50% ⚠️ 33% 2
Cronos ✅ 100% ✅ 100% ⚠️ 67% 8
Fantom ✅ 100% ✅ 100% ⚠️ 67% 3
Boba ✅ 100% N/A ❌ 0%
Telos ✅ 100% ✅ 100% ✅ 100% 6
Polygon zkEVM ✅ 100% ✅ 100% ✅ 100% 4
Polkadot N/A N/A ❌ 0%
Bitcoin ✅ 100% N/A ❌ 0%
Ethereum ✅ 100% N/A ❌ 0%

Details case by case

Spec Bitcoin Testnet

Mutation Tx Success Ops Errors
move ~50% N/A
optimize-size N/A
send 1 utxo N/A
send OP_RETURN transaction N/A
send max N/A

Spec Bitcoin Cash

Mutation Tx Success Ops Errors
move ~50% 83% 5 1
optimize-size ✅ 100% 5
send 1 utxo 80% 4 1
send OP_RETURN transaction ✅ 100% 5
send max ✅ 100% 5
Detail of errors (3)
  1. (x2) TEST during broadcast LedgerAPI4xx: -25: Missing inputs

Spec Bitcoin Gold

Mutation Tx Success Ops Errors
move ~50% ✅ 100% 4
optimize-size ✅ 100% 4
send 1 utxo ✅ 100% 5
send OP_RETURN transaction ✅ 100% 5
send max ✅ 100% 5

Spec Dash

Mutation Tx Success Ops Errors
move ~50% ✅ 100% 6
optimize-size ✅ 100% 5
send 1 utxo ✅ 100% 6
send OP_RETURN transaction ✅ 100% 5
send max ✅ 100% 5

Spec Digibyte

Mutation Tx Success Ops Errors
move ~50% ✅ 100% 6
optimize-size ✅ 100% 6
send 1 utxo ✅ 100% 6
send OP_RETURN transaction ✅ 100% 4
send max ✅ 100% 5

Spec DogeCoin

Mutation Tx Success Ops Errors
move ~50% ✅ 100% 4
optimize-size ✅ 100% 6
send 1 utxo ✅ 100% 6
send OP_RETURN transaction ✅ 100% 5
send max ✅ 100% 5

Spec Komodo

Mutation Tx Success Ops Errors
move ~50% ✅ 100% 5
optimize-size ✅ 100% 5
send 1 utxo ✅ 100% 5
send OP_RETURN transaction ✅ 100% 4
send max ✅ 100% 3

Spec Litecoin

Mutation Tx Success Ops Errors
move ~50% ✅ 100% 6
optimize-size ✅ 100% 6
send 1 utxo ✅ 100% 6
send OP_RETURN transaction ✅ 100% 6
send max ✅ 100% 6

Spec Peercoin

Mutation Tx Success Ops Errors
move ~50% ✅ 100% 4
optimize-size ✅ 100% 4
send 1 utxo ✅ 100% 4
send OP_RETURN transaction ✅ 100% 2
send max ✅ 100% 3

Spec PivX

Mutation Tx Success Ops Errors
move ~50% 80% 4 1
optimize-size ✅ 100% 5
send 1 utxo ⚠️ 67% 4 1
send OP_RETURN transaction ✅ 100% 2
send max ✅ 100% 3
Detail of errors (4)
  1. (x3) LedgerAPI4xx: Error when executing RPC call

Spec Vertcoin

Mutation Tx Success Ops Errors
move ~50% ✅ 100% 3
optimize-size ✅ 100% 3
send 1 utxo ✅ 100% 4
send OP_RETURN transaction ✅ 100% 5
send max ✅ 100% 5

Spec Viacoin

Mutation Tx Success Ops Errors
move ~50% ✅ 100% 4
optimize-size ✅ 100% 1
send 1 utxo ✅ 100% 4
send OP_RETURN transaction ✅ 100% 2
send max ✅ 100% 4

Spec ZCash

Mutation Tx Success Ops Errors
move ~50% ✅ 100% 5
optimize-size ✅ 100% 3
send 1 utxo ✅ 100% 4
send OP_RETURN transaction ✅ 100% 3
send max ✅ 100% 2

Spec Horizen

Mutation Tx Success Ops Errors
move ~50% ✅ 100% 5
optimize-size ✅ 100% 4
send 1 utxo ✅ 100% 6
send OP_RETURN transaction ❌ 0% 1
send max ✅ 100% 1
Detail of errors (6)
  1. (x5) TEST during broadcast LedgerAPI4xx: -26: 68: op-checkblockatheight-needed

Spec Celo

Mutation Tx Success Ops Errors
Celo: Move 50% to another account ⚠️ 33% 1 1
Celo: Send max to another account ⚠️ 33% 1 1
Celo: Register Account N/A
Celo: Unlock ✅ 100% 1
Celo: Lock N/A
Celo: Vote ⚠️ 50% 1 1
Celo: Activate Vote N/A
Celo: RevokeVote ✅ 100% 2
Celo: Withdraw ✅ 100% 1
Detail of errors (6)
  1. (x5) TEST mutation must not have tx status errors NotEnoughBalance: NotEnoughBalance

Spec osmosis

Mutation Tx Success Ops Errors
send some ❌ 0% 1, 2, 3, 4, 5, 6
send max ❌ 0% 3, 4, 6, 7
delegate new validators ❌ 0% 1, 5, 8
undelegate N/A
redelegate ❌ 0% 5, 8
claim rewards N/A
Detail of errors (21)
  1. (x2) TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:osmo:osmo1v283e7h2plllyjwgqrexv2ge5e4z252u26g0q
  2. TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:osmo:osmo1n6vccpa77x7xyhnk98jy6gg3rmgjkazxuyk2n
  3. (x2) TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:osmo:osmo1vc7s929uh2yxyhau4wsg5th9jzedvkurt8rqd
  4. (x2) TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:osmo:osmo1vvzwc6l3wfdaqa9rncex8k2uwtpwztswsm7kk
  5. (x5) TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:osmo:osmo1qgrd8srhvald995uvpeyncvwg7afgkmr88sps
  6. (x2) TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:osmo:osmo1rs97j43nfyvc689y5rjvnnhrq3tes6ghn8m44
  7. (x2) TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:osmo:osmo1hgyf054qztvmty3cayuw9nedftlhejv5r6kn0
  8. (x4) TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:osmo:osmo1qvtnzptp30maznnhdg30xl2jtdq2shpn08kxa

Spec desmos

Mutation Tx Success Ops Errors
send some ❌ 0% 1
send max ❌ 0% 1
delegate new validators ❌ 0% 1
undelegate ❌ 0% 1
redelegate N/A
claim rewards ❌ 0% 1
Detail of errors (9)
  1. (x8) Error: could not find optimisticOperation

Spec umee

Mutation Tx Success Ops Errors
send some ❌ 0% 1
send max ❌ 0% 1
delegate new validators ❌ 0% 1
undelegate N/A
redelegate N/A
claim rewards N/A
Detail of errors (9)
  1. (x8) Error: could not find optimisticOperation

Spec persistence

❌ Fatal cases (4)
  • (x4) Error: "Error during cosmos synchronization: "API HTTP 503
Mutation Tx Success Ops Errors
send some N/A
send max ❌ 0% 1, 2
delegate new validators ❌ 0% 2
undelegate N/A
redelegate N/A
claim rewards N/A
Detail of errors (5)
  1. TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:persistence:persistence1hgyf054qztvmty3cayuw9ne
  2. (x3) Error: "Error during cosmos synchronization: "API HTTP 503

Spec quicksilver

Mutation Tx Success Ops Errors
send some N/A
send max N/A
delegate new validators N/A
undelegate N/A
redelegate N/A
claim rewards N/A

Spec onomy

Mutation Tx Success Ops Errors
send some ❌ 0% 1, 2, 3
send max ❌ 0% 3, 4, 5, 6
delegate new validators ❌ 0% 1, 6
undelegate N/A
redelegate ❌ 0% 2
claim rewards ❌ 0% 1, 6, 7
Detail of errors (15)
  1. (x3) TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:onomy:onomy1v283e7h2plllyjwgqrexv2ge5e4z252ucq0
  2. (x2) TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:onomy:onomy1qvtnzptp30maznnhdg30xl2jtdq2shpnaa3
  3. (x2) TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:onomy:onomy1vc7s929uh2yxyhau4wsg5th9jzedvkureay
  4. TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:onomy:onomy1rs97j43nfyvc689y5rjvnnhrq3tes6ghpau
  5. TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:onomy:onomy1n6vccpa77x7xyhnk98jy6gg3rmgjkazxw73
  6. (x4) TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:onomy:onomy1hgyf054qztvmty3cayuw9nedftlhejv53q3
  7. TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:onomy:onomy1jgk668h53gd9wn09mndq7uzgk80nr5d8c3y

Spec stargaze

Mutation Tx Success Ops Errors
send some ❌ 0% 1, 2, 3
send max ❌ 0% 3, 4, 5, 6
delegate new validators ❌ 0% 2, 4, 7
undelegate ❌ 0% 1, 4
redelegate ❌ 0% 4, 7
claim rewards ❌ 0% 7
Detail of errors (21)
  1. (x2) TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:stargaze:stars1qgrd8srhvald995uvpeyncvwg7afgkmr
  2. (x4) TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:stargaze:stars1jgk668h53gd9wn09mndq7uzgk80nr5d8
  3. (x2) TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:stargaze:stars1g9t7sv8y0mvu2qd0xguc40xujnu94rh5
  4. (x4) TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:stargaze:stars1qvtnzptp30maznnhdg30xl2jtdq2shpn
  5. (x2) TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:stargaze:stars1v283e7h2plllyjwgqrexv2ge5e4z252u
  6. TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:stargaze:stars1n6vccpa77x7xyhnk98jy6gg3rmgjkazx
  7. (x5) TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:stargaze:stars1hgyf054qztvmty3cayuw9nedftlhejv5

Spec coreum

Mutation Tx Success Ops Errors
send some N/A
send max N/A
delegate new validators N/A
undelegate N/A
redelegate N/A
claim rewards N/A

Spec Crypto org

Mutation Tx Success Ops Errors
move 50% 83% 10 1
send max ⚠️ 70% 7 1, 2
Detail of errors (6)
  1. (x4) Error: could not find optimisticOperation
  2. TEST deviceAction confirm step 'To' Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 1 Object { - "To": "cro1h95uwv25le8rd0fl80qyp0438kn57xl4cp64dl", + "To": "cro1

Spec Elrond

Mutation Tx Success Ops Errors
send 50%~ ❌ 0% 1, 2, 3, 4
send max ❌ 0% 2, 4
move some ESDT ❌ 0% 2, 3, 5
delegate 1 EGLD N/A
unDelegate 1 EGLD N/A
withdraw all EGLD N/A
Detail of errors (16)
  1. (x2) TEST raw optimistic operation matches Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:elrond:erd143yn6uvrfzjptq5g7wvzntl3fcthsxtxrp9
  2. (x4) TEST raw optimistic operation matches Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:elrond:erd1ql9pxrhe29cjr8qgxx3rtmh9lyax5x9dkvu
  3. (x4) TEST raw optimistic operation matches Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:elrond:erd149kzxgtymzzaddanlj02zhyhwves9wspvk8
  4. (x4) TEST raw optimistic operation matches Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:elrond:erd172muqtk2ka5ath64284fm0av4tarkg6l040
  5. TEST raw optimistic operation matches Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:elrond:erd1nhe920dlsx8u0lg46grd82dc8vqj8wejh8u

Spec Polygon

Mutation Tx Success Ops Errors
move 50% ❌ 0% 1
send max ❌ 0% 1
move some ERC20 N/A
Detail of errors (9)
  1. (x8) TypeError: Cannot add property nonce, object is not extensible

Spec Ethereum Classic

Mutation Tx Success Ops Errors
move 50% ❌ 0% 1
send max ❌ 0% 1
Detail of errors (9)
  1. (x8) TypeError: Cannot add property nonce, object is not extensible

Spec Ethereum Goerli

Mutation Tx Success Ops Errors
move 50% ❌ 0% 1
send max ❌ 0% 1
Detail of errors (9)
  1. (x8) TypeError: Cannot add property nonce, object is not extensible

Spec Hedera

❌ Fatal cases (1)
  • LedgerAPI5xx: API HTTP 503
Mutation Tx Success Ops Errors
Send ~50% N/A
Send max N/A
Memo N/A

Spec InternetComputer

Mutation Tx Success Ops Errors
Send ~50% ✅ 100% 5
Transfer Max ✅ 100% 5

Spec NEAR

Mutation Tx Success Ops Errors
Move 50% to another account ✅ 100% 2
Send max to another account ✅ 100% 2
Stake ⚠️ 75% 3 1
Unstake ✅ 100% 3
Withdraw ✅ 100% 1
Detail of errors (2)
  1. TEST mutation must not have tx status errors NearStakingThresholdNotMet: NearStakingThresholdNotMet

Spec XRP

Mutation Tx Success Ops Errors
move ~50% ✅ 100% 9

Spec Solana

Mutation Tx Success Ops Errors
Transfer ~50% 80% 8 1, 2
Transfer Max ❌ 0% 3
Delegate ✅ 100% 5
Deactivate Activating Delegation ✅ 100% 3
Deactivate Active Delegation ❌ 0% 4
Reactivate Deactivating Delegation N/A
Activate Inactive Delegation ✅ 100% 1
Withdraw Delegation ❌ 0% 4, 5
Detail of errors (17)
  1. TEST destination > account balance increased with transaction amount Error: expect(received).toBe(expected) // Object.is equality Expected: "63482229" Received: "61094349"
  2. TEST destination > account balance increased with transaction amount Error: expect(received).toBe(expected) // Object.is equality Expected: "188226169" Received: "188221169"
  3. (x5) TEST account balance should be zero Error: expect(received).toBe(expected) // Object.is equality Expected: 0 Received: 890880
  4. (x8) TEST during broadcast NetworkDown: failed to send transaction: Transaction simulation failed: Transaction results in an account (0) without insufficient funds for rent
  5. NetworkDown: failed to get Stake Activation 2WsrYgbAt1UoHUDgiYMRzwxRtJam5PrFTiKS6NVdkMJr: Invalid param: account not found

Spec Stacks

Mutation Tx Success Ops Errors
Send 50%~ ⚠️ 67% 2 1
Transfer Max ⚠️ 33% 2 1
Detail of errors (6)
  1. (x5) Error: could not find optimisticOperation

Spec Stellar

Mutation Tx Success Ops Errors
move ~50% XLM ✅ 100% 9
Send max XLM ✅ 100% 9
add USDC asset N/A
move ~50% USDC asset N/A

Spec Tezos

Mutation Tx Success Ops Errors
send unrevealed ❌ 0% 1
send revealed N/A
send max (non delegating) ❌ 0% 2
delegate unrevealed ❌ 0% 3
delegate revealed N/A
undelegate unrevealed N/A
undelegate revealed ❌ 0% 4
Detail of errors (12)
  1. (x4) TEST deviceAction confirm step 'Fee' Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 1 Object { - "Fee": "0.000749", + "Fee": "0.000666", }
  2. (x3) TEST deviceAction confirm step 'Fee' Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 1 Object { - "Fee": "0.000949", + "Fee": "0.000866", }
  3. (x3) TEST deviceAction confirm step 'Fee' Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 1 Object { - "Fee": "0.000744", + "Fee": "0.000661", }
  4. Error: could not find optimisticOperation

Spec Algorand

Mutation Tx Success Ops Errors
move ~50% ✅ 100% 10
send max ✅ 100% 5
send ASA ~50% N/A
opt-In ASA available 80% 4 1
claim rewards N/A
Detail of errors (2)
  1. TEST deviceAction confirm step 'Amount' Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 1 Object { - "Amount": "USDT 0.0", + "Amount": "USDt 0.0", }

Spec Ethereum EVM (TEST ONLY DO NOT USE)

Mutation Tx Success Ops Errors
move 50% N/A
send max N/A
move some ERC20 N/A

Spec Polygon EVM (TEST ONLY DO NOT USE)

❌ Fatal cases (6)
  • (x5) DisconnectedDevice: tcp closed
  • Error: speculos process failure. readall: connection closed
Mutation Tx Success Ops Errors
move 50% N/A
send max N/A
move some ERC20 N/A

Spec Arbitrum Goerli

Mutation Tx Success Ops Errors
move 50% ✅ 100% 10
send max ✅ 100% 4
move some ERC20 ✅ 100% 1

Spec Flare

Mutation Tx Success Ops Errors
move 50% ✅ 100% 10
send max ✅ 100% 4
move some ERC20 N/A

Spec Songbird

Mutation Tx Success Ops Errors
move 50% ✅ 100% 10
send max ✅ 100% 5
move some ERC20 N/A

Spec Moonbeam

Mutation Tx Success Ops Errors
move 50% ⚠️ 33% 2 1, 2, 3, 4
send max ⚠️ 40% 2 5, 6, 7
move some ERC20 N/A
Detail of errors (8)
  1. TEST account balance moved with operation value Error: expect(received).toBe(expected) // Object.is equality Expected: "30169979564346872127" Received: "30169977150480977127"
  2. TEST account balance moved with operation value Error: expect(received).toBe(expected) // Object.is equality Expected: "2924487598776226962" Received: "2924486804445997962"
  3. TEST account balance moved with operation value Error: expect(received).toBe(expected) // Object.is equality Expected: "18505578530540096927" Received: "18505581335373659927"
  4. TEST account balance moved with operation value Error: expect(received).toBe(expected) // Object.is equality Expected: "19324405146672834278" Received: "19324411623193647278"
  5. TEST account balance moved with operation value Error: expect(received).toBe(expected) // Object.is equality Expected: "2622031009794000" Received: "2623254429264000"
  6. TEST account balance moved with operation value Error: expect(received).toBe(expected) // Object.is equality Expected: "2925870319596000" Received: "2923371893274000"
  7. TEST account balance moved with operation value Error: expect(received).toBe(expected) // Object.is equality Expected: "2919660193758000" Received: "2917528946535000"

Spec RSK

Mutation Tx Success Ops Errors
move 50% ✅ 100% 10
send max ✅ 100% 5
move some ERC20 N/A

Spec Bittorent Chain

Mutation Tx Success Ops Errors
move 50% ✅ 100% 9
send max ✅ 100% 5
move some ERC20 N/A

Spec Kava EVM

Mutation Tx Success Ops Errors
move 50% ✅ 100% 10
send max ✅ 100% 5
move some ERC20 N/A

Spec Evmos EVM

❌ Fatal cases (3)
  • (x3) Error: scan accounts timeout for currency Evmos EVM
Mutation Tx Success Ops Errors
move 50% ❌ 0% 1, 2, 3
send max ❌ 0% 2, 4, 5
move some ERC20 N/A
Detail of errors (10)
  1. (x4) Error: could not find optimisticOperation
  2. (x2) Error: invalid arrayify value (argument="value", value="-0x6ccc2fc4", code=INVALID_ARGUMENT, version=bytes/5.7.0)
  3. Error: invalid arrayify value (argument="value", value="-0x2a872272", code=INVALID_ARGUMENT, version=bytes/5.7.0)
  4. Error: invalid arrayify value (argument="value", value="-0x8ed12778", code=INVALID_ARGUMENT, version=bytes/5.7.0)
  5. Error: invalid arrayify value (argument="value", value="-0x2a666aaa", code=INVALID_ARGUMENT, version=bytes/5.7.0)

Spec OP Mainnet

Mutation Tx Success Ops Errors
move 50% N/A
send max N/A
move some ERC20 N/A

Spec Optimism Goerli

Mutation Tx Success Ops Errors
move 50% ✅ 100% 9
send max ✅ 100% 5
move some ERC20 ✅ 100% 2

Spec Energy Web

Mutation Tx Success Ops Errors
move 50% ✅ 100% 9
send max ✅ 100% 5
move some ERC20 N/A

Spec Astar

Mutation Tx Success Ops Errors
move 50% ✅ 100% 10
send max ✅ 100% 5
move some ERC20 N/A

Spec Metis

Mutation Tx Success Ops Errors
move 50% ✅ 100% 10
send max ✅ 100% 5
move some ERC20 N/A

Spec Moonriver

Mutation Tx Success Ops Errors
move 50% 88% 7 1
send max ✅ 100% 5
move some ERC20 N/A
Detail of errors (2)
  1. TEST account balance moved with operation value Error: expect(received).toBe(expected) // Object.is equality Expected: "142153005689357812" Received: "142153010786246812"

Spec Velas EVM

Mutation Tx Success Ops Errors
move 50% ✅ 100% 10
send max ✅ 100% 5
move some ERC20 N/A

Spec Syscoin

Mutation Tx Success Ops Errors
move 50% ⚠️ 78% 7 1
send max ✅ 100% 5
move some ERC20 N/A
Detail of errors (3)
  1. (x2) Error: could not find optimisticOperation

Spec Polygon zkEVM Testnet

Mutation Tx Success Ops Errors
move 50% ❌ 0% 1
send max ❌ 0% 1
move some ERC20 N/A
Detail of errors (9)
  1. (x8) Error: could not find optimisticOperation

Spec Base

Mutation Tx Success Ops Errors
move 50% ✅ 100% 8
send max ✅ 100% 5
move some ERC20 N/A

Spec Base Goerli

Mutation Tx Success Ops Errors
move 50% ✅ 100% 10
send max ✅ 100% 5
move some ERC20 N/A

Spec Klaytn

❌ Fatal cases (6)
  • (x6) LedgerAPI4xx: API HTTP 404
Mutation Tx Success Ops Errors
move 50% N/A
send max N/A
move some ERC20 N/A

Spec Qtum

Mutation Tx Success Ops Errors
move ~50% ✅ 100% 2
optimize-size ✅ 100% 2
send 1 utxo N/A
send OP_RETURN transaction ✅ 100% 2
send max ✅ 100% 1

Spec Decred

Mutation Tx Success Ops Errors
move ~50% ✅ 100% 1
optimize-size N/A
send 1 utxo ✅ 100% 1
send OP_RETURN transaction ✅ 100% 2
send max N/A

Spec cardano

Mutation Tx Success Ops Errors
move ~50% ✅ 100% 1
send max ✅ 100% 1
move ~10% token N/A
delegate to pool ✅ 100% 1
redelegate to pool N/A
undelegate ✅ 100% 1

Spec axelar

Mutation Tx Success Ops Errors
send some ❌ 0% 1
send max ❌ 0% 2
delegate new validators N/A
undelegate N/A
redelegate N/A
claim rewards N/A
Detail of errors (3)
  1. TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:axelar:axelar1u63uctcult0t7wsscxxsmv2r2lgl25f4r
  2. TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:axelar:axelar123r3dwfylykx0fugawn6mu2h2smq3047p

Spec cosmos

Mutation Tx Success Ops Errors
send some ❌ 0% 1
send max ❌ 0% 2
delegate new validators ❌ 0% 3
undelegate N/A
redelegate N/A
claim rewards N/A
Detail of errors (4)
  1. TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:cosmos:cosmos17s09a0jyp24hl7w3vcn8padz6efwmrpjw
  2. TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:cosmos:cosmos1u63uctcult0t7wsscxxsmv2r2lgl25f48
  3. TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:cosmos:cosmos1k2d965a5clx7327n9zx30ewz39ms7kyj9

Spec secret_network

Mutation Tx Success Ops Errors
send some ❌ 0% 1
send max ❌ 0% 2
delegate new validators N/A
undelegate N/A
redelegate N/A
claim rewards N/A
Detail of errors (4)
  1. (x2) TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:secret_network:secret123r3dwfylykx0fugawn6mu2h2
  2. TEST optimistic operation matches op Error: expect(received).toMatchObject(expected) - Expected - 1 + Received + 0 Object { "accountId": "js:2:secret_network:secret1k2d965a5clx7327n9zx30ewz3

Spec Avalanche C-Chain

Mutation Tx Success Ops Errors
move 50% ❌ 0% 1
send max N/A
Detail of errors (2)
  1. TypeError: Cannot add property nonce, object is not extensible

Spec BSC

Mutation Tx Success Ops Errors
move 50% ❌ 0% 1
send max ❌ 0% 1
move some BEP20 N/A
Detail of errors (5)
  1. (x4) TypeError: Cannot add property nonce, object is not extensible

Spec Filecoin

Mutation Tx Success Ops Errors
Send 50%~ ❌ 0% 1
Transfer Max ✅ 100% 1
Detail of errors (2)
  1. TEST destination > account balance increased with transaction amount Error: expect(received).toBe(expected) // Object.is equality Expected: "854325448313177252" Received: "854325448313177247"

Spec Tron

Mutation Tx Success Ops Errors
move 50% to another account ✅ 100% 1
send max to another account ✅ 100% 1
freeze 25% to bandwidth energy ❌ 0% 1
unfreeze bandwith / energy N/A
submit vote N/A
claim rewards N/A
Detail of errors (3)
  1. (x2) Error: class org.tron.core.exception.ContractValidateException : freeze v2 is open, old freeze is closed

Spec Cronos

Mutation Tx Success Ops Errors
move 50% ✅ 100% 5
send max ✅ 100% 3
move some ERC20 N/A

Spec Fantom

Mutation Tx Success Ops Errors
move 50% ✅ 100% 2
send max ✅ 100% 1
move some ERC20 N/A

Spec Boba

Mutation Tx Success Ops Errors
move 50% N/A
send max N/A
move some ERC20 N/A

Spec Telos

Mutation Tx Success Ops Errors
move 50% ✅ 100% 4
send max ✅ 100% 1
move some ERC20 ✅ 100% 1

Spec Polygon zkEVM

Mutation Tx Success Ops Errors
move 50% ✅ 100% 2
send max ✅ 100% 1
move some ERC20 ✅ 100% 1

Spec Polkadot

❌ Fatal cases (3)
  • (x3) Invariant Violation: Polkadot: no app found. Are you sure your COINAPPS is up to date?
Mutation Tx Success Ops Errors
send 50%~ N/A
send max N/A
bond - bondExtra N/A
unbond N/A
rebond N/A
nominate N/A
withdraw N/A

Spec Bitcoin

Mutation Tx Success Ops Errors
move ~50% N/A
optimize-size N/A
send 1 utxo N/A
send OP_RETURN transaction N/A
send max N/A

Spec Ethereum

Mutation Tx Success Ops Errors
move 50% N/A
send max N/A
move some ERC20 N/A

Please sign in to comment.