Skip to content

Commit

Permalink
bugfix(LIVE-7623): typings (#4247)
Browse files Browse the repository at this point in the history
* fix(LIVE-7623): typings

* fix(LIVE-7623): changeset

fix(LIVE-7623): prettier

* fix(LIVE-7623): refactor exchange body content

fix(LIVE-7623): replace types

fix(LIVE-7623): optional rateTypes

* fix(LIVE-7623): lint

* fix(LIVE-7623): spelling mistake

* fix(LIVE-7623): fix tests

* fix(LIVE-7623): remove @ts-expect-error
  • Loading branch information
cng-ledger authored Aug 24, 2023
1 parent bafa799 commit d553f79
Show file tree
Hide file tree
Showing 7 changed files with 146 additions and 89 deletions.
5 changes: 5 additions & 0 deletions .changeset/tricky-crabs-raise.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"ledger-live-desktop": patch
---

bugfix(LIVE-7623): typings improvement and remove @ts-expect-error comment
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,11 @@ import React, { useEffect, useMemo, useState } from "react";
import { Exchange } from "@ledgerhq/live-common/exchange/platform/types";
import { Operation, SignedOperation } from "@ledgerhq/types-live";
import { Transaction } from "@ledgerhq/live-common/generated/types";
import connectApp from "@ledgerhq/live-common/hw/connectApp";
import { createAction } from "@ledgerhq/live-common/hw/actions/completeExchange";
import { createAction as txCreateAction } from "@ledgerhq/live-common/hw/actions/transaction";
import { TokenCurrency } from "@ledgerhq/types-cryptoassets";
import { ModalBody } from "~/renderer/components/Modal";
import Box from "~/renderer/components/Box";
import DeviceAction from "~/renderer/components/DeviceAction";
import BigSpinner from "~/renderer/components/BigSpinner";
import ErrorDisplay from "~/renderer/components/ErrorDisplay";
import { useBroadcast } from "~/renderer/hooks/useBroadcast";
import completeExchange from "@ledgerhq/live-common/exchange/platform/completeExchange";
import { TokenCurrency } from "@ledgerhq/types-cryptoassets";
const exchangeAction = createAction(completeExchange);
const sendAction = txCreateAction(connectApp);
import { BodyContent } from "./BodyContent";

export type Data = {
provider: string;
Expand All @@ -25,22 +17,42 @@ export type Data = {
onResult: (a: Operation) => void;
onCancel: (a: Error) => void;
exchangeType: number;
rateType?: number;
};

const Body = ({ data, onClose }: { data: Data; onClose?: () => void | undefined }) => {
const { onResult, onCancel, ...exchangeParams } = data;

const { fromAccount: account, fromParentAccount: parentAccount } = exchangeParams.exchange;
let tokenCurrency: TokenCurrency | undefined;
if (account.type === "TokenAccount") tokenCurrency = account.token;
const request = {
...exchangeParams,
};
const request = { ...exchangeParams };

const tokenCurrency: TokenCurrency | undefined =
account.type === "TokenAccount" ? account.token : undefined;

const broadcast = useBroadcast({ account, parentAccount });
const [transaction, setTransaction] = useState<Transaction>();
const [signedOperation, setSignedOperation] = useState<SignedOperation>();
const [error, setError] = useState<Error>();

const signRequest = useMemo(
() =>
transaction
? {
tokenCurrency,
parentAccount,
account,
transaction,
appName: "Exchange",
}
: null,
[account, parentAccount, tokenCurrency, transaction],
);

useEffect(() => {
if (error) {
onCancel(error);
}
}, [onCancel, error]);

useEffect(() => {
if (signedOperation) {
broadcast(signedOperation).then(operation => {
Expand All @@ -49,69 +61,28 @@ const Body = ({ data, onClose }: { data: Data; onClose?: () => void | undefined
}, setError);
}
}, [broadcast, onClose, onResult, signedOperation]);
useEffect(() => {
if (error) {
onCancel(error);
}
}, [onCancel, error]);
const signRequest = useMemo(
() => ({
tokenCurrency,
parentAccount,
account,
transaction,
appName: "Exchange",
}),
[account, parentAccount, tokenCurrency, transaction],
);

return (
<ModalBody
onClose={() => {
onCancel(new Error("Interrupted by user"));
onClose?.();
}}
render={() => {
return (
<Box alignItems={"center"} justifyContent={"center"} px={32}>
{error ? (
<ErrorDisplay error={error} />
) : signedOperation ? (
<BigSpinner size={40} />
) : !transaction ? (
<DeviceAction
key="completeExchange"
action={exchangeAction}
// TODO: the proper team should investigate why the types mismatch
// @ts-expect-error This type is not compatible with the one expected by the action
request={request}
onResult={result => {
if ("completeExchangeError" in result) {
setError(result.completeExchangeError);
} else {
setTransaction(result.completeExchangeResult);
}
}}
/>
) : (
<DeviceAction
key="sign"
action={sendAction}
// TODO: the proper team should investigate why the types mismatch
// @ts-expect-error This type is not compatible with the one expected by the action
request={signRequest}
onResult={result => {
if ("transactionSignError" in result) {
setError(result.transactionSignError);
} else {
setSignedOperation(result.signedOperation);
}
}}
/>
)}
</Box>
);
}}
render={() => (
<Box alignItems={"center"} justifyContent={"center"} px={32}>
<BodyContent
error={error}
signRequest={signRequest}
signedOperation={signedOperation}
request={request}
onError={setError}
onOperationSigned={setSignedOperation}
onTransactionComplete={setTransaction}
/>
</Box>
)}
/>
);
};

export default Body;
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
import React from "react";
import { Exchange } from "@ledgerhq/live-common/exchange/platform/types";
import { Account, AccountLike, SignedOperation } from "@ledgerhq/types-live";
import { Transaction } from "@ledgerhq/live-common/generated/types";
import connectApp from "@ledgerhq/live-common/hw/connectApp";
import { createAction } from "@ledgerhq/live-common/hw/actions/completeExchange";
import { createAction as txCreateAction } from "@ledgerhq/live-common/hw/actions/transaction";
import completeExchange from "@ledgerhq/live-common/exchange/platform/completeExchange";
import { TokenCurrency } from "@ledgerhq/types-cryptoassets";
import DeviceAction from "~/renderer/components/DeviceAction";
import BigSpinner from "~/renderer/components/BigSpinner";
import ErrorDisplay from "~/renderer/components/ErrorDisplay";

const exchangeAction = createAction(completeExchange);
const sendAction = txCreateAction(connectApp);

type BodyContentProps = {
error?: Error;
signedOperation?: SignedOperation;
signRequest?: {
tokenCurrency: TokenCurrency | undefined;
parentAccount: Account | null | undefined;
account: AccountLike;
transaction: Transaction;
appName: string;
} | null;
request: {
provider: string;
exchange: Exchange;
transaction: Transaction;
binaryPayload: string;
signature: string;
exchangeType: number;
rateType?: number;
};
onOperationSigned: (value: SignedOperation) => void;
onTransactionComplete: (value: Transaction) => void;
onError: (error: Error) => void;
};

export const BodyContent = (props: BodyContentProps) => {
if (props.error) {
return <ErrorDisplay error={props.error} />;
}

if (props.signedOperation) {
return <BigSpinner size={40} />;
}

if (props.signRequest) {
return (
<DeviceAction
key="sign"
action={sendAction}
request={props.signRequest}
onResult={result => {
if ("transactionSignError" in result) {
props.onError(result.transactionSignError);
} else {
props.onOperationSigned(result.signedOperation);
}
}}
/>
);
}

return (
<DeviceAction
key="completeExchange"
action={exchangeAction}
request={props.request}
onResult={result => {
if ("completeExchangeError" in result) {
props.onError(result.completeExchangeError);
} else {
props.onTransactionComplete(result.completeExchangeResult);
}
}}
/>
);
};
Original file line number Diff line number Diff line change
Expand Up @@ -67,30 +67,31 @@ const PlatformCompleteExchange: React.FC<Props> = ({
}
}, []);

const signRequest = useMemo(
() => ({
tokenCurrency,
parentAccount,
account,
transaction,
appName: "Exchange",
}),
[account, parentAccount, tokenCurrency, transaction],
);
const signRequest = useMemo(() => {
if (transaction) {
return {
tokenCurrency,
parentAccount,
account,
transaction,
appName: "Exchange",
};
}
return null;
}, [account, parentAccount, tokenCurrency, transaction]);

const sendAction = useTransactionDeviceAction();
const exchangeAction = useCompleteExchangeDeviceAction();

return (
<SafeAreaView style={styles.root}>
{!transaction ? (
{!signRequest ? (
<DeviceActionModal
key="completeExchange"
device={device}
action={exchangeAction}
onClose={onClose}
onResult={onCompleteExchange}
// @ts-expect-error Wrong types?
request={request}
/>
) : (
Expand All @@ -100,7 +101,6 @@ const PlatformCompleteExchange: React.FC<Props> = ({
action={sendAction}
onClose={onClose}
onResult={onSign}
// @ts-expect-error Wrong types?
request={signRequest}
/>
)}
Expand Down
2 changes: 1 addition & 1 deletion libs/ledger-live-common/src/exchange/platform/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export type ExchangeSellRaw = {
};

interface CompleteExchangeInputCommon {
rateType: RateTypes;
rateType?: RateTypes;
deviceId?: string;
provider: string;
binaryPayload: string;
Expand Down
4 changes: 2 additions & 2 deletions libs/ledger-live-common/src/hw/actions/completeExchange.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { useEffect, useState } from "react";
import type { Action, Device } from "./types";
import type { AppState } from "./app";
import { log } from "@ledgerhq/logs";
import { Exchange } from "../../exchange/swap/types";
import { Exchange } from "../../exchange/platform/types";
import { Transaction } from "../../generated/types";

type State = {
Expand All @@ -24,7 +24,7 @@ type CompleteExchangeRequest = {
signature: string;
exchange: Exchange;
exchangeType: number;
rateType: number;
rateType?: number;
};
type Result =
| {
Expand Down
2 changes: 1 addition & 1 deletion libs/ledger-live-common/src/wallet-api/logic.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { isTokenAccount, isAccount, getMainAccount } from "../account/index";
import { Transaction } from "../generated/types";
import { prepareMessageToSign } from "../hw/signMessage/index";
import { getAccountBridge } from "../bridge";
import { Exchange } from "../exchange/platform/types";
import { Exchange } from "../exchange/swap/types";

export function translateContent(content: string | TranslatableString, locale = "en"): string {
if (!content || typeof content === "string") return content;
Expand Down

3 comments on commit d553f79

@vercel
Copy link

@vercel vercel bot commented on d553f79 Aug 24, 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] Testing with 'Nitrogen' ✅ 1 txs ❌ 1 txs ($10.79) ⏲ 4min 1s

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

1 critical spec errors

Spec Solana failed!

Error: can not format invalid transaction
❌ 1 mutation errors
necessary accounts resynced in 0.54ms
▬ Solana 1.2.0 on nanoS 2.1.0
→ FROM Solana 1 cross: 0.00565684 SOL (76ops) (5vhAGihUC1uKucJvreCgWWXB6LEptPwkwpqhkq9M6iaz on 44'/501'/0') solanaSub#0 js:2:solana:5vhAGihUC1uKucJvreCgWWXB6LEptPwkwpqhkq9M6iaz:solanaSub (! sum of ops 0.00089088 SOL)
max spendable ~0
★ using mutation 'Deactivate Active Delegation'
✔️ transaction 
  UNDELEGATE: 2ZDHHzX1SZxFc4en2qcsESJBGXYEEgfHMScaQsPcaTPo
STATUS (688ms)
  amount: 0 SOL
  estimated fees: 0.000005 SOL
  total spent: 0.000005 SOL
errors: 
errors: 
✔️ has been signed! (2689ms) {"operation":{"id":"js:2:solana:5vhAGihUC1uKucJvreCgWWXB6LEptPwkwpqhkq9M6iaz:solanaSub--UNDELEGATE","hash":"","type":"UNDELEGATE","senders":[],"recipients":[],"accountId":"js:2:solana:5vhAGihUC1uKucJvreCgWWXB6LEptPwkwpqhkq9M6iaz:solanaSub","blockHash":null,"blockHeight":null,"extra":{},"date":"2023-08-24T08:44:15.248Z","value":"5000","fee":"5000","transactionSequenceNumber":77},"signature":"010d669781d23f442c7e7e69c1aa1ec6ea103f08d4992c197dfbc38fca5a20efbdd25dc2816b420f45e83ff071bcca22e9e38fbe4ceb56c824bf4ce9b75e5ab40201000204492ff080f9bcdb23c48aac3d474aeb682fb1d854150cf7c27cb196892fbb0aff171c28acfaf08e02c3238b30ad3921cfad7a63a105098fd278257199ea983bea06a1d8179137542a983437bdfe2a7ab2557f535c8a78722b68a49dc00000000006a7d51718c774c928566398691d5eb68b5eb8a39b4b6d5c73555b2100000000561bbf8f1bfadbc800420f01149698dd00acfe3a498fe391f7b62270f58502e00102030103000405000000","expirationDate":null}
⚠️ TEST during broadcast
NetworkDown: failed to send transaction: Transaction simulation failed: Transaction results in an account (0) without insufficient funds for rent
(totally spent 3.9s – ends at 2023-08-24T08:45:00.751Z)
Details of the 2 mutations

Spec Solana (3)

Spec Solana found 11 Solana accounts (preload: 321ms). Will use Solana 1.2.0 on nanoS 2.1.0
Solana 1 cross: 0.00565684 SOL (76ops) (5vhAGihUC1uKucJvreCgWWXB6LEptPwkwpqhkq9M6iaz on 44'/501'/0') solanaSub#0 js:2:solana:5vhAGihUC1uKucJvreCgWWXB6LEptPwkwpqhkq9M6iaz:solanaSub
Solana 2: 0.00804848 SOL (97ops) (6iNx5SVYQBGEEooLJiptwqL8YR7qEcZELqpBfd4kwiwx on 44'/501'/1') solanaSub#1 js:2:solana:6iNx5SVYQBGEEooLJiptwqL8YR7qEcZELqpBfd4kwiwx:solanaSub
Solana 3: 0.0251918 SOL (76ops) (2rUuDdwtM2b6zKWU7y8PNzuHomPPG1uAreDafg2xPnA5 on 44'/501'/2') solanaSub#2 js:2:solana:2rUuDdwtM2b6zKWU7y8PNzuHomPPG1uAreDafg2xPnA5:solanaSub
Solana 4: 0.0128278 SOL (88ops) (Cw4MiEvepwAHkxY6DKYDVK5jDEoCSCoT4JmVbJPYauhk on 44'/501'/3') solanaSub#3 js:2:solana:Cw4MiEvepwAHkxY6DKYDVK5jDEoCSCoT4JmVbJPYauhk:solanaSub
Solana 5: 0.00089088 SOL (72ops) (BsQzVpyrHi5ivGaouc46w9GekQgbiJcWNAhsmzzRuo9M on 44'/501'/4') solanaSub#4 js:2:solana:BsQzVpyrHi5ivGaouc46w9GekQgbiJcWNAhsmzzRuo9M:solanaSub
Solana 6: 0.0758852 SOL (65ops) (2kd3E2Kh7xvcQ1UVVfpys5GHVo1KKKRZXVmuTmkYWK4n on 44'/501'/5') solanaSub#5 js:2:solana:2kd3E2Kh7xvcQ1UVVfpys5GHVo1KKKRZXVmuTmkYWK4n:solanaSub
Solana 7: 0.0708566 SOL (69ops) (3ZgtNrSv7F5uhNVWJJkKKvtQVnaubN3QDDJkvTtwMPdF on 44'/501'/6') solanaSub#6 js:2:solana:3ZgtNrSv7F5uhNVWJJkKKvtQVnaubN3QDDJkvTtwMPdF:solanaSub
Solana 8: 0.237368 SOL (35ops) (9UP1mN61QFowx7zxTBRw3UrV9o8JoyQ6jjsLQfLedG8N on 44'/501'/7') solanaSub#7 js:2:solana:9UP1mN61QFowx7zxTBRw3UrV9o8JoyQ6jjsLQfLedG8N:solanaSub
Solana 9: 0.0316631 SOL (35ops) (AAM59Hc6eC3aASjNbVAitFYKnCcirNcu554gj77QBHME on 44'/501'/8') solanaSub#8 js:2:solana:AAM59Hc6eC3aASjNbVAitFYKnCcirNcu554gj77QBHME:solanaSub
Solana 10: 0.0263119 SOL (44ops) (6nMswXFvmTgzxhGmxjJYVQNoUJaFjM1arwAafHcxDbxK on 44'/501'/9') solanaSub#9 js:2:solana:6nMswXFvmTgzxhGmxjJYVQNoUJaFjM1arwAafHcxDbxK:solanaSub
Solana 11 cross: 0 SOL (0ops) (GiLkLhWJiNk6EsgwA1KzNbsBoJAANa46M6Rq5bVCxTFG on 44'/501'/10') solanaSub#10 js:2:solana:GiLkLhWJiNk6EsgwA1KzNbsBoJAANa46M6Rq5bVCxTFG:solanaSub
necessary accounts resynced in 0.54ms
▬ Solana 1.2.0 on nanoS 2.1.0
→ FROM Solana 1 cross: 0.00565684 SOL (76ops) (5vhAGihUC1uKucJvreCgWWXB6LEptPwkwpqhkq9M6iaz on 44'/501'/0') solanaSub#0 js:2:solana:5vhAGihUC1uKucJvreCgWWXB6LEptPwkwpqhkq9M6iaz:solanaSub (! sum of ops 0.00089088 SOL)
max spendable ~0
★ using mutation 'Deactivate Active Delegation'
✔️ transaction 
  UNDELEGATE: 2ZDHHzX1SZxFc4en2qcsESJBGXYEEgfHMScaQsPcaTPo
STATUS (688ms)
  amount: 0 SOL
  estimated fees: 0.000005 SOL
  total spent: 0.000005 SOL
errors: 
errors: 
✔️ has been signed! (2689ms) {"operation":{"id":"js:2:solana:5vhAGihUC1uKucJvreCgWWXB6LEptPwkwpqhkq9M6iaz:solanaSub--UNDELEGATE","hash":"","type":"UNDELEGATE","senders":[],"recipients":[],"accountId":"js:2:solana:5vhAGihUC1uKucJvreCgWWXB6LEptPwkwpqhkq9M6iaz:solanaSub","blockHash":null,"blockHeight":null,"extra":{},"date":"2023-08-24T08:44:15.248Z","value":"5000","fee":"5000","transactionSequenceNumber":77},"signature":"010d669781d23f442c7e7e69c1aa1ec6ea103f08d4992c197dfbc38fca5a20efbdd25dc2816b420f45e83ff071bcca22e9e38fbe4ceb56c824bf4ce9b75e5ab40201000204492ff080f9bcdb23c48aac3d474aeb682fb1d854150cf7c27cb196892fbb0aff171c28acfaf08e02c3238b30ad3921cfad7a63a105098fd278257199ea983bea06a1d8179137542a983437bdfe2a7ab2557f535c8a78722b68a49dc00000000006a7d51718c774c928566398691d5eb68b5eb8a39b4b6d5c73555b2100000000561bbf8f1bfadbc800420f01149698dd00acfe3a498fe391f7b62270f58502e00102030103000405000000","expirationDate":null}
⚠️ TEST during broadcast
NetworkDown: failed to send transaction: Transaction simulation failed: Transaction results in an account (0) without insufficient funds for rent
(totally spent 3.9s – ends at 2023-08-24T08:45:00.786Z)
necessary accounts resynced in 0.28ms
▬ Solana 1.2.0 on nanoS 2.1.0
→ FROM Solana 3: 0.0251918 SOL (76ops) (2rUuDdwtM2b6zKWU7y8PNzuHomPPG1uAreDafg2xPnA5 on 44'/501'/2') solanaSub#2 js:2:solana:2rUuDdwtM2b6zKWU7y8PNzuHomPPG1uAreDafg2xPnA5:solanaSub
max spendable ~0.0242959
★ using mutation 'Delegate'
✔️ transaction 
  CREATE STAKE ACCOUNT: 3t4AfD2sEzr7Xw6kmmEPQiYvydSMtfhqDu3gxaNX2L3V
  FROM: 2rUuDdwtM2b6zKWU7y8PNzuHomPPG1uAreDafg2xPnA5
  AMOUNT: 0.00238288 SOL
  SEED: stake:0.8451175337801198
  VALIDATOR: 6JfBwvcz5QUKQJ37BMKTLrf968DDJBtwoZLw19aHwFtQ
STATUS (1936ms)
  amount: 0.0001 SOL
  estimated fees: 0.00228788 SOL
  total spent: 0.00238788 SOL
errors: 
errors: 
✔️ has been signed! (3.7s) 
✔️ broadcasted! (1837ms) optimistic operation: 
  -0.00238788 SOL    DELEGATE   2shEHw7w6NiDeGGHTSXNGQ3tLW73ruLnZxFpnfrT4MCEC9tQug2YJT93eaWDfk41p6xyD7kVzKdQpXWNSHPk2KVQ 2023-08-24T08:44
✔️ operation confirmed (19.5s): 
  -0.00238788 SOL    DELEGATE   2shEHw7w6NiDeGGHTSXNGQ3tLW73ruLnZxFpnfrT4MCEC9tQug2YJT93eaWDfk41p6xyD7kVzKdQpXWNSHPk2KVQ 2023-08-24T08:44
✔️ Solana 3: 0.0275747 SOL (77ops) (2rUuDdwtM2b6zKWU7y8PNzuHomPPG1uAreDafg2xPnA5 on 44'/501'/2') solanaSub#2 js:2:solana:2rUuDdwtM2b6zKWU7y8PNzuHomPPG1uAreDafg2xPnA5:solanaSub (! sum of ops 0.022803989 SOL)(in 19.5s)


Details of the 6 uncovered mutations

Spec Solana (6)

  • Transfer ~50%: balance is 0 (1)
  • Transfer Max: balance is 0 (1)
  • Deactivate Activating Delegation: no activating stakes found (1)
  • Reactivate Deactivating Delegation: no deactivating stakes found (1)
  • Activate Inactive Delegation: no inactive stakes found (1)
  • Withdraw Delegation: no withdrawable stakes found (1)
Portfolio ($10.79) – Details of the 1 currencies
Spec (accounts) State Remaining Runs (est) funds?
Solana (11) 658 ops (+1), 0.458936 SOL ($10.79) 💪 999+ 5vhAGihUC1uKucJvreCgWWXB6LEptPwkwpqhkq9M6iaz
Solana 1 cross: 0.00565684 SOL (76ops) (5vhAGihUC1uKucJvreCgWWXB6LEptPwkwpqhkq9M6iaz on 44'/501'/0') solanaSub#0 js:2:solana:5vhAGihUC1uKucJvreCgWWXB6LEptPwkwpqhkq9M6iaz:solanaSub
Solana 2: 0.00804848 SOL (97ops) (6iNx5SVYQBGEEooLJiptwqL8YR7qEcZELqpBfd4kwiwx on 44'/501'/1') solanaSub#1 js:2:solana:6iNx5SVYQBGEEooLJiptwqL8YR7qEcZELqpBfd4kwiwx:solanaSub
Solana 3: 0.0275747 SOL (77ops) (2rUuDdwtM2b6zKWU7y8PNzuHomPPG1uAreDafg2xPnA5 on 44'/501'/2') solanaSub#2 js:2:solana:2rUuDdwtM2b6zKWU7y8PNzuHomPPG1uAreDafg2xPnA5:solanaSub
Solana 4: 0.0128278 SOL (88ops) (Cw4MiEvepwAHkxY6DKYDVK5jDEoCSCoT4JmVbJPYauhk on 44'/501'/3') solanaSub#3 js:2:solana:Cw4MiEvepwAHkxY6DKYDVK5jDEoCSCoT4JmVbJPYauhk:solanaSub
Solana 5: 0.00089088 SOL (72ops) (BsQzVpyrHi5ivGaouc46w9GekQgbiJcWNAhsmzzRuo9M on 44'/501'/4') solanaSub#4 js:2:solana:BsQzVpyrHi5ivGaouc46w9GekQgbiJcWNAhsmzzRuo9M:solanaSub
Solana 6: 0.0758852 SOL (65ops) (2kd3E2Kh7xvcQ1UVVfpys5GHVo1KKKRZXVmuTmkYWK4n on 44'/501'/5') solanaSub#5 js:2:solana:2kd3E2Kh7xvcQ1UVVfpys5GHVo1KKKRZXVmuTmkYWK4n:solanaSub
Solana 7: 0.0708566 SOL (69ops) (3ZgtNrSv7F5uhNVWJJkKKvtQVnaubN3QDDJkvTtwMPdF on 44'/501'/6') solanaSub#6 js:2:solana:3ZgtNrSv7F5uhNVWJJkKKvtQVnaubN3QDDJkvTtwMPdF:solanaSub
Solana 8: 0.237368 SOL (35ops) (9UP1mN61QFowx7zxTBRw3UrV9o8JoyQ6jjsLQfLedG8N on 44'/501'/7') solanaSub#7 js:2:solana:9UP1mN61QFowx7zxTBRw3UrV9o8JoyQ6jjsLQfLedG8N:solanaSub
Solana 9: 0.0316631 SOL (35ops) (AAM59Hc6eC3aASjNbVAitFYKnCcirNcu554gj77QBHME on 44'/501'/8') solanaSub#8 js:2:solana:AAM59Hc6eC3aASjNbVAitFYKnCcirNcu554gj77QBHME:solanaSub
Solana 10: 0.0263119 SOL (44ops) (6nMswXFvmTgzxhGmxjJYVQNoUJaFjM1arwAafHcxDbxK on 44'/501'/9') solanaSub#9 js:2:solana:6nMswXFvmTgzxhGmxjJYVQNoUJaFjM1arwAafHcxDbxK:solanaSub
Solana 11 cross: 0 SOL (0ops) (GiLkLhWJiNk6EsgwA1KzNbsBoJAANa46M6Rq5bVCxTFG on 44'/501'/10') solanaSub#10 js:2:solana:GiLkLhWJiNk6EsgwA1KzNbsBoJAANa46M6Rq5bVCxTFG:solanaSub
Performance ⏲ 4min 1s

Time spent for each spec: (total across mutations)

Spec (accounts) preload scan re-sync tx status sign op broadcast test destination test
TOTAL 321ms 2min 39s 8.9s 2624ms 6.4s 1837ms 19.5s N/A
Solana (10) 321ms 2min 39s 8.9s 2624ms 6.4s 1837ms 19.5s N/A

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

@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] Testing with 'Nitrogen' 💰 1 miss funds ($0.00) ⏲ 7.5s

💰 1 specs may miss funds: quicksilver

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

⚠️ 1 spec hints
  • Spec quicksilver:
    • There are not enough accounts to cover all mutations. Please increase the account target to at least 7 accounts
Details of the 0 mutations

Spec quicksilver (failed)

Spec quicksilver found 1 Quicksilver accounts (preload: 319ms). Will use Cosmos 2.34.9 on nanoS 2.1.0
Quicksilver 1 cross: 0 QCK (0ops) (quick1rs97j43nfyvc689y5rjvnnhrq3tes6ghscch6l on 44'/118'/0'/0/0) #0 js:2:quicksilver:quick1rs97j43nfyvc689y5rjvnnhrq3tes6ghscch6l:

This SEED does not have Quicksilver. Please send funds to quick1rs97j43nfyvc689y5rjvnnhrq3tes6ghscch6l

Details of the 6 uncovered mutations

Spec quicksilver (6)

  • send some:
  • send max:
  • delegate new validators:
  • undelegate:
  • redelegate:
  • claim rewards:
Portfolio ($0.00) – Details of the 1 currencies
Spec (accounts) State Remaining Runs (est) funds?
quicksilver (1) 0 ops , 0 QCK ($0.00) quick1rs97j43nfyvc689y5rjvnnhrq3tes6ghscch6l
Quicksilver 1 cross: 0 QCK (0ops) (quick1rs97j43nfyvc689y5rjvnnhrq3tes6ghscch6l on 44'/118'/0'/0/0) #0 js:2:quicksilver:quick1rs97j43nfyvc689y5rjvnnhrq3tes6ghscch6l:
Performance ⏲ 7.5s

Time spent for each spec: (total across mutations)

Spec (accounts) preload scan re-sync tx status sign op broadcast test destination test
TOTAL 319ms 2243ms N/A N/A N/A N/A N/A N/A
quicksilver (0) 319ms 2243ms N/A N/A N/A N/A N/A N/A

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

Please sign in to comment.