-
Notifications
You must be signed in to change notification settings - Fork 315
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Custom image LLD custom image poc wip (import done, cropping wip) Cropping & resizing logic missing from previous commit Grayscale processing logic + nft entrypoint Image processing: correct ordering of pixels in raw data Implement dithering algo (to avoid color banding) Cleanup dithering implementation Remove fixed size from ImageCropper Fix window resizing issues by always using percentages for cropping A horrible implementation of rotating the image to crop A better cropping UI with rotations (todo: resizing) Full rotate & crop & resize implemented More performant implementation of image resizing rename ImageCropper Handle load errors in ImportImage (no file, wrong file type, unknown error) Implement full flow ground work (state logic) Smaller previews Implement custom image in drawer Proper layout of steps inside drawer Implement design for "choose image" step Improve layout of steps Implement contrast buttons design Image raw data verification Rendering of errors Handle common errors img loading error Fix bad error handling in ImportImage wording Move nft entry point to nft links dropdown lint fix post rebase Properly handle download error Add custom image entrypoint in manager changesets Revert useless changes Fix layout in ImageCropper Cleanup layout Fix layout Fix infinite loading when zoomed out/in to the maximum and trying to unzoom/zoom more a lil bit more margin Add retry button in error messages Disable image draggable in preview step change target dimensions Add env variable FEATURE_FLAGS for overriding flags with env Add feature flags parameter to playwright test fixtures doc:ljs Add possibility to choose mocked device model Add playwright test for custom image tool update screenshots (ubuntu-latest) update screenshots (windows-latest) update screenshots (macos-latest) Implement thorough testing of the cropping UI (zoom, rotation, restoration of its state) Fix import update screenshots (ubuntu-latest) update screenshots (windows-latest) lint & documentation Document rotationIncrements lint lint, comments lint lint clarify errorHandlers remove log Improve image cropping function (passing ref as param + error handling) Remove useless /custom-image route Fix custom image test spec Fix import of DeviceModelId pnpm lock fix test spec Add null to JSONValue type update screenshots (ubuntu-latest) update screenshots (windows-latest) fix CLS: import pictures, NFT drawers redirection and cropping (#1483) * fix crop and fix import CLS * fix NFT drawer redirection * change naming * Delete unnecessary changeset (merging into another PR) * Remove useless extra callback Co-authored-by: ofreyssinet-ledger <[email protected]> Co-authored-by: Olivier Freyssinet <[email protected]> fix custom image next button (#1563) fix cls next button Fix duplicated import (due to bad conflict resolution) fix lockfile post rebase Add DeviceActionDefaultRendering for easier custom rendering of device actions Migrate LLD device action index to TS, replace react-redux connect by hooks Add LLD custom image device action Use DeviceActionDefaultRendering Add mocked event emitter for custom image device action Fix import missing after bad conflict resolution Implement internal command ftsLoadImage for use in device action Add h4Inter text variant to react-ui Implement device action UI & callbacks logic Add "valid device" logic (depending on device model id) Implement success state design * fix pnpm lockfile post rebase * lint * Add missing test ids, use FramedImage in contrast step * Add device action test in test spec * Remove old screenshots * Add missing screenshot test * remove legacy code * Add navigation blocking logic in transfer step * update screenshots (macos-latest) * update screenshots (ubuntu-latest) * update screenshots (ubuntu-latest) * update screenshots (windows-latest) * update screenshots (macos-latest) * lint & typing * Fix test flakyness * remove screenshots * update screenshots (ubuntu-latest) * Limit manager page screenshot to only device storage card * remove outdated screenshots * Fix customImage: auto load only if no image loaded * Fix broken test id in Card component * update screenshots (ubuntu-latest) * update screenshots (windows-latest) * update screenshots (macos-latest) * Add missing error wording * Remove log * Add cursor: pointer in ImportImage * Remove unused code * Remove background color in Button "shade" variant * Fix layout issues on small window * Fix missing test id * update screenshots (ubuntu-latest) * update screenshots (macos-latest) * update screenshots (windows-latest) * lint * pull out waitFor e2e function in tests/utils * fix bad naming * More direct typing in apps/mock.ts Co-authored-by: Team Live <[email protected]>
- Loading branch information
1 parent
ff70c98
commit 0d7e0f7
Showing
251 changed files
with
2,599 additions
and
132 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
--- | ||
"@ledgerhq/react-ui": patch | ||
--- | ||
|
||
Remove background color in Button "shade" variant (following design) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
--- | ||
"@ledgerhq/react-ui": patch | ||
--- | ||
|
||
Add h4Inter text variant |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
--- | ||
"live-mobile": patch | ||
"@ledgerhq/live-common": patch | ||
--- | ||
|
||
Moved custom image errors from ledger-live-mobile to live-common |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
--- | ||
"ledger-live-desktop": patch | ||
--- | ||
|
||
Add custom image tool entry points (feature flags) in NFTs and in My Ledger screen |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
8 changes: 8 additions & 0 deletions
8
apps/ledger-live-desktop/src/internal/commands/ftsLoadImage.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
import { Observable, from } from "rxjs"; | ||
import ftsLoadImage, { | ||
LoadImageEvent, | ||
LoadImageRequest, | ||
} from "@ledgerhq/live-common/hw/ftsLoadImage"; | ||
const cmd = (input: LoadImageRequest): Observable<LoadImageEvent> => from(ftsLoadImage(input)); | ||
|
||
export default cmd; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
66 changes: 66 additions & 0 deletions
66
apps/ledger-live-desktop/src/renderer/components/CustomImage/ContrastChoice.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
import { Box, Flex, Icons } from "@ledgerhq/react-ui"; | ||
import React from "react"; | ||
import styled from "styled-components"; | ||
|
||
type Props = { | ||
color: string; | ||
selected: boolean; | ||
onClick: () => void; | ||
index: number; | ||
}; | ||
|
||
const Container = styled(Flex).attrs((p: { selected: boolean }) => ({ | ||
position: "relative", | ||
height: 56, | ||
width: 56, | ||
justifyContent: "center", | ||
alignItems: "center", | ||
border: "solid", | ||
borderWidth: p.selected ? 2 : 1, | ||
borderColor: p.selected ? "primary.c80" : "neutral.c40", | ||
borderRadius: "4px", // 2 does not work | ||
}))<{ selected: boolean }>``; | ||
|
||
const Round = styled(Box).attrs({ | ||
height: 28, | ||
width: 28, | ||
borderRadius: 28, | ||
})``; | ||
|
||
const PillBackground = styled(Box).attrs(p => ({ | ||
height: "20px", | ||
width: "20px", | ||
backgroundColor: p.theme.colors.v2Palette.background.paper, | ||
}))``; | ||
|
||
const PillForeground = styled(Icons.CircledCheckSolidMedium).attrs({ | ||
color: "primary.c80", | ||
size: "20px", | ||
})``; | ||
|
||
const CheckContainer = styled(Box).attrs({ | ||
position: "absolute", | ||
right: "-10px", | ||
top: "-10px", | ||
})``; | ||
|
||
const CheckPill: React.FC<Record<string, never>> = () => ( | ||
<CheckContainer> | ||
<PillBackground> | ||
<PillForeground /> | ||
</PillBackground> | ||
</CheckContainer> | ||
); | ||
|
||
const ContrastChoice: React.FC<Props> = ({ selected, color, onClick, index }) => ( | ||
<Container | ||
selected={selected} | ||
onClick={onClick} | ||
data-test-id={`custom-image-contrast-option-${index}-button`} | ||
> | ||
<Round backgroundColor={color} /> | ||
{selected && <CheckPill />} | ||
</Container> | ||
); | ||
|
||
export default ContrastChoice; |
128 changes: 128 additions & 0 deletions
128
apps/ledger-live-desktop/src/renderer/components/CustomImage/CustomImageDeviceAction.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
import React, { useEffect, useCallback } from "react"; | ||
import { Device } from "@ledgerhq/live-common/hw/actions/types"; | ||
import { createAction } from "@ledgerhq/live-common/hw/actions/ftsLoadImage"; | ||
import { ImageLoadRefusedOnDevice, ImageCommitRefusedOnDevice } from "@ledgerhq/live-common/errors"; | ||
import withRemountableWrapper from "@ledgerhq/live-common/hoc/withRemountableWrapper"; | ||
import { getEnv } from "@ledgerhq/live-common/env"; | ||
import { useTranslation } from "react-i18next"; | ||
import { Flex, Icons, Link } from "@ledgerhq/react-ui"; | ||
import { DeviceActionDefaultRendering } from "../DeviceAction"; | ||
import Button from "../ButtonV3"; | ||
import { | ||
renderError, | ||
renderImageCommitRequested, | ||
renderImageLoadRequested, | ||
renderLoadingImage, | ||
} from "../DeviceAction/rendering"; | ||
import { mockedEventEmitter } from "~/renderer/components/debug/DebugMock"; | ||
import { command } from "~/renderer/commands"; | ||
import { DeviceModelId } from "@ledgerhq/types-devices"; | ||
|
||
type Props = { | ||
device?: Device | null | undefined; | ||
hexImage: string; | ||
source: HTMLImageElement["src"]; | ||
onStart?: () => void; | ||
onResult?: () => void; | ||
onSkip?: () => void; | ||
onTryAnotherImage: () => void; | ||
blockNavigation?: (blocked: boolean) => void; | ||
}; | ||
|
||
const errorNamesRetryAnotherImage = [ | ||
ImageLoadRefusedOnDevice().name, | ||
ImageCommitRefusedOnDevice().name, | ||
]; | ||
const ftsLoadImageExec = command("ftsLoadImage"); | ||
const action = createAction(getEnv("MOCK") ? mockedEventEmitter : ftsLoadImageExec); | ||
const mockedDevice = { deviceId: "", modelId: DeviceModelId.nanoFTS, wired: true }; | ||
|
||
const CustomImageDeviceAction: React.FC<Props> = withRemountableWrapper(props => { | ||
const { | ||
hexImage, | ||
onStart, | ||
onResult, | ||
onSkip, | ||
source, | ||
remountMe, | ||
onTryAnotherImage, | ||
blockNavigation, | ||
} = props; | ||
const device = getEnv("MOCK") ? mockedDevice : props.device; | ||
const commandRequest = hexImage; | ||
|
||
const { t } = useTranslation(); | ||
|
||
const validDevice = device?.modelId === DeviceModelId.nanoFTS ? device : null; | ||
|
||
const status = action?.useHook(validDevice, commandRequest); | ||
|
||
const payload = action?.mapResult(status); | ||
|
||
useEffect(() => { | ||
if (onStart && validDevice) { | ||
onStart(); | ||
} | ||
}, [onStart, validDevice]); | ||
|
||
const handleResult = useCallback(() => { | ||
if (onResult && validDevice) { | ||
onResult(); | ||
} | ||
}, [onResult, validDevice]); | ||
|
||
const { error, imageLoadRequested, loadingImage, imageCommitRequested, progress } = status; | ||
const isError = !!error; | ||
const isRefusedOnStaxError = error?.name && errorNamesRetryAnotherImage.includes(error?.name); | ||
|
||
const shouldNavBeBlocked = !!validDevice && !isError; | ||
useEffect(() => { | ||
blockNavigation && blockNavigation(shouldNavBeBlocked); | ||
}, [shouldNavBeBlocked, blockNavigation]); | ||
|
||
const handleRetry = useCallback(() => { | ||
if (isRefusedOnStaxError) onTryAnotherImage(); | ||
else remountMe(); | ||
}, [isRefusedOnStaxError, onTryAnotherImage, remountMe]); | ||
|
||
return ( | ||
<Flex flexDirection="column" flex={1} justifyContent="center"> | ||
{imageLoadRequested && device ? ( | ||
renderImageLoadRequested({ t, device }) | ||
) : loadingImage && device ? ( | ||
renderLoadingImage({ t, device, progress, src: source }) | ||
) : imageCommitRequested && device ? ( | ||
renderImageCommitRequested({ t, device, src: source }) | ||
) : isError ? ( | ||
<Flex flexDirection="column" alignItems="center"> | ||
{renderError({ | ||
error, | ||
...(isRefusedOnStaxError | ||
? { Icon: Icons.CircledAlertMedium, iconColor: "warning.c100" } | ||
: {}), | ||
})} | ||
<Button size="large" variant="main" outline={false} onClick={handleRetry}> | ||
{isRefusedOnStaxError | ||
? t("customImage.steps.transfer.uploadAnotherImage") | ||
: t("common.retry")} | ||
</Button> | ||
{isRefusedOnStaxError ? ( | ||
<Flex py={7}> | ||
<Link onClick={onSkip}>{t("customImage.steps.transfer.doThisLater")}</Link> | ||
</Flex> | ||
) : null} | ||
</Flex> | ||
) : ( | ||
<DeviceActionDefaultRendering | ||
overridesPreferredDeviceModel={DeviceModelId.nanoFTS} | ||
status={status} | ||
request={commandRequest} | ||
payload={payload} | ||
onResult={handleResult} | ||
/> | ||
)} | ||
</Flex> | ||
); | ||
}); | ||
|
||
export default CustomImageDeviceAction; |
108 changes: 108 additions & 0 deletions
108
apps/ledger-live-desktop/src/renderer/components/CustomImage/FramedImage.tsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,108 @@ | ||
import React from "react"; | ||
import { Flex, Box, Text } from "@ledgerhq/react-ui"; | ||
import styled, { useTheme } from "styled-components"; | ||
import { scaleDimensions } from "./imageUtils"; | ||
import { targetDimensions } from "./shared"; | ||
import StyleProviderV3 from "~/renderer/styles/StyleProviderV3"; | ||
import { ImageDimensions } from "./types"; | ||
|
||
type Props = Partial<React.ComponentProps<"img">> & { | ||
/** source of the image inside */ | ||
src?: string | undefined; | ||
/** source of the background image */ | ||
backgroundSrc?: string | undefined; | ||
/** text to display in the background placeholder */ | ||
backgroundPlaceholderText?: string; | ||
/** float between 0 and 1 */ | ||
loadingProgress?: number; | ||
children?: React.ReactNode | undefined; | ||
dimensions?: ImageDimensions; | ||
}; | ||
|
||
const absoluteFillObject = { | ||
position: "absolute", | ||
top: 0, | ||
bottom: 0, | ||
left: 0, | ||
right: 0, | ||
}; | ||
|
||
const defaultImageDimensions = scaleDimensions(targetDimensions, 0.4); | ||
|
||
const px = 3; | ||
const py = 3; | ||
|
||
const Container = styled(Box).attrs({ | ||
position: "relative", | ||
px, | ||
py, | ||
})``; | ||
|
||
const AbsoluteBackgroundContainer = styled(Flex).attrs({ | ||
...absoluteFillObject, | ||
backgroundColor: "lightgreen", | ||
})``; | ||
|
||
const BackgroundPlaceholder = styled(Flex).attrs({ | ||
...absoluteFillObject, | ||
backgroundColor: "#494949", | ||
px, | ||
py, | ||
flexDirection: "column", | ||
justifyContent: "center", | ||
alignItems: "center", | ||
})``; | ||
|
||
const AbsoluteInnerImageContainer = styled(Flex).attrs({ | ||
...absoluteFillObject, | ||
mx: px, | ||
my: py, | ||
overflow: "hidden", | ||
})``; | ||
|
||
const FramedImage: React.FC<Props> = ({ | ||
src, | ||
backgroundSrc, | ||
backgroundPlaceholderText, | ||
loadingProgress = 1, | ||
children, | ||
dimensions = defaultImageDimensions, | ||
...imageProps | ||
}) => { | ||
const { space } = useTheme(); | ||
return ( | ||
<StyleProviderV3 selectedPalette="light"> | ||
<Container> | ||
<AbsoluteBackgroundContainer> | ||
{backgroundSrc ? ( | ||
<img | ||
src={backgroundSrc} | ||
style={{ | ||
height: dimensions.height + 2 * space[3], | ||
width: dimensions.width + 2 * space[3], | ||
}} | ||
/> | ||
) : ( | ||
<BackgroundPlaceholder> | ||
<Text color="neutral.c00" textAlign="center"> | ||
{backgroundPlaceholderText || "illustrationPlaceholder"} | ||
</Text> | ||
</BackgroundPlaceholder> | ||
)} | ||
</AbsoluteBackgroundContainer> | ||
<AbsoluteInnerImageContainer style={{ height: loadingProgress * dimensions.height }}> | ||
{src ? ( | ||
<img | ||
{...imageProps} | ||
src={src} | ||
style={{ ...(imageProps.style || {}), ...dimensions, pointerEvents: "none" }} | ||
/> | ||
) : null} | ||
</AbsoluteInnerImageContainer> | ||
<Flex style={dimensions}>{children}</Flex> | ||
</Container> | ||
</StyleProviderV3> | ||
); | ||
}; | ||
|
||
export default FramedImage; |
Oops, something went wrong.
0d7e0f7
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
⏲ 24min 52s ✅ 102 txs ❌ 9 txs⚠️ 1 specs ($969.96) for [Bot] non-reg on develop with 'Phosphore'
1 critical spec errors
Spec Bitcoin Testnet failed!
❌ 9 mutation errors
Portfolio ($969.96) – Details of the 42 currencies
32PI2C5HLHMVUF5KMNURLGCTYVIOVJJ2NLHLZ2PIMK567MKMS4RXBSVWQI
bc1qtmdltwjkf4s0tn45hnwe5astlha6ptrrhp2dsv
tb1q59czulq2wz9zzyr3vpw2ktrfxmasakjpf4ujfr
qqwjf2d38ferjd7lzj79zgmlanphs9jw2cxvh506fs
ANiiAvYnASpWJtqfvxfpmd5CLik6vWQcZo
XjP72JzGgxRbSZDEnCcYWvzZ1Ygj3aCQSJ
dgb1qsag60dehx4jcmfw2mzv5pfhuy22hcn0870x4m4
DSEoSvPRB5rLoFsJ55wW1w3N5JASZ2xq3c
RCBN7ns2cT3ETWkeoVmZUesU65yNfurFVs
ltc1q52uqfgd57gz2r3cv23zpg838a2lptmfaln9enn
PM2GaaxfdjHgD4QEbTuJxTnFXbxsdCYEGA
DAUb1pWH4BJCQePkZ95KyVbTohd7J6cXfx
MRc2HFA5vpVXCpPmQ2dhHiPvZQkAUgACHr
3NZqTzmAsRZdHfin23oYZTRaBSWNgRtPek
ERYUzfzouB2dv8aCSd3v4sM7UoKvzK9d8E
t1R21LG7afusXCdqzW4v6bEVnreM3iGQC35
znS2FFcZc9QZCsLBhZLvqcGnkBfCY9fMV9X
DsenkdkC2omHXpAxnD4St4JWHZDAcncrmnR
addr1qx8pdm5l84hdq7695n79ea84eu4w7qqvt3jeeqjs2fx9swrrkxr0sr9fx363v03pw5cx4qumlnjrtquc0d09ny85e2ysed068z
0xCc7187772b999d669845d0D72660F388781575DB
cosmos1ga5n0llpm9dqmvmac92tqffrwwlhexppmts4s7
cro1hh3ygrlneu3whlsjcsa2akrwm00ujy2ggxk7v9
erd10f45c5x4997ctt5ye45vfzkvzsutwyd5rgw0zxsmneay90kyc0tq809pjy
0xa22CA840265d3C5CB1846e419B14c6a6CdD06FAB
0xa22CA840265d3C5CB1846e419B14c6a6CdD06FAB
0xa22CA840265d3C5CB1846e419B14c6a6CdD06FAB
0x556ad802f06ae3BE9fC48D4bEcDE703a9B9F7b29
0xa22CA840265d3C5CB1846e419B14c6a6CdD06FAB
0xa22CA840265d3C5CB1846e419B14c6a6CdD06FAB
0xa22CA840265d3C5CB1846e419B14c6a6CdD06FAB
0xa22CA840265d3C5CB1846e419B14c6a6CdD06FAB
0xa22CA840265d3C5CB1846e419B14c6a6CdD06FAB
0xa22CA840265d3C5CB1846e419B14c6a6CdD06FAB
f176iafb4evnhhfzd5bhdzsjbbfs5st6eb4neplki
0.0.942690
osmo1ga5n0llpm9dqmvmac92tqffrwwlhexppnsr9xv
15jLBbe9LD6VSUYFkV5Fmo5LhZU5cns9E6g8qcDv5KrKM1eP
rP8phQ7XgRozw8Wg8cTgkWPT9ZL4VDydfQ
5XD9JtUQMBrYBkqSUD9rnJcSSrADMkUuotZSwZPWM8nZ
GCXE56DP3YWR34L5OTEV6UJKXFEAGYIK7X6SAXF4ZB4VQAOH5I4ERYOP
tz1feA619tG2iPwCCUFCL72yC6bgwjDTD8FF
TRbtdwHowocq8ThZbRnTHgK4JG5sx3fFCK
Performance ⏲ 24min 52s
Time spent for each spec: (total across mutations)
0d7e0f7
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
⏲ 12min 11s ✅ 34 txs ❌ 4 txs ($89.74) for [Bot] non-reg on develop with 'Silicium'
❌ 4 mutation errors
Details of the 38 mutations
Spec Algorand (6)
Spec Bitcoin (7)
Spec Bitcoin Testnet (12)
Spec Bitcoin Cash (7)
Spec Bitcoin Gold (6)
Spec Dash (7)
Spec Digibyte (8)
Spec DogeCoin (7)
Spec Komodo (5)
Spec Litecoin (7)
Spec Peercoin (5)
Spec PivX (5)
Spec Qtum (6)
Spec Vertcoin (5)
Spec Viacoin (5)
Spec ZCash (5)
Spec Horizen (5)
Spec Decred (failed)
Spec cardano (7)
Spec Celo (5)
Spec Cosmos (6)
Spec Crypto org (failed)
Spec Elrond (4)
Spec BSC (9)
Spec Polygon (10)
Spec Ethereum (failed)
Spec Ethereum Classic (6)
Spec Ethereum Goerli (failed)
Spec Cronos (4)
Spec Fantom (failed)
Spec Moonbeam (failed)
Spec Songbird (failed)
Spec Flare (failed)
Spec Filecoin (6)
Spec Hedera (failed)
Spec Osmosis (7)
Spec Polkadot (4)
Spec XRP (failed)
Spec Solana (9)
Spec Stellar (6)
Spec Tezos (13)
Spec Tron (10)
Details of the 122 uncovered mutations
Spec Algorand (5)
Spec Bitcoin (4)
Spec Bitcoin Cash (4)
Spec Bitcoin Gold (2)
Spec Dash (4)
Spec Digibyte (3)
Spec DogeCoin (4)
Spec Komodo (4)
Spec Litecoin (4)
Spec Peercoin (4)
Spec PivX (1)
Spec Qtum (4)
Spec Vertcoin (2)
Spec Viacoin (4)
Spec ZCash (4)
Spec Horizen (4)
Spec Decred (4)
Spec cardano (1)
Spec Celo (8)
Spec Cosmos (6)
Spec Crypto org (1)
Spec BSC (2)
Spec Polygon (1)
Spec Ethereum (6)
Spec Ethereum Classic (1)
Spec Ethereum Goerli (1)
Spec Fantom (1)
Spec Moonbeam (1)
Spec Songbird (1)
Spec Flare (1)
Spec Hedera (3)
Spec Osmosis (2)
Spec Polkadot (6)
Spec XRP (1)
Spec Solana (5)
Spec Stellar (2)
Spec Tezos (4)
Spec Tron (7)
Portfolio ($89.74) – Details of the 42 currencies
NZGGISPMSA3LNMT6V2K7BWIBUVWXY522QBKDLU3HV4LYWJRYLECPDGQYVI
bc1qjkcw7n3hmvfnt82ly3e4ywyhxl4x9fjdmhs0hq
tb1qy2jled4798adn6738rmundlyzdkcnww0hcyref
qq5zp97r2p9zp5mftpshe06svsk8khde0ygetmjxl5
AUJvfZAaKMP6Uh9BPYpN294J626CJJGSwP
XjqVwBp4CSeCwcJbktT4o55u95Z9UwENZX
dgb1q6pn9lw9sx2h3n5p76rve8c45tzqdgausdtj835
DJs7ryP8Q2TuuhVy683EeWnBuzQ6mnGxPq
RB56qySrzWWKgSHdEXy8qt1K8HV5whtFe6
ltc1qmx4q3sqkms5p02jm3upkljusse5fa0ptcac8j2
PNjmg6eGQJnSnxEMysdM82HxWYA5vh9ZuN
DHinvFTDEXo21dnnzdnRwpz7Vwzn6D5QnQ
MGTE7axAwxMYmyme93Cb68NY5PHC46oXVg
3Awea9hGGvZwuuhqFvUMcM384gkZG695fb
EYehZD3ezYa5DQkks5MrHJvmPvAFsHowCy
t1VcZQEcg6bQrvLFKxU2J6VMKKTraZ3WjKV
znR6tkFSqnMV9FXQBv6Rmoy67xVPdp8YJoj
Dsmdm9u3JMGGM5SRgYzsYd8nbhRxEKamLVa
addr1q8f3mzmw40hrefwnn83k373xv4d2qgsxtee09jeszag3l7hcaj4qm7l8hjpedkjvyqqd9d3sr6q682ru9ytmkzsvc8cspfsmrg
0xFFe83E3c508760F1C08313B8262BB3D6549d6191
cosmos1c27lwljfsn6ynyllvsp3qsu3ppzl2q5rrfvkn3
cro13jcdpuvkyxy9lhv7rg26j7e0huq8rnc8xl72ev
erd196gmcg5swhee9xfrk20ssxg5852q2k3k4w0gu82z8g9x8uqqulasvwcu7c
0x80c423199C9E90b8c449B7156687DAc2E6646f8c
0x80c423199C9E90b8c449B7156687DAc2E6646f8c
0x80c423199C9E90b8c449B7156687DAc2E6646f8c
0xbA37aCd9e2202bC500dA447B7F139900f9cccfCe
0x80c423199C9E90b8c449B7156687DAc2E6646f8c
0x80c423199C9E90b8c449B7156687DAc2E6646f8c
0x80c423199C9E90b8c449B7156687DAc2E6646f8c
0x80c423199C9E90b8c449B7156687DAc2E6646f8c
0x80c423199C9E90b8c449B7156687DAc2E6646f8c
0x80c423199C9E90b8c449B7156687DAc2E6646f8c
f14kqd4cf75zcrjapqpyjibtx67kviamajulyrafy
osmo1c27lwljfsn6ynyllvsp3qsu3ppzl2q5rtjlx9r
134PU8cEURfnfm9uH43zfLmSMzYv19qWmwb1vqndfyVbCVsX
r4jydPNsjHLbuu63Jjt69GnG3URSV87jxh
8VWxnnbHz2HNJRK2V23gvVQVdZUR3YpJRTBP5aZzPgmm
GBTSCL56HPWGAK3O32TVM762REBJPI3LGWEGT6LL5SDAZNJS6KSWXEQY
tz1b1BYRPDU7hxkwxyztBJfVgNTyofrsKPFS
TXiNaHERjZE73RnuAjipxVymzCNSqBC6dk
Performance ⏲ 12min 11s
Time spent for each spec: (total across mutations)
0d7e0f7
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
⏲ 7min 49s ✅ 42 txs ❌ 8 txs⚠️ 2 specs ($233.24) for [Bot] non-reg on develop with 'Carbon'
2 critical spec errors
Spec Bitcoin Gold failed!
Spec Litecoin failed!
❌ 8 mutation errors
Details of the 50 mutations
Spec Algorand (failed)
Spec Bitcoin (5)
Spec Bitcoin Testnet (10)
Spec Bitcoin Cash (7)
Spec Bitcoin Gold (2)
Spec Dash (7)
Spec Digibyte (8)
Spec DogeCoin (7)
Spec Komodo (5)
Spec Litecoin (2)
Spec Peercoin (5)
Spec PivX (5)
Spec Qtum (6)
Spec Vertcoin (7)
Spec Viacoin (5)
Spec ZCash (5)
Spec Horizen (5)
Spec Decred (failed)
Spec cardano (failed)
Spec Celo (failed)
Spec Cosmos (11)
Spec Crypto org (failed)
Spec Elrond (failed)
Spec BSC (11)
Spec Polygon (10)
Spec Ethereum (failed)
Spec Ethereum Classic (6)
Spec Ethereum Goerli (10)
Spec Cronos (4)
Spec Fantom (failed)
Spec Moonbeam (failed)
Spec Songbird (failed)
Spec Flare (failed)
Spec Filecoin (failed)
Spec Hedera (failed)
Spec Osmosis (failed)
Spec Polkadot (4)
Spec XRP (failed)
Spec Solana (failed)
Spec Stellar (failed)
Spec Tezos (14)
Spec Tron (failed)
Details of the 110 uncovered mutations
Spec Algorand (5)
Spec Bitcoin (4)
Spec Bitcoin Testnet (4)
Spec Bitcoin Gold (3)
Spec DogeCoin (1)
Spec Komodo (1)
Spec Litecoin (3)
Spec Peercoin (2)
Spec PivX (1)
Spec Qtum (1)
Spec Vertcoin (1)
Spec Viacoin (2)
Spec ZCash (4)
Spec Horizen (2)
Spec Decred (4)
Spec cardano (3)
Spec Celo (9)
Spec Cosmos (6)
Spec Crypto org (1)
Spec Elrond (1)
Spec BSC (1)
Spec Polygon (1)
Spec Ethereum (6)
Spec Fantom (1)
Spec Moonbeam (1)
Spec Songbird (1)
Spec Flare (1)
Spec Filecoin (2)
Spec Hedera (3)
Spec Osmosis (6)
Spec Polkadot (5)
Spec XRP (1)
Spec Solana (8)
Spec Stellar (4)
Spec Tezos (3)
Spec Tron (8)
Portfolio ($233.24) – Details of the 42 currencies
7UDPUKCKC3HPGNHUNQPMBZPM3OKTTUK7B3RCXRGMX7XLH54XO3COZI3JPY
bc1qe8c36wvlek77cld24la52ta5szv8f2fgwlgufr
tb1qufuqle89w3z4mvzrht4wf7a8ppl3tzuaxp722u
qp0qwv8f2pg743tgtge4wycz5w2560yxfqe8jyr2tq
AFrUeBu6nTwi5j2Uku2hiti1aL34uFnLqr
XfNKuGTGjKgt25BvF4QNqs1CfEJM2sseAV
dgb1qnwmq9zynjgusqnsv2lz9ajt22wdqpd3w5nu7qj
DQtSRoAQCwRh2BRgxLM2WuQp5Nifu7Kq4D
RGHXCM4D2X4FyUg9pLGkAEU4jXNM8Ng9GC
ltc1q72kqftj8tkljzt66xc0dlryphtgqw0usg6xvhm
PBL6d651xgTFw3EXumxcEQSP9WSfqJGpL5
DAsXehoVQF8Nxm5T4sjz2fCuAPRCv3zLsB
MAykGriUmdztVxxC9aphGiQHGUzbuBxPrN
36tx53x5KDtVDRaeVvWkHCiZkQsowSuubG
EZ14wpWagYsEBrkAsc7AuujUV57gRjte8i
t1RQNhus7YBiswKreemWCbLvvMTNgK55CiK
znjjTfszrypkqBByVxei6P1KnnFYrSx2tUt
DshyFLDNm9kX5EL6DtkATQieLH2ZCL72UUj
addr1qx44x7pr2vw4lphj6prle8grr8wtm03wy7ayege980p505tgkechpadmnf5auk06h4a40dpt7q0jgejf7aetw48fpafsrhwqcp
0x6F6f438fAB99b03EA2D2De8953f7D0D68d5EE6eb
cosmos1jlnel2cvw2cvtmdgsjku894grsqx0pmr0c6gea
cro1fh9txz05mrzn3nxdmgxy6h5qpcz7052lchp3dr
erd1n5metst07zm8xggcjnwl8wn4efkwwqd8mzv3dgfqpmns9ygl54ssxmdhcn
0x8a6Af0dD602db0A78EaD07cE9e2595815383FD5D
0x8a6Af0dD602db0A78EaD07cE9e2595815383FD5D
0x8a6Af0dD602db0A78EaD07cE9e2595815383FD5D
0xFEe4aF74cec36821814b5d6091680280A7f9fd3A
0x8a6Af0dD602db0A78EaD07cE9e2595815383FD5D
0x8a6Af0dD602db0A78EaD07cE9e2595815383FD5D
0x8a6Af0dD602db0A78EaD07cE9e2595815383FD5D
0x8a6Af0dD602db0A78EaD07cE9e2595815383FD5D
0x8a6Af0dD602db0A78EaD07cE9e2595815383FD5D
0x8a6Af0dD602db0A78EaD07cE9e2595815383FD5D
f1qrt2w6szrfudrvi43eo3miqnohnkyk6an2uht7y
osmo1jlnel2cvw2cvtmdgsjku894grsqx0pmr8rfc00
12zrm1RrNvXmNsBNZT7w5eXkgaNZusgN6e9dJpCPWtfj58s
rhAzCNG5Te2rkeXaoZQnGsEw1nt27hQtaF
8FtxLkGsEHeWHv7Eh5BtZaQEns1YDRDiw3p1zo89VezT
GC65GCJ5GN3MJZO6XEMDBZH5Y2RNWG6I2JXUWIBY3MU52VJUBUASH7HT
tz1dYLLvkwLaKi8vCLtKQiWBQGdSfXjMK4id
TMC1WHV2xjXnVs8jbHH7KU42a2KrQ2Nr2z
Performance ⏲ 7min 49s
Time spent for each spec: (total across mutations)