Skip to content

Commit

Permalink
Merge pull request #5809 from techiast/feat/integrate-icon-network-wi…
Browse files Browse the repository at this point in the history
…th-basic-functions

Feat/integrate icon network with basic functions
  • Loading branch information
hedi-edelbloute authored Jun 12, 2024
2 parents 3581d4b + 48c294d commit a32c5a2
Show file tree
Hide file tree
Showing 79 changed files with 4,081 additions and 29 deletions.
10 changes: 10 additions & 0 deletions .changeset/light-starfishes-appear.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
"@ledgerhq/live-cli": minor
"ledger-live-desktop": minor
"live-mobile": minor
"@ledgerhq/live-common": minor
"@ledgerhq/cryptoassets": minor
"@ledgerhq/hw-app-icon": minor
---

Integrate Sync, Send, Receive, Create Account for Icon network
2 changes: 2 additions & 0 deletions apps/cli/src/live-common-setup-base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ setSupportedCurrencies([
"songbird",
"flare",
"near",
"icon",
"icon_berlin_testnet",
"optimism",
"optimism_sepolia",
"arbitrum",
Expand Down
2 changes: 1 addition & 1 deletion apps/ledger-live-desktop/cryptoassets.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@
| Helium | HNT | NO | helium |
| High Performance Blockchain | HPB | NO | hpb |
| Hycon | HYC | NO | hycon |
| ICON | ICX | NO | icon |
| ICON | ICX | YES | icon |
| IOTA | MIOTA | NO | iota |
| IOV | IOV | NO | iov |
| Kin | KIN | NO | kin |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ setSupportedCurrencies([
"songbird",
"flare",
"near",
"icon",
"icon_berlin_testnet",
"optimism",
"optimism_sepolia",
"arbitrum",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import React from "react";
import styled from "styled-components";
import { useSelector } from "react-redux";
import { Trans } from "react-i18next";
import { formatCurrencyUnit } from "@ledgerhq/live-common/currencies/index";
import Discreet, { useDiscreetMode } from "~/renderer/components/Discreet";
import { IconAccount } from "@ledgerhq/live-common/families/icon/types";

import Box from "~/renderer/components/Box/Box";
import Text from "~/renderer/components/Text";
import InfoCircle from "~/renderer/icons/InfoCircle";
import ToolTip from "~/renderer/components/Tooltip";
import { localeSelector } from "~/renderer/reducers/settings";
import { SubAccount } from "@ledgerhq/types-live";
import { useAccountUnit } from "~/renderer/hooks/useAccountUnit";

const Wrapper = styled(Box).attrs(() => ({
horizontal: true,
mt: 4,
p: 5,
pb: 0,
}))`
border-top: 1px solid ${p => p.theme.colors.palette.text.shade10};
`;

const BalanceDetail = styled(Box).attrs(() => ({
flex: 1.25,
vertical: true,
alignItems: "start",
}))`
&:nth-child(n + 3) {
flex: 0.75;
}
`;

const TitleWrapper = styled(Box).attrs(() => ({ horizontal: true, alignItems: "center", mb: 1 }))``;

const Title = styled(Text).attrs(() => ({
fontSize: 4,
ff: "Inter|Medium",
color: "palette.text.shade60",
}))`
line-height: ${p => p.theme.space[4]}px;
margin-right: ${p => p.theme.space[1]}px;
`;

const AmountValue = styled(Text).attrs(() => ({
fontSize: 6,
ff: "Inter|SemiBold",
color: "palette.text.shade100",
}))``;

type Props = {
account: IconAccount | SubAccount;
};

const AccountBalanceSummaryFooter = ({ account }: Props) => {
const discreet = useDiscreetMode();
const locale = useSelector(localeSelector);
const unit = useAccountUnit(account);

if (account.type !== "Account") return null;

const formatConfig = {
disableRounding: false,
alwaysShowSign: false,
showCode: true,
discreet,
locale,
};

const spendableBalance = formatCurrencyUnit(unit, account.spendableBalance, formatConfig);

return (
<Wrapper>
<BalanceDetail>
<ToolTip content={<Trans i18nKey="account.availableBalanceTooltip" />}>
<TitleWrapper>
<Title>
<Trans i18nKey="account.availableBalance" />
</Title>
<InfoCircle size={13} />
</TitleWrapper>
</ToolTip>
<AmountValue>
<Discreet>{spendableBalance} </Discreet>
</AmountValue>
</BalanceDetail>
</Wrapper>
);
};

export default AccountBalanceSummaryFooter;
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import React from "react";
import AccountSubHeader from "../../components/AccountSubHeader";

export default function IconAccountSubHeader() {
return <AccountSubHeader family="Icon" team="Techiast" />;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import React from "react";
import { Trans } from "react-i18next";
import Box from "~/renderer/components/Box";
import CounterValue from "~/renderer/components/CounterValue";
import FormattedVal from "~/renderer/components/FormattedVal";
import Text from "~/renderer/components/Text";
import IconExclamationCircle from "~/renderer/icons/ExclamationCircle";
import TranslatedError from "~/renderer/components/TranslatedError";
import { SummaryNetworkFeesRowProps } from "../types";

const StepSummaryNetworkFeesRow = ({
feeTooHigh,
feesUnit,
estimatedFees,
feesCurrency,
}: SummaryNetworkFeesRowProps) => {
return (
<>
<Box horizontal justifyContent="space-between">
<Text ff="Inter|Medium" color="palette.text.shade40" fontSize={4}>
<Trans i18nKey="send.steps.details.fees" />{" "}
</Text>
<Box>
<FormattedVal
color={feeTooHigh ? "warning" : "palette.text.shade80"}
disableRounding
unit={feesUnit}
alwaysShowValue
val={estimatedFees}
fontSize={4}
inline
showCode
/>
<Box textAlign="right">
<CounterValue
color={feeTooHigh ? "warning" : "palette.text.shade60"}
fontSize={3}
currency={feesCurrency}
value={estimatedFees}
alwaysShowSign={false}
alwaysShowValue
/>
</Box>
</Box>
</Box>
{feeTooHigh ? (
<Box horizontal justifyContent="flex-end" alignItems="center" color="warning">
<IconExclamationCircle size={10} />
<Text
ff="Inter|Medium"
fontSize={2}
style={{
marginLeft: "5px",
}}
>
<TranslatedError error={feeTooHigh} />
</Text>
</Box>
) : null}
</>
);
};

export default StepSummaryNetworkFeesRow;
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import invariant from "invariant";
import React from "react";
import styled from "styled-components";
import { Trans } from "react-i18next";
import TransactionConfirmField from "~/renderer/components/TransactionConfirm/TransactionConfirmField";
import WarnBox from "~/renderer/components/WarnBox";
import Box from "~/renderer/components/Box";
import FormattedVal from "~/renderer/components/FormattedVal";
import Alert from "~/renderer/components/Alert";
import { FieldComponentProps } from "../types";
import { getMainAccount } from "@ledgerhq/live-common/account/index";
import type {
IconAccount,
Transaction,
TransactionStatus,
} from "@ledgerhq/live-common/families/icon/types";
import { useAccountUnit } from "~/renderer/hooks/useAccountUnit";

const Info = styled(Box).attrs(() => ({
ff: "Inter|SemiBold",
color: "palette.text.shade100",
mt: 6,
mb: 4,
px: 5,
}))`
text-align: center;
`;

const IconFreesField = ({
account,
parentAccount,
transaction,
field,
}: FieldComponentProps<IconAccount, Transaction, TransactionStatus>) => {
const mainAccount = getMainAccount(account, parentAccount);
invariant(transaction.family === "icon", "icon transaction");
const unit = useAccountUnit(mainAccount);

const { fees } = transaction;
return (
<Box horizontal justifyContent="space-between" mb={2}>
<TransactionConfirmField label={field.label} />
<FormattedVal
color={"palette.text.shade80"}
unit={unit}
val={fees || 0}
fontSize={3}
inline
showCode
alwaysShowValue
subMagnitude={5}
/>
</Box>
);
};

const Warning = ({
transaction,
recipientWording,
}: {
transaction: Transaction;
recipientWording: string;
}) => {
invariant(transaction.family === "icon", "icon transaction");
return (
<WarnBox>
<Trans i18nKey="TransactionConfirm.warning" values={{ recipientWording }} />
</WarnBox>
);
};

const Title = ({ transaction }: { transaction: Transaction }) => {
invariant(transaction.family === "icon", "icon transaction");

return (
<Info>
<Trans i18nKey={`TransactionConfirm.titleWording.${transaction.mode}`} />
</Info>
);
};

const Footer = ({ transaction }: { transaction: Transaction }) => {
invariant(transaction.family === "icon", "icon transaction");
return (
<Alert type="secondary">
<Trans i18nKey={`icon.networkFees`} />
</Alert>
);
};

const fieldComponents = {
"icon.fees": IconFreesField,
};

export default {
fieldComponents,
warning: Warning,
title: Title,
footer: Footer,
disableFees: () => true,
};
20 changes: 20 additions & 0 deletions apps/ledger-live-desktop/src/renderer/families/icon/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import AccountSubHeader from "./AccountSubHeader";
import transactionConfirmFields from "./TransactionConfirmFields";
import AccountBalanceSummaryFooter from "./AccountBalanceSummaryFooter";
import StepSummaryNetworkFeesRow from "./StepSummaryNetworkFeesRow";
import {
IconAccount,
Transaction,
TransactionStatus,
IconOperation,
} from "@ledgerhq/live-common/families/icon/types";
import { LLDCoinFamily } from "../types";

const family: LLDCoinFamily<IconAccount, Transaction, TransactionStatus, IconOperation> = {
AccountSubHeader,
transactionConfirmFields,
StepSummaryNetworkFeesRow,
AccountBalanceSummaryFooter,
};

export default family;
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import React from "react";
import AccountSubHeader from "../../components/AccountSubHeader";

function IconAccountSubHeader() {
return <AccountSubHeader family="ICON" team="Techiast" />;
}

export default IconAccountSubHeader;
2 changes: 2 additions & 0 deletions apps/ledger-live-mobile/src/live-common-setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,8 @@ setSupportedCurrencies([
"songbird",
"flare",
"near",
"icon",
"icon_berlin_testnet",
"optimism",
"optimism_sepolia",
"arbitrum",
Expand Down
7 changes: 7 additions & 0 deletions libs/coin-framework/src/derivation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,9 @@ const modes: Readonly<Partial<Record<DerivationMode, unknown>>> = Object.freeze(
overridesDerivation: "44'/397'/0'/0'/<account>'",
mandatoryEmptyAccountSkip: 1,
},
icon: {
overridesDerivation: "44'/4801368'/0'/0'/<account>'",
},
vechain: {
overridesDerivation: "44'/818'/0'/0/<account>",
},
Expand Down Expand Up @@ -203,6 +206,8 @@ const legacyDerivations: Partial<Record<CryptoCurrency["id"], DerivationMode[]>>
cardano: ["cardano"],
cardano_testnet: ["cardano"],
near: ["nearbip44h"],
icon: ["icon"],
icon_berlin_testnet: ["icon"],
vechain: ["vechain"],
stacks: ["stacks_wallet"],
ethereum: ["ethM", "ethMM"],
Expand Down Expand Up @@ -342,6 +347,8 @@ const disableBIP44: Record<string, boolean> = {
cardano: true,
cardano_testnet: true,
near: true,
icon: true,
icon_berlin_testnet: true,
vechain: true,
internet_computer: true,
casper: true,
Expand Down
20 changes: 20 additions & 0 deletions libs/coin-modules/coin-icon/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
module.exports = {
env: {
browser: true,
es6: true,
},
overrides: [
{
files: ["src/**/*.test.{ts,tsx}"],
env: {
"jest/globals": true,
},
plugins: ["jest"],
},
],
rules: {
"no-console": ["error", { allow: ["warn", "error"] }],
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-explicit-any": "warn",
},
};
Loading

3 comments on commit a32c5a2

@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' ✅ 2 txs ($0.72) ⏲ 35.7s

✅ 1 specs are successful: Icon

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

⚠️ 2 spec hints
  • Spec Icon:
    • There are not enough accounts (2) to cover all mutations (2).
      Please increase the account target to at least 3 accounts
    • mutations should define a testDestination(): send 50%~, send max
Details of the 2 mutations

Spec Icon (2)

Spec Icon found 2 ICON accounts. Will use ICON 1.0.8 on nanoS 2.1.0
undefined: 10 ICX (1ops) (hxdd614da5f057ce32185619f98edd81445a946ea5 on 44'/4801368'/0'/0'/0') icon#0 js:2:icon:hxdd614da5f057ce32185619f98edd81445a946ea5:icon
undefined: 0 ICX (0ops) (hx895d4e11fae4c0d5280481752a19d819c1657f67 on 44'/4801368'/0'/0'/1') icon#1 js:2:icon:hx895d4e11fae4c0d5280481752a19d819c1657f67:icon
necessary accounts resynced in 0.19ms
▬ ICON 1.0.8 on nanoS 2.1.0
→ FROM undefined: 10 ICX (1ops) (hxdd614da5f057ce32185619f98edd81445a946ea5 on 44'/4801368'/0'/0'/0') icon#0 js:2:icon:hxdd614da5f057ce32185619f98edd81445a946ea5:icon
max spendable ~9.99875
★ using mutation 'send 50%~'
→ TO undefined: 0 ICX (0ops) (hx895d4e11fae4c0d5280481752a19d819c1657f67 on 44'/4801368'/0'/0'/1') icon#1 js:2:icon:hx895d4e11fae4c0d5280481752a19d819c1657f67:icon
✔️ transaction 
SEND  5 ICX
TO hx895d4e11fae4c0d5280481752a19d819c1657f67
STATUS (714ms)
  amount: 5 ICX
  estimated fees: 0.00125 ICX
  total spent: 5.00125 ICX
errors: 
warnings: 
✔️ has been signed! (383ms) 
✔️ broadcasted! (130ms) optimistic operation: 
  -5.00125 ICX       OUT        0x8dc2ebee67325c378a6be533b41bb0d95ddc43d41c038bfe7f8b8088d494b9b0 2024-06-18T08:10
✔️ operation confirmed (11.5s): 
  -5.00125 ICX       OUT        0x8dc2ebee67325c378a6be533b41bb0d95ddc43d41c038bfe7f8b8088d494b9b0 2024-06-18T08:10
✔️ undefined: 4.99875 ICX (2ops) (hxdd614da5f057ce32185619f98edd81445a946ea5 on 44'/4801368'/0'/0'/0') icon#0 js:2:icon:hxdd614da5f057ce32185619f98edd81445a946ea5:icon(in 11.5s)

necessary accounts resynced in 2113ms
▬ ICON 1.0.8 on nanoS 2.1.0
→ FROM undefined: 5 ICX (1ops) (hx895d4e11fae4c0d5280481752a19d819c1657f67 on 44'/4801368'/0'/0'/1') icon#1 js:2:icon:hx895d4e11fae4c0d5280481752a19d819c1657f67:icon
max spendable ~4.99875
★ using mutation 'send max'
→ TO undefined: 4.99875 ICX (2ops) (hxdd614da5f057ce32185619f98edd81445a946ea5 on 44'/4801368'/0'/0'/0') icon#0 js:2:icon:hxdd614da5f057ce32185619f98edd81445a946ea5:icon
✔️ transaction 
SEND MAX
TO hxdd614da5f057ce32185619f98edd81445a946ea5
STATUS (635ms)
  amount: 4.99875 ICX
  estimated fees: 0.00125 ICX
  total spent: 5 ICX
errors: 
warnings: 
✔️ has been signed! (417ms) 
✔️ broadcasted! (111ms) optimistic operation: 
  -5 ICX             OUT        0x1afaa3a7a19489e254ee7f0b4092824944528d12a4307ba4ff8554f77cba6cde 2024-06-18T08:10
✔️ operation confirmed (11.4s): 
  -5 ICX             OUT        0x1afaa3a7a19489e254ee7f0b4092824944528d12a4307ba4ff8554f77cba6cde 2024-06-18T08:10
✔️ undefined: 0 ICX (2ops) (hx895d4e11fae4c0d5280481752a19d819c1657f67 on 44'/4801368'/0'/0'/1') icon#1 js:2:icon:hx895d4e11fae4c0d5280481752a19d819c1657f67:icon(in 11.4s)


Portfolio ($0.72) – Details of the 1 currencies
Spec (accounts) State Remaining Runs (est) funds?
Icon (2) 4 ops (+3), 10 ICX ($0.72) 💪 999+ hxdd614da5f057ce32185619f98edd81445a946ea5
undefined: 4.99875 ICX (2ops) (hxdd614da5f057ce32185619f98edd81445a946ea5 on 44'/4801368'/0'/0'/0') icon#0 js:2:icon:hxdd614da5f057ce32185619f98edd81445a946ea5:icon
undefined: 0 ICX (2ops) (hx895d4e11fae4c0d5280481752a19d819c1657f67 on 44'/4801368'/0'/0'/1') icon#1 js:2:icon:hx895d4e11fae4c0d5280481752a19d819c1657f67:icon
Performance ⏲ 35.7s

Time spent for each spec: (total across mutations)

Spec (accounts) preload scan re-sync tx status sign op broadcast test destination test
TOTAL 0.93ms 6.2s 2113ms 1349ms 800ms 241ms 22.9s N/A
Icon (2) 0.93ms 6.2s 2113ms 1349ms 800ms 241ms 22.9s 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' ✅ 2 txs ($1.44) ⏲ 37.3s

✅ 1 specs are successful: Icon

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

⚠️ 1 spec hints
  • Spec Icon:
    • mutations should define a testDestination(): send 50%~, send max
Details of the 2 mutations

Spec Icon (3)

Spec Icon found 3 ICON accounts. Will use ICON 1.0.8 on nanoS 2.1.0
undefined: 9.9975 ICX (3ops) (hxdd614da5f057ce32185619f98edd81445a946ea5 on 44'/4801368'/0'/0'/0') icon#0 js:2:icon:hxdd614da5f057ce32185619f98edd81445a946ea5:icon
undefined: 0 ICX (2ops) (hx895d4e11fae4c0d5280481752a19d819c1657f67 on 44'/4801368'/0'/0'/1') icon#1 js:2:icon:hx895d4e11fae4c0d5280481752a19d819c1657f67:icon
undefined: 0 ICX (0ops) (hx227e5543bd947e939d4f4dd3361627f3963cc7bf on 44'/4801368'/0'/0'/2') icon#2 js:2:icon:hx227e5543bd947e939d4f4dd3361627f3963cc7bf:icon
necessary accounts resynced in 0.17ms
▬ ICON 1.0.8 on nanoS 2.1.0
→ FROM undefined: 9.9975 ICX (3ops) (hxdd614da5f057ce32185619f98edd81445a946ea5 on 44'/4801368'/0'/0'/0') icon#0 js:2:icon:hxdd614da5f057ce32185619f98edd81445a946ea5:icon
max spendable ~9.99625
★ using mutation 'send 50%~'
→ TO undefined: 0 ICX (2ops) (hx895d4e11fae4c0d5280481752a19d819c1657f67 on 44'/4801368'/0'/0'/1') icon#1 js:2:icon:hx895d4e11fae4c0d5280481752a19d819c1657f67:icon
✔️ transaction 
SEND  4.99875 ICX
TO hx895d4e11fae4c0d5280481752a19d819c1657f67
STATUS (739ms)
  amount: 4.99875 ICX
  estimated fees: 0.00125 ICX
  total spent: 5 ICX
errors: 
warnings: 
✔️ has been signed! (390ms) 
✔️ broadcasted! (134ms) optimistic operation: 
  -5 ICX             OUT        0x4d41fd627a672c8a663d25d8cf76dff5bcaaeae55d9b8a47300bf5211db0ee34 2024-06-18T08:15
✔️ operation confirmed (11.5s): 
  -5 ICX             OUT        0x4d41fd627a672c8a663d25d8cf76dff5bcaaeae55d9b8a47300bf5211db0ee34 2024-06-18T08:15
✔️ undefined: 4.9975 ICX (4ops) (hxdd614da5f057ce32185619f98edd81445a946ea5 on 44'/4801368'/0'/0'/0') icon#0 js:2:icon:hxdd614da5f057ce32185619f98edd81445a946ea5:icon(in 11.5s)

necessary accounts resynced in 2042ms
▬ ICON 1.0.8 on nanoS 2.1.0
→ FROM undefined: 4.99875 ICX (3ops) (hx895d4e11fae4c0d5280481752a19d819c1657f67 on 44'/4801368'/0'/0'/1') icon#1 js:2:icon:hx895d4e11fae4c0d5280481752a19d819c1657f67:icon
max spendable ~4.9975
★ using mutation 'send max'
→ TO undefined: 4.9975 ICX (4ops) (hxdd614da5f057ce32185619f98edd81445a946ea5 on 44'/4801368'/0'/0'/0') icon#0 js:2:icon:hxdd614da5f057ce32185619f98edd81445a946ea5:icon
✔️ transaction 
SEND MAX
TO hxdd614da5f057ce32185619f98edd81445a946ea5
STATUS (637ms)
  amount: 4.9975 ICX
  estimated fees: 0.00125 ICX
  total spent: 4.99875 ICX
errors: 
warnings: 
✔️ has been signed! (378ms) 
✔️ broadcasted! (115ms) optimistic operation: 
  -4.99875 ICX       OUT        0xeb69c5f96492b58dc089601af022477e9f5845cd11e0a12ea7a2a8dd1d9e0000 2024-06-18T08:15
✔️ operation confirmed (11.5s): 
  -4.99875 ICX       OUT        0xeb69c5f96492b58dc089601af022477e9f5845cd11e0a12ea7a2a8dd1d9e0000 2024-06-18T08:15
✔️ undefined: 0 ICX (4ops) (hx895d4e11fae4c0d5280481752a19d819c1657f67 on 44'/4801368'/0'/0'/1') icon#1 js:2:icon:hx895d4e11fae4c0d5280481752a19d819c1657f67:icon(in 11.5s)


Portfolio ($1.44) – Details of the 1 currencies
Spec (accounts) State Remaining Runs (est) funds?
Icon (3) 9 ops (+4), 9.9975 ICX ($1.44) 💪 999+ hxdd614da5f057ce32185619f98edd81445a946ea5
undefined: 9.995 ICX (5ops) (hxdd614da5f057ce32185619f98edd81445a946ea5 on 44'/4801368'/0'/0'/0') icon#0 js:2:icon:hxdd614da5f057ce32185619f98edd81445a946ea5:icon
undefined: 0 ICX (4ops) (hx895d4e11fae4c0d5280481752a19d819c1657f67 on 44'/4801368'/0'/0'/1') icon#1 js:2:icon:hx895d4e11fae4c0d5280481752a19d819c1657f67:icon
undefined: 0 ICX (0ops) (hx227e5543bd947e939d4f4dd3361627f3963cc7bf on 44'/4801368'/0'/0'/2') icon#2 js:2:icon:hx227e5543bd947e939d4f4dd3361627f3963cc7bf:icon
Performance ⏲ 37.3s

Time spent for each spec: (total across mutations)

Spec (accounts) preload scan re-sync tx status sign op broadcast test destination test
TOTAL 0.92ms 6.3s 3.5s 1376ms 769ms 249ms 23s N/A
Icon (2) 0.92ms 6.3s 3.5s 1376ms 769ms 249ms 23s 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' ✅ 2 txs ($0.72) ⏲ 35.9s

✅ 1 specs are successful: Icon

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

⚠️ 1 spec hints
  • Spec Icon:
    • mutations should define a testDestination(): send 50%~, send max
Details of the 2 mutations

Spec Icon (3)

Spec Icon found 3 ICON accounts. Will use ICON 1.0.8 on nanoS 2.1.0
undefined: 9.995 ICX (5ops) (hxdd614da5f057ce32185619f98edd81445a946ea5 on 44'/4801368'/0'/0'/0') icon#0 js:2:icon:hxdd614da5f057ce32185619f98edd81445a946ea5:icon
undefined: 0 ICX (4ops) (hx895d4e11fae4c0d5280481752a19d819c1657f67 on 44'/4801368'/0'/0'/1') icon#1 js:2:icon:hx895d4e11fae4c0d5280481752a19d819c1657f67:icon
undefined: 0 ICX (0ops) (hx227e5543bd947e939d4f4dd3361627f3963cc7bf on 44'/4801368'/0'/0'/2') icon#2 js:2:icon:hx227e5543bd947e939d4f4dd3361627f3963cc7bf:icon
necessary accounts resynced in 0.19ms
▬ ICON 1.0.8 on nanoS 2.1.0
→ FROM undefined: 9.995 ICX (5ops) (hxdd614da5f057ce32185619f98edd81445a946ea5 on 44'/4801368'/0'/0'/0') icon#0 js:2:icon:hxdd614da5f057ce32185619f98edd81445a946ea5:icon
max spendable ~9.99375
★ using mutation 'send 50%~'
→ TO undefined: 0 ICX (0ops) (hx227e5543bd947e939d4f4dd3361627f3963cc7bf on 44'/4801368'/0'/0'/2') icon#2 js:2:icon:hx227e5543bd947e939d4f4dd3361627f3963cc7bf:icon
✔️ transaction 
SEND  4.9975 ICX
TO hx227e5543bd947e939d4f4dd3361627f3963cc7bf
STATUS (713ms)
  amount: 4.9975 ICX
  estimated fees: 0.00125 ICX
  total spent: 4.99875 ICX
errors: 
warnings: 
✔️ has been signed! (360ms) 
✔️ broadcasted! (112ms) optimistic operation: 
  -4.99875 ICX       OUT        0xec05bfe8ac56e10ef07007dc1d1cf90ebfae72772e3cfef4b83f02e82862e25a 2024-06-18T08:19
✔️ operation confirmed (11.5s): 
  -4.99875 ICX       OUT        0xec05bfe8ac56e10ef07007dc1d1cf90ebfae72772e3cfef4b83f02e82862e25a 2024-06-18T08:19
✔️ undefined: 4.99625 ICX (6ops) (hxdd614da5f057ce32185619f98edd81445a946ea5 on 44'/4801368'/0'/0'/0') icon#0 js:2:icon:hxdd614da5f057ce32185619f98edd81445a946ea5:icon(in 11.5s)

necessary accounts resynced in 0.16ms
▬ ICON 1.0.8 on nanoS 2.1.0
→ FROM undefined: 4.9975 ICX (1ops) (hx227e5543bd947e939d4f4dd3361627f3963cc7bf on 44'/4801368'/0'/0'/2') icon#2 js:2:icon:hx227e5543bd947e939d4f4dd3361627f3963cc7bf:icon
max spendable ~4.99625
★ using mutation 'send max'
→ TO undefined: 0 ICX (4ops) (hx895d4e11fae4c0d5280481752a19d819c1657f67 on 44'/4801368'/0'/0'/1') icon#1 js:2:icon:hx895d4e11fae4c0d5280481752a19d819c1657f67:icon
✔️ transaction 
SEND MAX
TO hx895d4e11fae4c0d5280481752a19d819c1657f67
STATUS (552ms)
  amount: 4.99625 ICX
  estimated fees: 0.00125 ICX
  total spent: 4.9975 ICX
errors: 
warnings: 
✔️ has been signed! (376ms) 
✔️ broadcasted! (112ms) optimistic operation: 
  -4.9975 ICX        OUT        0xc8506783c87287d656b528230b09e67c5cf9b3e545158748df104283b26d4815 2024-06-18T08:19
✔️ operation confirmed (11.5s): 
  -4.9975 ICX        OUT        0xc8506783c87287d656b528230b09e67c5cf9b3e545158748df104283b26d4815 2024-06-18T08:19
✔️ undefined: 0 ICX (2ops) (hx227e5543bd947e939d4f4dd3361627f3963cc7bf on 44'/4801368'/0'/0'/2') icon#2 js:2:icon:hx227e5543bd947e939d4f4dd3361627f3963cc7bf:icon(in 11.5s)


Portfolio ($0.72) – Details of the 1 currencies
Spec (accounts) State Remaining Runs (est) funds?
Icon (3) 12 ops (+3), 9.995 ICX ($0.72) 💪 999+ hxdd614da5f057ce32185619f98edd81445a946ea5
undefined: 4.99625 ICX (6ops) (hxdd614da5f057ce32185619f98edd81445a946ea5 on 44'/4801368'/0'/0'/0') icon#0 js:2:icon:hxdd614da5f057ce32185619f98edd81445a946ea5:icon
undefined: 0 ICX (4ops) (hx895d4e11fae4c0d5280481752a19d819c1657f67 on 44'/4801368'/0'/0'/1') icon#1 js:2:icon:hx895d4e11fae4c0d5280481752a19d819c1657f67:icon
undefined: 0 ICX (2ops) (hx227e5543bd947e939d4f4dd3361627f3963cc7bf on 44'/4801368'/0'/0'/2') icon#2 js:2:icon:hx227e5543bd947e939d4f4dd3361627f3963cc7bf:icon
Performance ⏲ 35.9s

Time spent for each spec: (total across mutations)

Spec (accounts) preload scan re-sync tx status sign op broadcast test destination test
TOTAL 1.10ms 7s 1397ms 1264ms 736ms 224ms 23s N/A
Icon (3) 1.10ms 7s 1397ms 1264ms 736ms 224ms 23s N/A

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

Please sign in to comment.