From d2c04ac282d28604c9c857606e607a53319c73b6 Mon Sep 17 00:00:00 2001 From: Panteleymonchuk Date: Wed, 11 Dec 2024 17:19:11 +0200 Subject: [PATCH 01/28] feat(wallet-dashboard): style staked vesting overview (#4303) * feat(dashboard): style vesting * feat(dashboard): show properly data * fix(wallet-dashboard): wrong buttonType for dist * feat(dashboard): update UI after resolve conflicts. * feat(dashboard): add earned amount * feat(wallet-dashboard): implement StakedTimelockObject component and refactor vesting page * feat(dashboard): add Stake button to Staked Vesting title and simplify StakeDialog prop * feat(dashboard): add useStakeRewardStatus hook and integrate into StakedTimelockObject component * feat(vesting): update vesting interface and calculations to use bigint for improved precision * feat(dashboard): add loader, change style, fix BigInt round issue. * refactor(dashboard): move StakeState and STATUS_COPY to useStakeRewardStatus hook * feat(dashboard): implement bigInt to tests. * fix(dashboard): adjust padding for sidebar overlap on small screens and improve flex layout in vesting page * feat(dashboard): update estimatedReward and principal to use BigInt for improved precision --- apps/core/src/components/stake/StakedCard.tsx | 78 +---- apps/core/src/hooks/index.ts | 1 + apps/core/src/hooks/useStakeRewardStatus.ts | 92 ++++++ .../app/(protected)/layout.tsx | 11 +- .../app/(protected)/vesting/page.tsx | 272 ++++++++++-------- apps/wallet-dashboard/components/index.ts | 1 + .../StakedTimelockObject.tsx | 74 +++++ .../staked-timelock-object/index.ts | 4 + .../lib/interfaces/vesting.interface.ts | 13 +- .../lib/utils/vesting/vesting.spec.ts | 78 +++-- .../lib/utils/vesting/vesting.ts | 40 ++- 11 files changed, 426 insertions(+), 238 deletions(-) create mode 100644 apps/core/src/hooks/useStakeRewardStatus.ts create mode 100644 apps/wallet-dashboard/components/staked-timelock-object/StakedTimelockObject.tsx create mode 100644 apps/wallet-dashboard/components/staked-timelock-object/index.ts diff --git a/apps/core/src/components/stake/StakedCard.tsx b/apps/core/src/components/stake/StakedCard.tsx index dad5c6f091a..58bc5c82f20 100644 --- a/apps/core/src/components/stake/StakedCard.tsx +++ b/apps/core/src/components/stake/StakedCard.tsx @@ -7,27 +7,10 @@ import { Card, CardImage, CardType, CardBody, CardAction, CardActionType } from import { useMemo } from 'react'; import { useIotaClientQuery } from '@iota/dapp-kit'; import { ImageIcon } from '../icon'; -import { determineCountDownText, ExtendedDelegatedStake } from '../../utils'; -import { TimeUnit, useFormatCoin, useGetTimeBeforeEpochNumber, useTimeAgo } from '../../hooks'; -import { NUM_OF_EPOCH_BEFORE_STAKING_REWARDS_REDEEMABLE } from '../../constants'; +import { ExtendedDelegatedStake } from '../../utils'; +import { useFormatCoin, useStakeRewardStatus } from '../../hooks'; import React from 'react'; -export enum StakeState { - WarmUp = 'WARM_UP', - Earning = 'EARNING', - CoolDown = 'COOL_DOWN', - Withdraw = 'WITHDRAW', - InActive = 'IN_ACTIVE', -} - -const STATUS_COPY: { [key in StakeState]: string } = { - [StakeState.WarmUp]: 'Starts Earning', - [StakeState.Earning]: 'Staking Rewards', - [StakeState.CoolDown]: 'Available to withdraw', - [StakeState.Withdraw]: 'Withdraw', - [StakeState.InActive]: 'Inactive', -}; - interface StakedCardProps { extendedStake: ExtendedDelegatedStake; currentEpoch: number; @@ -45,48 +28,20 @@ export function StakedCard({ }: StakedCardProps) { const { principal, stakeRequestEpoch, estimatedReward, validatorAddress } = extendedStake; - // TODO: Once two step withdraw is available, add cool down and withdraw now logic - // For cool down epoch, show Available to withdraw add rewards to principal - // Reward earning epoch is 2 epochs after stake request epoch - const earningRewardsEpoch = - Number(stakeRequestEpoch) + NUM_OF_EPOCH_BEFORE_STAKING_REWARDS_REDEEMABLE; - const isEarnedRewards = currentEpoch >= Number(earningRewardsEpoch); - const delegationState = inactiveValidator - ? StakeState.InActive - : isEarnedRewards - ? StakeState.Earning - : StakeState.WarmUp; - - const rewards = isEarnedRewards && estimatedReward ? BigInt(estimatedReward) : 0n; + const { rewards, title, subtitle } = useStakeRewardStatus({ + stakeRequestEpoch, + currentEpoch, + estimatedReward, + inactiveValidator, + }); // For inactive validator, show principal + rewards const [principalStaked, symbol] = useFormatCoin( inactiveValidator ? principal + rewards : principal, IOTA_TYPE_ARG, ); - const [rewardsStaked] = useFormatCoin(rewards, IOTA_TYPE_ARG); - - // Applicable only for warm up - const epochBeforeRewards = delegationState === StakeState.WarmUp ? earningRewardsEpoch : null; - - const statusText = { - // Epoch time before earning - [StakeState.WarmUp]: `Epoch #${earningRewardsEpoch}`, - [StakeState.Earning]: `${rewardsStaked} ${symbol}`, - // Epoch time before redrawing - [StakeState.CoolDown]: `Epoch #`, - [StakeState.Withdraw]: 'Now', - [StakeState.InActive]: 'Not earning rewards', - }; const { data } = useIotaClientQuery('getLatestIotaSystemState'); - const { data: rewardEpochTime } = useGetTimeBeforeEpochNumber(Number(epochBeforeRewards) || 0); - const timeAgo = useTimeAgo({ - timeFrom: rewardEpochTime || null, - shortedTimeLabel: false, - shouldEnd: true, - maxTimeUnit: TimeUnit.ONE_HOUR, - }); const validatorMeta = useMemo(() => { if (!data) return null; @@ -97,17 +52,6 @@ export function StakedCard({ ); }, [validatorAddress, data]); - const rewardTime = () => { - if (Number(epochBeforeRewards) && rewardEpochTime > 0) { - return determineCountDownText({ - timeAgo, - label: 'in', - }); - } - - return statusText[delegationState]; - }; - return ( @@ -118,11 +62,7 @@ export function StakedCard({ /> - + ); } diff --git a/apps/core/src/hooks/index.ts b/apps/core/src/hooks/index.ts index 122b9b01294..89aced3f57f 100644 --- a/apps/core/src/hooks/index.ts +++ b/apps/core/src/hooks/index.ts @@ -46,5 +46,6 @@ export * from './useNFTBasicData'; export * from './useOwnedNFT'; export * from './useNftDetails'; export * from './useCountdownByTimestamp'; +export * from './useStakeRewardStatus'; export * from './stake'; diff --git a/apps/core/src/hooks/useStakeRewardStatus.ts b/apps/core/src/hooks/useStakeRewardStatus.ts new file mode 100644 index 00000000000..415b3efc5ac --- /dev/null +++ b/apps/core/src/hooks/useStakeRewardStatus.ts @@ -0,0 +1,92 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; +import { NUM_OF_EPOCH_BEFORE_STAKING_REWARDS_REDEEMABLE } from '../constants'; +import { useFormatCoin, useGetTimeBeforeEpochNumber, useTimeAgo, TimeUnit } from '.'; +import { determineCountDownText } from '../utils'; + +export function useStakeRewardStatus({ + stakeRequestEpoch, + currentEpoch, + inactiveValidator, + estimatedReward, +}: { + stakeRequestEpoch: string; + currentEpoch: number; + inactiveValidator: boolean; + estimatedReward?: string | number | bigint; +}) { + // TODO: Once two step withdraw is available, add cool down and withdraw now logic + // For cool down epoch, show Available to withdraw add rewards to principal + // Reward earning epoch is 2 epochs after stake request epoch + const earningRewardsEpoch = + Number(stakeRequestEpoch) + NUM_OF_EPOCH_BEFORE_STAKING_REWARDS_REDEEMABLE; + + const isEarnedRewards = currentEpoch >= Number(earningRewardsEpoch); + + const delegationState = inactiveValidator + ? StakeState.InActive + : isEarnedRewards + ? StakeState.Earning + : StakeState.WarmUp; + + const rewards = isEarnedRewards && estimatedReward ? BigInt(estimatedReward) : 0n; + + const [rewardsStaked, symbol] = useFormatCoin(rewards, IOTA_TYPE_ARG); + + // Applicable only for warm up + const epochBeforeRewards = delegationState === StakeState.WarmUp ? earningRewardsEpoch : null; + + const statusText = { + // Epoch time before earning + [StakeState.WarmUp]: `Epoch #${earningRewardsEpoch}`, + [StakeState.Earning]: `${rewardsStaked} ${symbol}`, + // Epoch time before redrawing + [StakeState.CoolDown]: `Epoch #`, + [StakeState.Withdraw]: 'Now', + [StakeState.InActive]: 'Not earning rewards', + }; + + const { data: rewardEpochTime } = useGetTimeBeforeEpochNumber(Number(epochBeforeRewards) || 0); + + const timeAgo = useTimeAgo({ + timeFrom: rewardEpochTime || null, + shortedTimeLabel: false, + shouldEnd: true, + maxTimeUnit: TimeUnit.ONE_HOUR, + }); + + const rewardTime = () => { + if (Number(epochBeforeRewards) && rewardEpochTime > 0) { + return determineCountDownText({ + timeAgo, + label: 'in', + }); + } + + return statusText[delegationState]; + }; + + return { + rewards, + title: rewardTime(), + subtitle: STATUS_COPY[delegationState], + }; +} +export enum StakeState { + WarmUp = 'WARM_UP', + Earning = 'EARNING', + CoolDown = 'COOL_DOWN', + Withdraw = 'WITHDRAW', + InActive = 'IN_ACTIVE', +} +export const STATUS_COPY: { + [key in StakeState]: string; +} = { + [StakeState.WarmUp]: 'Starts Earning', + [StakeState.Earning]: 'Staking Rewards', + [StakeState.CoolDown]: 'Available to withdraw', + [StakeState.Withdraw]: 'Withdraw', + [StakeState.InActive]: 'Inactive', +}; diff --git a/apps/wallet-dashboard/app/(protected)/layout.tsx b/apps/wallet-dashboard/app/(protected)/layout.tsx index 8d42d2ff757..a77c8922ab9 100644 --- a/apps/wallet-dashboard/app/(protected)/layout.tsx +++ b/apps/wallet-dashboard/app/(protected)/layout.tsx @@ -25,11 +25,14 @@ function DashboardLayout({ children }: PropsWithChildren): JSX.Element { -
-
- + {/* This padding need to have aligned left/right content's position, because of sidebar overlap on the small screens */} +
+
+
+ +
+
{children}
-
{children}
diff --git a/apps/wallet-dashboard/app/(protected)/vesting/page.tsx b/apps/wallet-dashboard/app/(protected)/vesting/page.tsx index 0488681830d..b925d57e97c 100644 --- a/apps/wallet-dashboard/app/(protected)/vesting/page.tsx +++ b/apps/wallet-dashboard/app/(protected)/vesting/page.tsx @@ -6,6 +6,7 @@ import { Banner, StakeDialog, + StakeDialogView, TimelockedUnstakePopup, useStakeDialog, VestingScheduleDialog, @@ -37,8 +38,9 @@ import { CardType, ImageType, ImageShape, - ButtonType, Button, + ButtonType, + LoadingIndicator, } from '@iota/apps-ui-kit'; import { Theme, @@ -52,19 +54,26 @@ import { useCountdownByTimestamp, Feature, } from '@iota/core'; -import { useCurrentAccount, useIotaClient, useSignAndExecuteTransaction } from '@iota/dapp-kit'; +import { + useCurrentAccount, + useIotaClient, + useIotaClientQuery, + useSignAndExecuteTransaction, +} from '@iota/dapp-kit'; import { IotaValidatorSummary } from '@iota/iota-sdk/client'; import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; import { Calendar, StarHex } from '@iota/ui-icons'; import { useQueryClient } from '@tanstack/react-query'; import { useRouter } from 'next/navigation'; import { useEffect, useState } from 'react'; +import { StakedTimelockObject } from '@/components'; function VestingDashboardPage(): JSX.Element { const account = useCurrentAccount(); const queryClient = useQueryClient(); const iotaClient = useIotaClient(); const router = useRouter(); + const { data: system } = useIotaClientQuery('getLatestIotaSystemState'); const [isVestingScheduleDialogOpen, setIsVestingScheduleDialogOpen] = useState(false); const { addNotification } = useNotifications(); const { openPopup, closePopup } = usePopups(); @@ -73,7 +82,10 @@ function VestingDashboardPage(): JSX.Element { const { data: timelockedObjects } = useGetAllOwnedObjects(account?.address || '', { StructType: TIMELOCK_IOTA_TYPE, }); - const { data: timelockedStakedObjects } = useGetTimelockedStakedObjects(account?.address || ''); + + const { data: timelockedStakedObjects, isLoading: istimelockedStakedObjectsLoading } = + useGetTimelockedStakedObjects(account?.address || ''); + const { mutateAsync: signAndExecuteTransaction } = useSignAndExecuteTransaction(); const { theme } = useTheme(); @@ -151,6 +163,16 @@ function VestingDashboardPage(): JSX.Element { ); } + const [totalStakedFormatted, totalStakedSymbol] = useFormatCoin( + vestingSchedule.totalStaked, + IOTA_TYPE_ARG, + ); + + const [totalEarnedFormatted, totalEarnedSymbol] = useFormatCoin( + vestingSchedule.totalEarned, + IOTA_TYPE_ARG, + ); + const unlockedTimelockedObjects = timelockedMapped?.filter((timelockedObject) => isTimelockedUnlockable(timelockedObject, Number(currentEpochMs)), ); @@ -232,75 +254,85 @@ function VestingDashboardPage(): JSX.Element { router.push('/'); } }, [router, supplyIncreaseVestingEnabled]); + + if (istimelockedStakedObjectsLoading) { + return ( +
+ +
+ ); + } + return ( -
- - - <div className="flex flex-col gap-md p-lg pt-sm"> - <div className="flex h-24 flex-row gap-4"> - <DisplayStats - label="Total Vested" - value={formattedTotalVested} - supportingLabel={vestedSymbol} - /> - <DisplayStats - label="Total Locked" - value={formattedTotalLocked} - supportingLabel={lockedSymbol} - tooltipText="Total amount of IOTA that is still locked in your account." - tooltipPosition={TooltipPosition.Right} - /> + <div className="flex w-full max-w-4xl flex-col items-stretch justify-center gap-lg justify-self-center md:flex-row"> + <div className="flex w-full flex-col gap-lg md:w-1/2"> + <Panel> + <Title title="Vesting" size={TitleSize.Medium} /> + <div className="flex flex-col gap-md p-lg pt-sm"> + <div className="flex h-24 flex-row gap-4"> + <DisplayStats + label="Total Vested" + value={formattedTotalVested} + supportingLabel={vestedSymbol} + /> + <DisplayStats + label="Total Locked" + value={formattedTotalLocked} + supportingLabel={lockedSymbol} + tooltipText="Total amount of IOTA that is still locked in your account." + tooltipPosition={TooltipPosition.Right} + /> + </div> + <Card type={CardType.Outlined}> + <CardImage type={ImageType.BgSolid} shape={ImageShape.SquareRounded}> + <StarHex className="h-5 w-5 text-primary-30 dark:text-primary-80" /> + </CardImage> + <CardBody + title={`${formattedAvailableClaiming} ${availableClaimingSymbol}`} + subtitle="Available Rewards" + /> + <CardAction + type={CardActionType.Button} + onClick={handleCollect} + title="Collect" + buttonType={ButtonType.Primary} + buttonDisabled={ + !vestingSchedule.availableClaiming || + vestingSchedule.availableClaiming === 0n + } + /> + </Card> + <Card type={CardType.Outlined}> + <CardImage type={ImageType.BgSolid} shape={ImageShape.SquareRounded}> + <Calendar className="h-5 w-5 text-primary-30 dark:text-primary-80" /> + </CardImage> + <CardBody + title={`${formattedNextPayout} ${nextPayoutSymbol}`} + subtitle={`Next payout ${ + nextPayout?.expirationTimestampMs + ? formattedLastPayoutExpirationTime + : '' + }`} + /> + <CardAction + type={CardActionType.Button} + onClick={openReceiveTokenPopup} + title="See All" + buttonType={ButtonType.Secondary} + buttonDisabled={!vestingPortfolio} + /> + </Card> + {vestingPortfolio && ( + <VestingScheduleDialog + open={isVestingScheduleDialogOpen} + setOpen={setIsVestingScheduleDialogOpen} + vestingPortfolio={vestingPortfolio} + /> + )} </div> - <Card type={CardType.Outlined}> - <CardImage type={ImageType.BgSolid} shape={ImageShape.SquareRounded}> - <StarHex className="h-5 w-5 text-primary-30 dark:text-primary-80" /> - </CardImage> - <CardBody - title={`${formattedAvailableClaiming} ${availableClaimingSymbol}`} - subtitle="Available Rewards" - /> - <CardAction - type={CardActionType.Button} - onClick={handleCollect} - title="Collect" - buttonType={ButtonType.Primary} - buttonDisabled={ - !vestingSchedule.availableClaiming || - vestingSchedule.availableClaiming === 0 - } - /> - </Card> - <Card type={CardType.Outlined}> - <CardImage type={ImageType.BgSolid} shape={ImageShape.SquareRounded}> - <Calendar className="h-5 w-5 text-primary-30 dark:text-primary-80" /> - </CardImage> - <CardBody - title={`${formattedNextPayout} ${nextPayoutSymbol}`} - subtitle={`Next payout ${ - nextPayout?.expirationTimestampMs - ? formattedLastPayoutExpirationTime - : '' - }`} - /> - <CardAction - type={CardActionType.Button} - onClick={openReceiveTokenPopup} - title="See All" - buttonType={ButtonType.Secondary} - buttonDisabled={!vestingPortfolio} - /> - </Card> - {vestingPortfolio && ( - <VestingScheduleDialog - open={isVestingScheduleDialogOpen} - setOpen={setIsVestingScheduleDialogOpen} - vestingPortfolio={vestingPortfolio} - /> - )} - </div> - </Panel> - {timelockedstakedMapped.length === 0 ? ( - <> + </Panel> + + {timelockedstakedMapped.length === 0 ? ( <Banner videoSrc={videoSrc} title="Stake Vested Tokens" @@ -308,56 +340,64 @@ function VestingDashboardPage(): JSX.Element { onButtonClick={() => handleNewStake()} buttonText="Stake" /> - </> - ) : ( - <div className="flex w-1/2 flex-col items-center justify-center space-y-4 pt-12"> - <h1>Staked Vesting</h1> - <div className="flex flex-row space-x-4"> - <div className="flex flex-col items-center rounded-lg border p-4"> - <span>Your stake</span> - <span>{vestingSchedule.totalStaked}</span> + ) : null} + </div> + + {timelockedstakedMapped.length !== 0 ? ( + <div className="flex w-full md:w-1/2"> + <Panel> + <Title + title="Staked Vesting" + trailingElement={ + <Button + type={ButtonType.Primary} + text="Stake" + onClick={() => { + setStakeDialogView(StakeDialogView.SelectValidator); + }} + /> + } + /> + + <div className="flex flex-col px-lg py-sm"> + <div className="flex flex-row gap-md"> + <DisplayStats + label="Your stake" + value={`${totalStakedFormatted} ${totalStakedSymbol}`} + /> + <DisplayStats + label="Earned" + value={`${totalEarnedFormatted} ${totalEarnedSymbol}`} + /> + </div> </div> - <div className="flex flex-col items-center rounded-lg border p-4"> - <span>Total Unlocked</span> - <span>{vestingSchedule.totalUnlocked}</span> + <div className="flex flex-col px-lg py-sm"> + <div className="flex w-full flex-col items-center justify-center space-y-4 pt-4"> + {system && + timelockedStakedObjectsGrouped?.map( + (timelockedStakedObject) => { + return ( + <StakedTimelockObject + key={ + timelockedStakedObject.validatorAddress + + timelockedStakedObject.stakeRequestEpoch + + timelockedStakedObject.label + } + getValidatorByAddress={getValidatorByAddress} + timelockedStakedObject={timelockedStakedObject} + handleUnstake={handleUnstake} + currentEpoch={Number(system.epoch)} + /> + ); + }, + )} + </div> </div> - </div> - <div className="flex w-full flex-col items-center justify-center space-y-4 pt-4"> - {timelockedStakedObjectsGrouped?.map((timelockedStakedObject) => { - return ( - <div - key={ - timelockedStakedObject.validatorAddress + - timelockedStakedObject.stakeRequestEpoch + - timelockedStakedObject.label - } - className="flex w-full flex-row items-center justify-center space-x-4" - > - <span> - Validator:{' '} - {getValidatorByAddress( - timelockedStakedObject.validatorAddress, - )?.name || timelockedStakedObject.validatorAddress} - </span> - <span> - Stake Request Epoch:{' '} - {timelockedStakedObject.stakeRequestEpoch} - </span> - <span>Stakes: {timelockedStakedObject.stakes.length}</span> - - <Button - onClick={() => handleUnstake(timelockedStakedObject)} - text="Unstake" - /> - </div> - ); - })} - </div> - <Button onClick={() => handleNewStake()} text="Stake" /> + </Panel> </div> - )} + ) : null} <StakeDialog - isTimelockedStaking={true} + isTimelockedStaking stakedDetails={selectedStake} onSuccess={handleOnSuccess} isOpen={isDialogStakeOpen} diff --git a/apps/wallet-dashboard/components/index.ts b/apps/wallet-dashboard/components/index.ts index 179f9e836ac..37ff834be4f 100644 --- a/apps/wallet-dashboard/components/index.ts +++ b/apps/wallet-dashboard/components/index.ts @@ -26,3 +26,4 @@ export * from './tiles'; export * from './Toaster'; export * from './Banner'; export * from './MigrationOverview'; +export * from './staked-timelock-object'; diff --git a/apps/wallet-dashboard/components/staked-timelock-object/StakedTimelockObject.tsx b/apps/wallet-dashboard/components/staked-timelock-object/StakedTimelockObject.tsx new file mode 100644 index 00000000000..8696705bc12 --- /dev/null +++ b/apps/wallet-dashboard/components/staked-timelock-object/StakedTimelockObject.tsx @@ -0,0 +1,74 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 +'use client'; +import { TimelockedStakedObjectsGrouped } from '@/lib/utils'; +import { Card, CardImage, CardBody, CardAction, CardActionType } from '@iota/apps-ui-kit'; +import { useFormatCoin, ImageIcon, ImageIconSize, useStakeRewardStatus } from '@iota/core'; +import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; +import { IotaValidatorSummary } from '@iota/iota-sdk/client'; + +export interface StakedTimelockObjectProps { + timelockedStakedObject: TimelockedStakedObjectsGrouped; + handleUnstake: (timelockedStakedObject: TimelockedStakedObjectsGrouped) => void; + getValidatorByAddress: (validatorAddress: string) => IotaValidatorSummary | undefined; + currentEpoch: number; +} + +export function StakedTimelockObject({ + getValidatorByAddress, + timelockedStakedObject, + handleUnstake, + currentEpoch, +}: StakedTimelockObjectProps) { + const name = + getValidatorByAddress(timelockedStakedObject.validatorAddress)?.name || + timelockedStakedObject.validatorAddress; + + // TODO probably we could calculate estimated reward on grouping stage. + const summary = timelockedStakedObject.stakes.reduce( + (acc, stake) => { + const estimatedReward = stake.status === 'Active' ? stake.estimatedReward : 0; + + return { + principal: BigInt(stake.principal) + acc.principal, + estimatedReward: BigInt(estimatedReward) + acc.estimatedReward, + stakeRequestEpoch: stake.stakeRequestEpoch, + }; + }, + { + principal: 0n, + estimatedReward: 0n, + stakeRequestEpoch: '', + }, + ); + + const supportingText = useStakeRewardStatus({ + currentEpoch, + stakeRequestEpoch: summary.stakeRequestEpoch, + estimatedReward: summary.estimatedReward, + inactiveValidator: false, + }); + + const [sumPrincipalFormatted, sumPrincipalSymbol] = useFormatCoin( + summary.principal, + IOTA_TYPE_ARG, + ); + + return ( + <Card onClick={() => handleUnstake(timelockedStakedObject)}> + <CardImage> + <ImageIcon src={null} label={name} fallback={name} size={ImageIconSize.Large} /> + </CardImage> + <CardBody + title={name} + subtitle={`${sumPrincipalFormatted} ${sumPrincipalSymbol}`} + isTextTruncated + /> + <CardAction + type={CardActionType.SupportingText} + title={supportingText.title} + subtitle={supportingText.subtitle} + /> + </Card> + ); +} diff --git a/apps/wallet-dashboard/components/staked-timelock-object/index.ts b/apps/wallet-dashboard/components/staked-timelock-object/index.ts new file mode 100644 index 00000000000..2be2613f3ef --- /dev/null +++ b/apps/wallet-dashboard/components/staked-timelock-object/index.ts @@ -0,0 +1,4 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +export * from './StakedTimelockObject'; diff --git a/apps/wallet-dashboard/lib/interfaces/vesting.interface.ts b/apps/wallet-dashboard/lib/interfaces/vesting.interface.ts index c997986f065..ba846d71e6c 100644 --- a/apps/wallet-dashboard/lib/interfaces/vesting.interface.ts +++ b/apps/wallet-dashboard/lib/interfaces/vesting.interface.ts @@ -14,10 +14,11 @@ export interface SupplyIncreaseVestingPayout { export type SupplyIncreaseVestingPortfolio = SupplyIncreaseVestingPayout[]; export interface VestingOverview { - totalVested: number; - totalUnlocked: number; - totalLocked: number; - totalStaked: number; - availableClaiming: number; - availableStaking: number; + totalVested: bigint; + totalUnlocked: bigint; + totalLocked: bigint; + totalStaked: bigint; + totalEarned: bigint; + availableClaiming: bigint; + availableStaking: bigint; } diff --git a/apps/wallet-dashboard/lib/utils/vesting/vesting.spec.ts b/apps/wallet-dashboard/lib/utils/vesting/vesting.spec.ts index 5e1cea77657..e0bb1f37bd5 100644 --- a/apps/wallet-dashboard/lib/utils/vesting/vesting.spec.ts +++ b/apps/wallet-dashboard/lib/utils/vesting/vesting.spec.ts @@ -21,6 +21,10 @@ import { const MOCKED_CURRENT_EPOCH_TIMESTAMP = Date.now() + MILLISECONDS_PER_HOUR * 6; // 6 hours later +function bigIntRound(n: number) { + return BigInt(Math.floor(n)); +} + describe('get last supply increase vesting payout', () => { it('should get the object with highest expirationTimestampMs', () => { const timelockedObjects = MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS; @@ -121,11 +125,12 @@ describe('vesting overview', () => { it('should get correct vesting overview data with timelocked objects', () => { const timelockedObjects = MOCKED_SUPPLY_INCREASE_VESTING_TIMELOCKED_OBJECTS; const lastPayout = timelockedObjects[timelockedObjects.length - 1]; - const totalAmount = + const totalAmount = bigIntRound( (SUPPLY_INCREASE_STAKER_VESTING_DURATION * SUPPLY_INCREASE_VESTING_PAYOUTS_IN_1_YEAR * lastPayout.locked.value) / - 0.9; + 0.9, + ); const vestingOverview = getVestingOverview(timelockedObjects, Date.now()); expect(vestingOverview.totalVested).toEqual(totalAmount); @@ -140,25 +145,31 @@ describe('vesting overview', () => { const lockedAmount = vestingPortfolio.reduce( (acc, current) => - current.expirationTimestampMs > Date.now() ? acc + current.amount : acc, - 0, + current.expirationTimestampMs > Date.now() + ? acc + bigIntRound(current.amount) + : acc, + 0n, ); expect(vestingOverview.totalLocked).toEqual(lockedAmount); expect(vestingOverview.totalUnlocked).toEqual(totalAmount - lockedAmount); // In this scenario there are no staked objects - expect(vestingOverview.totalStaked).toEqual(0); + expect(vestingOverview.totalStaked).toEqual(0n); const lockedObjectsAmount = timelockedObjects.reduce( (acc, current) => - current.expirationTimestampMs > Date.now() ? acc + current.locked.value : acc, - 0, + current.expirationTimestampMs > Date.now() + ? acc + bigIntRound(current.locked.value) + : acc, + 0n, ); const unlockedObjectsAmount = timelockedObjects.reduce( (acc, current) => - current.expirationTimestampMs <= Date.now() ? acc + current.locked.value : acc, - 0, + current.expirationTimestampMs <= Date.now() + ? acc + bigIntRound(current.locked.value) + : acc, + 0n, ); expect(vestingOverview.availableClaiming).toEqual(unlockedObjectsAmount); @@ -172,11 +183,13 @@ describe('vesting overview', () => { const lastPayout = extendedTimelockedStakedObjects[extendedTimelockedStakedObjects.length - 1]; const lastPayoutValue = Number(lastPayout.principal); - const totalAmount = + const totalAmount = bigIntRound( (SUPPLY_INCREASE_STAKER_VESTING_DURATION * SUPPLY_INCREASE_VESTING_PAYOUTS_IN_1_YEAR * lastPayoutValue) / - 0.9; + 0.9, + ); + const vestingOverview = getVestingOverview(extendedTimelockedStakedObjects, Date.now()); expect(vestingOverview.totalVested).toEqual(totalAmount); @@ -190,18 +203,20 @@ describe('vesting overview', () => { const lockedAmount = vestingPortfolio.reduce( (acc, current) => - current.expirationTimestampMs > Date.now() ? acc + current.amount : acc, - 0, + current.expirationTimestampMs > Date.now() + ? acc + bigIntRound(current.amount) + : acc, + 0n, ); expect(vestingOverview.totalLocked).toEqual(lockedAmount); expect(vestingOverview.totalUnlocked).toEqual(totalAmount - lockedAmount); - let totalStaked: number = 0; + let totalStaked = 0n; for (const timelockedStakedObject of timelockedStakedObjects) { const stakesAmount = timelockedStakedObject.stakes.reduce( - (acc, current) => acc + Number(current.principal), - 0, + (acc, current) => acc + bigIntRound(Number(current.principal)), + 0n, ); totalStaked += stakesAmount; } @@ -209,8 +224,8 @@ describe('vesting overview', () => { expect(vestingOverview.totalStaked).toEqual(totalStaked); // In this scenario there are no objects to stake or claim because they are all staked - expect(vestingOverview.availableClaiming).toEqual(0); - expect(vestingOverview.availableStaking).toEqual(0); + expect(vestingOverview.availableClaiming).toEqual(0n); + expect(vestingOverview.availableStaking).toEqual(0n); }); it('should get correct vesting overview data with mixed objects', () => { @@ -224,11 +239,12 @@ describe('vesting overview', () => { mixedObjects, MOCKED_CURRENT_EPOCH_TIMESTAMP, )!; - const totalAmount = + const totalAmount = bigIntRound( (SUPPLY_INCREASE_STAKER_VESTING_DURATION * SUPPLY_INCREASE_VESTING_PAYOUTS_IN_1_YEAR * lastPayout.amount) / - 0.9; + 0.9, + ); const vestingOverview = getVestingOverview(mixedObjects, Date.now()); expect(vestingOverview.totalVested).toEqual(totalAmount); @@ -243,16 +259,18 @@ describe('vesting overview', () => { const lockedAmount = vestingPortfolio.reduce( (acc, current) => - current.expirationTimestampMs > Date.now() ? acc + current.amount : acc, - 0, + current.expirationTimestampMs > Date.now() + ? acc + bigIntRound(current.amount) + : acc, + 0n, ); expect(vestingOverview.totalLocked).toEqual(lockedAmount); expect(vestingOverview.totalUnlocked).toEqual(totalAmount - lockedAmount); const totalStaked = extendedTimelockedStakedObjects.reduce( - (acc, current) => acc + Number(current.principal), - 0, + (acc, current) => acc + bigIntRound(Number(current.principal)), + 0n, ); expect(vestingOverview.totalStaked).toEqual(totalStaked); @@ -260,13 +278,17 @@ describe('vesting overview', () => { const timelockObjects = mixedObjects.filter(isTimelockedObject); const availableClaiming = timelockObjects.reduce( (acc, current) => - current.expirationTimestampMs <= Date.now() ? acc + current.locked.value : acc, - 0, + current.expirationTimestampMs <= Date.now() + ? acc + bigIntRound(current.locked.value) + : acc, + 0n, ); const availableStaking = timelockObjects.reduce( (acc, current) => - current.expirationTimestampMs > Date.now() ? acc + current.locked.value : acc, - 0, + current.expirationTimestampMs > Date.now() + ? acc + bigIntRound(current.locked.value) + : acc, + 0n, ); expect(vestingOverview.availableClaiming).toEqual(availableClaiming); expect(vestingOverview.availableStaking).toEqual(availableStaking); diff --git a/apps/wallet-dashboard/lib/utils/vesting/vesting.ts b/apps/wallet-dashboard/lib/utils/vesting/vesting.ts index c4bd743b5ef..e0bb8a29158 100644 --- a/apps/wallet-dashboard/lib/utils/vesting/vesting.ts +++ b/apps/wallet-dashboard/lib/utils/vesting/vesting.ts @@ -149,52 +149,61 @@ export function getVestingOverview( if (vestingObjects.length === 0 || !latestPayout) { return { - totalVested: 0, - totalUnlocked: 0, - totalLocked: 0, - totalStaked: 0, - availableClaiming: 0, - availableStaking: 0, + totalVested: 0n, + totalUnlocked: 0n, + totalLocked: 0n, + totalStaked: 0n, + totalEarned: 0n, + availableClaiming: 0n, + availableStaking: 0n, }; } const userType = getSupplyIncreaseVestingUserType([latestPayout]); const vestingPayoutsCount = getSupplyIncreaseVestingPayoutsCount(userType!); // Note: we add the initial payout to the total rewards, 10% of the total rewards are paid out immediately - const totalVestedAmount = (vestingPayoutsCount * latestPayout.amount) / 0.9; + const totalVestedAmount = BigInt(Math.floor((vestingPayoutsCount * latestPayout.amount) / 0.9)); const vestingPortfolio = buildSupplyIncreaseVestingSchedule( latestPayout, currentEpochTimestamp, ); const totalLockedAmount = vestingPortfolio.reduce( (acc, current) => - current.expirationTimestampMs > currentEpochTimestamp ? acc + current.amount : acc, - 0, + current.expirationTimestampMs > currentEpochTimestamp + ? acc + BigInt(current.amount) + : acc, + 0n, ); const totalUnlockedVestedAmount = totalVestedAmount - totalLockedAmount; const timelockedStakedObjects = vestingObjects.filter(isTimelockedStakedIota); const totalStaked = timelockedStakedObjects.reduce( - (acc, current) => acc + Number(current.principal), - 0, + (acc, current) => acc + BigInt(current.principal), + 0n, ); + const totalEarned = timelockedStakedObjects + .filter((t) => t.status === 'Active') + .reduce((acc, current) => { + return acc + BigInt(current.estimatedReward); + }, 0n); + const timelockedObjects = vestingObjects.filter(isTimelockedObject); const totalAvailableClaimingAmount = timelockedObjects.reduce( (acc, current) => current.expirationTimestampMs <= currentEpochTimestamp - ? acc + current.locked.value + ? acc + BigInt(current.locked.value) : acc, - 0, + 0n, ); const totalAvailableStakingAmount = timelockedObjects.reduce( (acc, current) => current.expirationTimestampMs > currentEpochTimestamp && current.locked.value >= MIN_STAKING_THRESHOLD - ? acc + current.locked.value + ? acc + BigInt(current.locked.value) : acc, - 0, + 0n, ); return { @@ -202,6 +211,7 @@ export function getVestingOverview( totalUnlocked: totalUnlockedVestedAmount, totalLocked: totalLockedAmount, totalStaked: totalStaked, + totalEarned: totalEarned, availableClaiming: totalAvailableClaimingAmount, availableStaking: totalAvailableStakingAmount, }; From 9b5f33fbf3fa0df5f2e9d2d95a98f117888d935c Mon Sep 17 00:00:00 2001 From: Pavlo Botnar <pavlo.botnar@gmail.com> Date: Wed, 11 Dec 2024 23:10:11 +0200 Subject: [PATCH 02/28] feat(iota-genesis-builder): add address swap map for swapping origin addresses to destination during the migration process (#4314) * feat(iota-genesis-builder): add address swap map for swapping origin addresses to destination during the migration process --------- Co-authored-by: DaughterOfMars <chloedaughterofmars@gmail.com> --- Cargo.lock | 1 + crates/iota-genesis-builder/Cargo.toml | 1 + crates/iota-genesis-builder/src/main.rs | 19 +- .../src/stardust/migration/executor.rs | 37 ++- .../src/stardust/migration/migration.rs | 30 ++- .../src/stardust/migration/tests/basic.rs | 7 +- .../src/stardust/migration/tests/mod.rs | 14 +- .../stardust/migration/verification/alias.rs | 19 +- .../stardust/migration/verification/basic.rs | 31 ++- .../migration/verification/foundry.rs | 6 +- .../stardust/migration/verification/mod.rs | 12 +- .../stardust/migration/verification/nft.rs | 29 +- .../stardust/migration/verification/util.rs | 9 +- .../src/stardust/types/address_swap_map.rs | 255 ++++++++++++++++++ .../src/stardust/types/mod.rs | 1 + 15 files changed, 409 insertions(+), 62 deletions(-) create mode 100644 crates/iota-genesis-builder/src/stardust/types/address_swap_map.rs diff --git a/Cargo.lock b/Cargo.lock index a6985400c04..272c5b18d44 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6630,6 +6630,7 @@ dependencies = [ "bigdecimal", "camino", "clap", + "csv", "fastcrypto", "flate2", "fs_extra", diff --git a/crates/iota-genesis-builder/Cargo.toml b/crates/iota-genesis-builder/Cargo.toml index 81d3c77ffe1..c62d44ebfbf 100644 --- a/crates/iota-genesis-builder/Cargo.toml +++ b/crates/iota-genesis-builder/Cargo.toml @@ -16,6 +16,7 @@ bcs.workspace = true bigdecimal = "0.4" camino.workspace = true clap.workspace = true +csv = "1.2" fastcrypto.workspace = true flate2.workspace = true fs_extra = "1.3" diff --git a/crates/iota-genesis-builder/src/main.rs b/crates/iota-genesis-builder/src/main.rs index ba782f7b042..403080b5ee7 100644 --- a/crates/iota-genesis-builder/src/main.rs +++ b/crates/iota-genesis-builder/src/main.rs @@ -13,7 +13,7 @@ use iota_genesis_builder::{ stardust::{ migration::{Migration, MigrationTargetNetwork}, parse::HornetSnapshotParser, - types::output_header::OutputHeader, + types::{address_swap_map::AddressSwapMap, output_header::OutputHeader}, }, }; use iota_sdk::types::block::{ @@ -42,6 +42,11 @@ enum Snapshot { Iota { #[clap(long, help = "Path to the Iota Hornet full-snapshot file")] snapshot_path: String, + #[clap( + long, + help = "Path to the address swap map file. This must be a CSV file with two columns, where an entry contains in the first column an IotaAddress present in the Hornet full-snapshot and in the second column an IotaAddress that will be used for the swap." + )] + address_swap_map_path: String, #[clap(long, value_parser = clap::value_parser!(MigrationTargetNetwork), help = "Target network for migration")] target_network: MigrationTargetNetwork, }, @@ -56,11 +61,17 @@ fn main() -> Result<()> { // Parse the CLI arguments let cli = Cli::parse(); - let (snapshot_path, target_network, coin_type) = match cli.snapshot { + let (snapshot_path, address_swap_map_path, target_network, coin_type) = match cli.snapshot { Snapshot::Iota { snapshot_path, + address_swap_map_path, target_network, - } => (snapshot_path, target_network, CoinType::Iota), + } => ( + snapshot_path, + address_swap_map_path, + target_network, + CoinType::Iota, + ), }; // Start the Hornet snapshot parser @@ -73,12 +84,14 @@ fn main() -> Result<()> { CoinType::Iota => scale_amount_for_iota(snapshot_parser.total_supply()?)?, }; + let address_swap_map = AddressSwapMap::from_csv(&address_swap_map_path)?; // Prepare the migration using the parser output stream let migration = Migration::new( snapshot_parser.target_milestone_timestamp(), total_supply, target_network, coin_type, + address_swap_map, )?; // Prepare the writer for the objects snapshot diff --git a/crates/iota-genesis-builder/src/stardust/migration/executor.rs b/crates/iota-genesis-builder/src/stardust/migration/executor.rs index 816123dba63..d11f85c8c00 100644 --- a/crates/iota-genesis-builder/src/stardust/migration/executor.rs +++ b/crates/iota-genesis-builder/src/stardust/migration/executor.rs @@ -35,7 +35,6 @@ use iota_types::{ stardust::{ coin_type::CoinType, output::{Nft, foundry::create_foundry_amount_coin}, - stardust_to_iota_address, stardust_to_iota_address_owner, }, timelock::timelock, transaction::{ @@ -53,7 +52,10 @@ use crate::{ MigrationTargetNetwork, PACKAGE_DEPS, create_migration_context, package_module_bytes, verification::created_objects::CreatedObjects, }, - types::{output_header::OutputHeader, token_scheme::SimpleTokenSchemeU64}, + types::{ + address_swap_map::AddressSwapMap, output_header::OutputHeader, + token_scheme::SimpleTokenSchemeU64, + }, }, }; @@ -307,6 +309,7 @@ impl Executor { header: &OutputHeader, alias: &AliasOutput, coin_type: CoinType, + address_swap_map: &mut AddressSwapMap, ) -> Result<CreatedObjects> { let mut created_objects = CreatedObjects::default(); @@ -316,7 +319,8 @@ impl Executor { let move_alias = iota_types::stardust::output::Alias::try_from_stardust(alias_id, alias)?; // TODO: We should ensure that no circular ownership exists. - let alias_output_owner = stardust_to_iota_address_owner(alias.governor_address())?; + let alias_output_owner = + address_swap_map.swap_stardust_to_iota_address_owner(alias.governor_address())?; let package_deps = InputObjects::new(self.load_packages(PACKAGE_DEPS).collect()); let version = package_deps.lamport_timestamp(&[]); @@ -558,10 +562,14 @@ impl Executor { basic_output: &BasicOutput, target_milestone_timestamp_sec: u32, coin_type: &CoinType, + address_swap_map: &mut AddressSwapMap, ) -> Result<CreatedObjects> { let mut basic = iota_types::stardust::output::BasicOutput::new(header.new_object_id(), basic_output)?; - let owner: IotaAddress = basic_output.address().to_string().parse()?; + + let basic_objects_owner = + address_swap_map.swap_stardust_to_iota_address(basic_output.address())?; + let mut created_objects = CreatedObjects::default(); // The minimum version of the manually created objects @@ -570,11 +578,12 @@ impl Executor { let object = if basic.is_simple_coin(target_milestone_timestamp_sec) { if !basic_output.native_tokens().is_empty() { - let coins = self.create_native_token_coins(basic_output.native_tokens(), owner)?; + let coins = self + .create_native_token_coins(basic_output.native_tokens(), basic_objects_owner)?; created_objects.set_native_tokens(coins)?; } let amount_coin = basic.into_genesis_coin_object( - owner, + basic_objects_owner, &self.protocol_config, &self.tx_context, version, @@ -596,7 +605,7 @@ impl Executor { basic.native_tokens.id = UID::new(self.tx_context.fresh_id()); } let object = basic.to_genesis_object( - owner, + basic_objects_owner, &self.protocol_config, &self.tx_context, version, @@ -618,10 +627,12 @@ impl Executor { output_id: OutputId, basic_output: &BasicOutput, target_milestone_timestamp: u32, + address_swap_map: &mut AddressSwapMap, ) -> Result<CreatedObjects> { let mut created_objects = CreatedObjects::default(); - let owner: IotaAddress = basic_output.address().to_string().parse()?; + let basic_output_owner = + address_swap_map.swap_stardust_to_iota_address(basic_output.address())?; let package_deps = InputObjects::new(self.load_packages(PACKAGE_DEPS).collect()); let version = package_deps.lamport_timestamp(&[]); @@ -631,7 +642,7 @@ impl Executor { let object = timelock::to_genesis_object( timelock, - owner, + basic_output_owner, &self.protocol_config, &self.tx_context, version, @@ -648,6 +659,7 @@ impl Executor { header: &OutputHeader, nft: &NftOutput, coin_type: CoinType, + address_swap_map: &mut AddressSwapMap, ) -> Result<CreatedObjects> { let mut created_objects = CreatedObjects::default(); @@ -657,8 +669,11 @@ impl Executor { let move_nft = Nft::try_from_stardust(nft_id, nft)?; // TODO: We should ensure that no circular ownership exists. - let nft_output_owner_address = stardust_to_iota_address(nft.address())?; - let nft_output_owner = stardust_to_iota_address_owner(nft.address())?; + let nft_output_owner_address = + address_swap_map.swap_stardust_to_iota_address(nft.address())?; + + let nft_output_owner = + address_swap_map.swap_stardust_to_iota_address_owner(nft.address())?; let package_deps = InputObjects::new(self.load_packages(PACKAGE_DEPS).collect()); let version = package_deps.lamport_timestamp(&[]); diff --git a/crates/iota-genesis-builder/src/stardust/migration/migration.rs b/crates/iota-genesis-builder/src/stardust/migration/migration.rs index c07efda78ec..96ef8c7fd2a 100644 --- a/crates/iota-genesis-builder/src/stardust/migration/migration.rs +++ b/crates/iota-genesis-builder/src/stardust/migration/migration.rs @@ -32,7 +32,7 @@ use crate::stardust::{ verification::{created_objects::CreatedObjects, verify_outputs}, }, native_token::package_data::NativeTokenPackageData, - types::output_header::OutputHeader, + types::{address_swap_map::AddressSwapMap, output_header::OutputHeader}, }; /// We fix the protocol version used in the migration. @@ -74,6 +74,7 @@ pub struct Migration { /// The coin type to use in order to migrate outputs. Can only be equal to /// `Iota` at the moment. Is fixed for the entire migration process. coin_type: CoinType, + address_swap_map: AddressSwapMap, } impl Migration { @@ -84,6 +85,7 @@ impl Migration { total_supply: u64, target_network: MigrationTargetNetwork, coin_type: CoinType, + address_swap_map: AddressSwapMap, ) -> Result<Self> { let executor = Executor::new( ProtocolVersion::new(MIGRATION_PROTOCOL_VERSION), @@ -96,6 +98,7 @@ impl Migration { executor, output_objects_map: Default::default(), coin_type, + address_swap_map, }) } @@ -135,7 +138,7 @@ impl Migration { .collect::<Vec<_>>(); info!("Verifying ledger state..."); self.verify_ledger_state(&outputs)?; - + self.address_swap_map.verify_all_addresses_swapped()?; Ok(()) } @@ -194,14 +197,18 @@ impl Migration { ) -> Result<()> { for (header, output) in outputs { let created = match output { - Output::Alias(alias) => { - self.executor - .create_alias_objects(header, alias, self.coin_type)? - } - Output::Nft(nft) => { - self.executor - .create_nft_objects(header, nft, self.coin_type)? - } + Output::Alias(alias) => self.executor.create_alias_objects( + header, + alias, + self.coin_type, + &mut self.address_swap_map, + )?, + Output::Nft(nft) => self.executor.create_nft_objects( + header, + nft, + self.coin_type, + &mut self.address_swap_map, + )?, Output::Basic(basic) => { // All timelocked vested rewards(basic outputs with the specific ID format) // should be migrated as TimeLock<Balance<IOTA>> objects. @@ -214,6 +221,7 @@ impl Migration { header.output_id(), basic, self.target_milestone_timestamp_sec, + &mut self.address_swap_map, )? } else { self.executor.create_basic_objects( @@ -221,6 +229,7 @@ impl Migration { basic, self.target_milestone_timestamp_sec, &self.coin_type, + &mut self.address_swap_map, )? } } @@ -244,6 +253,7 @@ impl Migration { self.target_milestone_timestamp_sec, self.total_supply, self.executor.store(), + &self.address_swap_map, )?; Ok(()) } diff --git a/crates/iota-genesis-builder/src/stardust/migration/tests/basic.rs b/crates/iota-genesis-builder/src/stardust/migration/tests/basic.rs index 3888ef58d1e..b503be9862c 100644 --- a/crates/iota-genesis-builder/src/stardust/migration/tests/basic.rs +++ b/crates/iota-genesis-builder/src/stardust/migration/tests/basic.rs @@ -32,7 +32,7 @@ use crate::stardust::{ random_output_header, unlock_object, }, }, - types::output_header::OutputHeader, + types::{address_swap_map::AddressSwapMap, output_header::OutputHeader}, }; /// Test the id of a `BasicOutput` that is transformed to a simple coin. @@ -53,6 +53,7 @@ fn basic_simple_coin_id() { 1_000_000, MigrationTargetNetwork::Mainnet, CoinType::Iota, + AddressSwapMap::default(), ) .unwrap(); migration @@ -103,6 +104,7 @@ fn basic_simple_coin_id_with_expired_timelock() { 1_000_000, MigrationTargetNetwork::Mainnet, CoinType::Iota, + AddressSwapMap::default(), ) .unwrap(); migration @@ -139,6 +141,7 @@ fn basic_id() { 1_000_000, MigrationTargetNetwork::Mainnet, CoinType::Iota, + AddressSwapMap::default(), ) .unwrap(); migration @@ -183,6 +186,7 @@ fn basic_simple_coin_migration_with_native_token() { 1_000_000, MigrationTargetNetwork::Mainnet, CoinType::Iota, + AddressSwapMap::default(), ) .unwrap(); migration.run_migration(outputs).unwrap(); @@ -225,6 +229,7 @@ fn basic_simple_coin_migration_with_native_tokens() { 1_000_000, MigrationTargetNetwork::Mainnet, CoinType::Iota, + AddressSwapMap::default(), ) .unwrap(); migration.run_migration(outputs.clone()).unwrap(); diff --git a/crates/iota-genesis-builder/src/stardust/migration/tests/mod.rs b/crates/iota-genesis-builder/src/stardust/migration/tests/mod.rs index b55599cdb5a..f694f1b8758 100644 --- a/crates/iota-genesis-builder/src/stardust/migration/tests/mod.rs +++ b/crates/iota-genesis-builder/src/stardust/migration/tests/mod.rs @@ -39,7 +39,10 @@ use crate::stardust::{ }, verification::created_objects::CreatedObjects, }, - types::{output_header::OutputHeader, output_index::random_output_index}, + types::{ + address_swap_map::AddressSwapMap, output_header::OutputHeader, + output_index::random_output_index, + }, }; mod alias; @@ -63,8 +66,13 @@ fn run_migration( outputs: impl IntoIterator<Item = (OutputHeader, Output)>, coin_type: CoinType, ) -> anyhow::Result<(Executor, HashMap<OutputId, CreatedObjects>)> { - let mut migration = - Migration::new(1, total_supply, MigrationTargetNetwork::Mainnet, coin_type)?; + let mut migration = Migration::new( + 1, + total_supply, + MigrationTargetNetwork::Mainnet, + coin_type, + AddressSwapMap::default(), + )?; migration.run_migration(outputs)?; Ok(migration.into_parts()) } diff --git a/crates/iota-genesis-builder/src/stardust/migration/verification/alias.rs b/crates/iota-genesis-builder/src/stardust/migration/verification/alias.rs index f8cf0e1b23a..bc75037c894 100644 --- a/crates/iota-genesis-builder/src/stardust/migration/verification/alias.rs +++ b/crates/iota-genesis-builder/src/stardust/migration/verification/alias.rs @@ -17,15 +17,18 @@ use iota_types::{ }, }; -use crate::stardust::migration::{ - executor::FoundryLedgerData, - verification::{ - created_objects::CreatedObjects, - util::{ - verify_address_owner, verify_issuer_feature, verify_metadata_feature, - verify_native_tokens, verify_parent, verify_sender_feature, +use crate::stardust::{ + migration::{ + executor::FoundryLedgerData, + verification::{ + created_objects::CreatedObjects, + util::{ + verify_address_owner, verify_issuer_feature, verify_metadata_feature, + verify_native_tokens, verify_parent, verify_sender_feature, + }, }, }, + types::address_swap_map::AddressSwapMap, }; pub(super) fn verify_alias_output( @@ -35,6 +38,7 @@ pub(super) fn verify_alias_output( foundry_data: &HashMap<stardust::TokenId, FoundryLedgerData>, storage: &InMemoryStorage, total_value: &mut u64, + address_swap_map: &AddressSwapMap, ) -> anyhow::Result<()> { let alias_id = ObjectID::new(*output.alias_id_non_null(&output_id)); @@ -53,6 +57,7 @@ pub(super) fn verify_alias_output( output.governor_address(), created_output_obj, "alias output", + address_swap_map, )?; // Alias Owner diff --git a/crates/iota-genesis-builder/src/stardust/migration/verification/basic.rs b/crates/iota-genesis-builder/src/stardust/migration/verification/basic.rs index 8748efba4a3..ddd9efb6889 100644 --- a/crates/iota-genesis-builder/src/stardust/migration/verification/basic.rs +++ b/crates/iota-genesis-builder/src/stardust/migration/verification/basic.rs @@ -18,17 +18,20 @@ use iota_types::{ }, }; -use crate::stardust::migration::{ - executor::FoundryLedgerData, - verification::{ - created_objects::CreatedObjects, - util::{ - verify_address_owner, verify_coin, verify_expiration_unlock_condition, - verify_metadata_feature, verify_native_tokens, verify_parent, verify_sender_feature, - verify_storage_deposit_unlock_condition, verify_tag_feature, - verify_timelock_unlock_condition, +use crate::stardust::{ + migration::{ + executor::FoundryLedgerData, + verification::{ + created_objects::CreatedObjects, + util::{ + verify_address_owner, verify_coin, verify_expiration_unlock_condition, + verify_metadata_feature, verify_native_tokens, verify_parent, + verify_sender_feature, verify_storage_deposit_unlock_condition, verify_tag_feature, + verify_timelock_unlock_condition, + }, }, }, + types::address_swap_map::AddressSwapMap, }; pub(super) fn verify_basic_output( @@ -39,6 +42,7 @@ pub(super) fn verify_basic_output( target_milestone_timestamp: u32, storage: &InMemoryStorage, total_value: &mut u64, + address_swap_map: &AddressSwapMap, ) -> Result<()> { // If this is a timelocked vested reward, a `Timelock<Balance>` is created. if is_timelocked_vested_reward(output_id, output, target_milestone_timestamp) { @@ -120,7 +124,12 @@ pub(super) fn verify_basic_output( created_output_obj.owner, ); } else { - verify_address_owner(output.address(), created_output_obj, "basic output")?; + verify_address_owner( + output.address(), + created_output_obj, + "basic output", + address_swap_map, + )?; } // Amount @@ -191,7 +200,7 @@ pub(super) fn verify_basic_output( .as_coin_maybe() .ok_or_else(|| anyhow!("expected a coin"))?; - verify_address_owner(output.address(), created_coin_obj, "coin")?; + verify_address_owner(output.address(), created_coin_obj, "coin", address_swap_map)?; verify_coin(output.amount(), &created_coin)?; *total_value += created_coin.value(); diff --git a/crates/iota-genesis-builder/src/stardust/migration/verification/foundry.rs b/crates/iota-genesis-builder/src/stardust/migration/verification/foundry.rs index da43737ee98..68aed45cfe3 100644 --- a/crates/iota-genesis-builder/src/stardust/migration/verification/foundry.rs +++ b/crates/iota-genesis-builder/src/stardust/migration/verification/foundry.rs @@ -23,7 +23,7 @@ use crate::stardust::{ }, }, native_token::package_data::NativeTokenPackageData, - types::token_scheme::SimpleTokenSchemeU64, + types::{address_swap_map::AddressSwapMap, token_scheme::SimpleTokenSchemeU64}, }; pub(super) fn verify_foundry_output( @@ -33,6 +33,7 @@ pub(super) fn verify_foundry_output( foundry_data: &HashMap<TokenId, FoundryLedgerData>, storage: &InMemoryStorage, total_value: &mut u64, + address_swap_map: &AddressSwapMap, ) -> Result<()> { let foundry_data = foundry_data .get(&output.token_id()) @@ -54,7 +55,7 @@ pub(super) fn verify_foundry_output( .as_coin_maybe() .ok_or_else(|| anyhow!("expected a coin"))?; - verify_address_owner(alias_address, created_coin_obj, "coin")?; + verify_address_owner(alias_address, created_coin_obj, "coin", address_swap_map)?; verify_coin(output.amount(), &created_coin)?; *total_value += created_coin.value(); @@ -239,6 +240,7 @@ pub(super) fn verify_foundry_output( alias_address, coin_manager_treasury_cap_obj, "coin manager treasury cap", + address_swap_map, )?; verify_parent(&output_id, alias_address, storage)?; diff --git a/crates/iota-genesis-builder/src/stardust/migration/verification/mod.rs b/crates/iota-genesis-builder/src/stardust/migration/verification/mod.rs index b2d506680f6..983b19edc96 100644 --- a/crates/iota-genesis-builder/src/stardust/migration/verification/mod.rs +++ b/crates/iota-genesis-builder/src/stardust/migration/verification/mod.rs @@ -11,7 +11,10 @@ use iota_sdk::types::block::output::{Output, OutputId, TokenId}; use iota_types::in_memory_storage::InMemoryStorage; use self::created_objects::CreatedObjects; -use crate::stardust::{migration::executor::FoundryLedgerData, types::output_header::OutputHeader}; +use crate::stardust::{ + migration::executor::FoundryLedgerData, + types::{address_swap_map::AddressSwapMap, output_header::OutputHeader}, +}; pub mod alias; pub mod basic; @@ -27,6 +30,7 @@ pub(crate) fn verify_outputs<'a>( target_milestone_timestamp: u32, total_supply: u64, storage: &InMemoryStorage, + address_swap_map: &AddressSwapMap, ) -> anyhow::Result<()> { let mut total_value = 0; for (header, output) in outputs { @@ -41,6 +45,7 @@ pub(crate) fn verify_outputs<'a>( target_milestone_timestamp, storage, &mut total_value, + address_swap_map, )?; } ensure!( @@ -58,6 +63,7 @@ fn verify_output( target_milestone_timestamp: u32, storage: &InMemoryStorage, total_value: &mut u64, + address_swap_map: &AddressSwapMap, ) -> anyhow::Result<()> { match output { Output::Alias(output) => alias::verify_alias_output( @@ -67,6 +73,7 @@ fn verify_output( foundry_data, storage, total_value, + address_swap_map, ), Output::Basic(output) => basic::verify_basic_output( header.output_id(), @@ -76,6 +83,7 @@ fn verify_output( target_milestone_timestamp, storage, total_value, + address_swap_map, ), Output::Foundry(output) => foundry::verify_foundry_output( header.output_id(), @@ -84,6 +92,7 @@ fn verify_output( foundry_data, storage, total_value, + address_swap_map, ), Output::Nft(output) => nft::verify_nft_output( header.output_id(), @@ -92,6 +101,7 @@ fn verify_output( foundry_data, storage, total_value, + address_swap_map, ), // Treasury outputs aren't used since Stardust, so no need to verify anything here. Output::Treasury(_) => return Ok(()), diff --git a/crates/iota-genesis-builder/src/stardust/migration/verification/nft.rs b/crates/iota-genesis-builder/src/stardust/migration/verification/nft.rs index 04ac251af6d..2d2bdc6fccb 100644 --- a/crates/iota-genesis-builder/src/stardust/migration/verification/nft.rs +++ b/crates/iota-genesis-builder/src/stardust/migration/verification/nft.rs @@ -15,17 +15,20 @@ use iota_types::{ stardust::output::{NFT_DYNAMIC_OBJECT_FIELD_KEY, NFT_DYNAMIC_OBJECT_FIELD_KEY_TYPE}, }; -use crate::stardust::migration::{ - executor::FoundryLedgerData, - verification::{ - created_objects::CreatedObjects, - util::{ - verify_address_owner, verify_expiration_unlock_condition, verify_issuer_feature, - verify_metadata_feature, verify_native_tokens, verify_parent, verify_sender_feature, - verify_storage_deposit_unlock_condition, verify_tag_feature, - verify_timelock_unlock_condition, +use crate::stardust::{ + migration::{ + executor::FoundryLedgerData, + verification::{ + created_objects::CreatedObjects, + util::{ + verify_address_owner, verify_expiration_unlock_condition, verify_issuer_feature, + verify_metadata_feature, verify_native_tokens, verify_parent, + verify_sender_feature, verify_storage_deposit_unlock_condition, verify_tag_feature, + verify_timelock_unlock_condition, + }, }, }, + types::address_swap_map::AddressSwapMap, }; pub(super) fn verify_nft_output( @@ -35,6 +38,7 @@ pub(super) fn verify_nft_output( foundry_data: &HashMap<TokenId, FoundryLedgerData>, storage: &InMemoryStorage, total_value: &mut u64, + address_swap_map: &AddressSwapMap, ) -> anyhow::Result<()> { let created_output_obj = created_objects.output().and_then(|id| { storage @@ -61,7 +65,12 @@ pub(super) fn verify_nft_output( created_output_obj.owner, ); } else { - verify_address_owner(output.address(), created_output_obj, "nft output")?; + verify_address_owner( + output.address(), + created_output_obj, + "nft output", + address_swap_map, + )?; } // NFT Owner diff --git a/crates/iota-genesis-builder/src/stardust/migration/verification/util.rs b/crates/iota-genesis-builder/src/stardust/migration/verification/util.rs index ea1672f6942..5c62e3fc8e7 100644 --- a/crates/iota-genesis-builder/src/stardust/migration/verification/util.rs +++ b/crates/iota-genesis-builder/src/stardust/migration/verification/util.rs @@ -22,13 +22,14 @@ use iota_types::{ object::{Object, Owner}, stardust::{ output::{Alias, Nft, unlock_conditions}, - stardust_to_iota_address, stardust_to_iota_address_owner, + stardust_to_iota_address, }, }; use tracing::warn; use crate::stardust::{ - migration::executor::FoundryLedgerData, types::token_scheme::MAX_ALLOWED_U64_SUPPLY, + migration::executor::FoundryLedgerData, + types::{address_swap_map::AddressSwapMap, token_scheme::MAX_ALLOWED_U64_SUPPLY}, }; pub(super) fn verify_native_tokens<NtKind: NativeTokenKind>( @@ -279,8 +280,10 @@ pub(super) fn verify_address_owner( owning_address: &Address, obj: &Object, name: &str, + address_swap_map: &AddressSwapMap, ) -> Result<()> { - let expected_owner = stardust_to_iota_address_owner(owning_address)?; + let expected_owner = address_swap_map.stardust_to_iota_address_owner(owning_address)?; + ensure!( obj.owner == expected_owner, "{name} owner mismatch: found {}, expected {}", diff --git a/crates/iota-genesis-builder/src/stardust/types/address_swap_map.rs b/crates/iota-genesis-builder/src/stardust/types/address_swap_map.rs new file mode 100644 index 00000000000..7dae6fb6e00 --- /dev/null +++ b/crates/iota-genesis-builder/src/stardust/types/address_swap_map.rs @@ -0,0 +1,255 @@ +// Copyright (c) 2024 IOTA Stiftung +// SPDX-License-Identifier: Apache-2.0 + +use std::collections::HashMap; + +use iota_sdk::types::block::address::Address as StardustAddress; +use iota_types::{base_types::IotaAddress, object::Owner, stardust::stardust_to_iota_address}; + +type OriginAddress = IotaAddress; + +#[derive(Debug)] +pub struct DestinationAddress { + address: IotaAddress, + swapped: bool, +} + +impl DestinationAddress { + fn new(address: IotaAddress) -> Self { + Self { + address, + swapped: false, + } + } + + fn address(&self) -> IotaAddress { + self.address + } + + fn is_swapped(&self) -> bool { + self.swapped + } + + fn set_swapped(&mut self) { + self.swapped = true; + } +} + +#[derive(Debug, Default)] +pub struct AddressSwapMap { + addresses: HashMap<OriginAddress, DestinationAddress>, +} + +impl AddressSwapMap { + /// Retrieves the destination address for a given origin address. + pub fn destination_address(&self, origin_address: &OriginAddress) -> Option<IotaAddress> { + self.addresses + .get(origin_address) + .map(DestinationAddress::address) + } + + /// Retrieves the destination address for a given origin address. + /// Marks the origin address as swapped if found. + fn swap_destination_address(&mut self, origin_address: &OriginAddress) -> Option<IotaAddress> { + self.addresses.get_mut(origin_address).map(|destination| { + // Mark the origin address as swapped + destination.set_swapped(); + destination.address() + }) + } + + /// Verifies that all addresses have been swapped at least once. + /// Returns an error if any address is not swapped. + pub fn verify_all_addresses_swapped(&self) -> anyhow::Result<()> { + let unswapped_addresses = self + .addresses + .values() + .filter_map(|a| (!a.is_swapped()).then_some(a.address())) + .collect::<Vec<_>>(); + if !unswapped_addresses.is_empty() { + anyhow::bail!("unswapped addresses: {:?}", unswapped_addresses); + } + + Ok(()) + } + + /// Converts a [`StardustAddress`] to an [`Owner`] by first + /// converting it to an [`IotaAddress`] and then checking against the + /// swap map for potential address substitutions. + /// + /// If the address exists in the swap map, it is swapped with the + /// mapped destination address before being wrapped into an [`Owner`]. + pub fn stardust_to_iota_address_owner( + &self, + stardust_address: impl Into<StardustAddress>, + ) -> anyhow::Result<Owner> { + let mut address = stardust_to_iota_address(stardust_address)?; + if let Some(addr) = self.destination_address(&address) { + address = addr; + } + Ok(Owner::AddressOwner(address)) + } + + /// Converts a [`StardustAddress`] to an [`Owner`] by first + /// converting it to an [`IotaAddress`] and then checking against the + /// swap map for potential address substitutions. + /// + /// If the address exists in the swap map, it is swapped with the + /// mapped destination address before being wrapped into an [`Owner`]. + pub fn swap_stardust_to_iota_address_owner( + &mut self, + stardust_address: impl Into<StardustAddress>, + ) -> anyhow::Result<Owner> { + let mut address = stardust_to_iota_address(stardust_address)?; + if let Some(addr) = self.swap_destination_address(&address) { + address = addr; + } + Ok(Owner::AddressOwner(address)) + } + + /// Converts a [`StardustAddress`] to an [`IotaAddress`] and + /// checks against the swap map for potential address + /// substitutions. + /// + /// If the address exists in the swap map, it is swapped with the + /// mapped destination address before being returned as an + /// [`IotaAddress`]. + pub fn swap_stardust_to_iota_address( + &mut self, + stardust_address: impl Into<StardustAddress>, + ) -> anyhow::Result<IotaAddress> { + let mut address: IotaAddress = stardust_to_iota_address(stardust_address)?; + if let Some(addr) = self.swap_destination_address(&address) { + address = addr; + } + Ok(address) + } + + /// Initializes an [`AddressSwapMap`] by reading address pairs from a CSV + /// file. + /// + /// The function expects the file to contain two columns: the origin address + /// (first column) and the destination address (second column). These are + /// parsed into a [`HashMap`] that maps origin addresses to tuples + /// containing the destination address and a flag initialized to + /// `false`. + /// + /// # Example CSV File + /// ```csv + /// Origin,Destination + /// iota1qp8h9augeh6tk3uvlxqfapuwv93atv63eqkpru029p6sgvr49eufyz7katr,0xa12b4d6ec3f9a28437d5c8f3e96ba72d3c4e8f5ac98d17b1a3b8e9f2c71d4a3c + /// iota1qp7h2lkjhs6tk3uvlxqfjhlfw34atv63eqkpru356p6sgvr76eufyz1opkh,0x42d8c182eb1f3b2366d353eed4eb02a31d1d7982c0fd44683811d7036be3a85e + /// ``` + /// + /// # Parameters + /// - `file_path`: The relative path to the CSV file containing the address + /// mappings. + /// + /// # Returns + /// - An [`AddressSwapMap`] containing the parsed mappings. + /// + /// # Errors + /// - Returns an error if the file cannot be found, read, or parsed + /// correctly. + /// - Returns an error if the origin or destination addresses cannot be + /// parsed into an [`IotaAddress`]. + pub fn from_csv(file_path: &str) -> Result<AddressSwapMap, anyhow::Error> { + let current_dir = std::env::current_dir()?; + let file_path = current_dir.join(file_path); + let mut reader = csv::ReaderBuilder::new().from_path(file_path)?; + let mut addresses = HashMap::new(); + + verify_headers(reader.headers()?)?; + + for result in reader.records() { + let record = result?; + let origin: OriginAddress = + stardust_to_iota_address(StardustAddress::try_from_bech32(&record[0])?)?; + let destination: DestinationAddress = DestinationAddress::new(record[1].parse()?); + addresses.insert(origin, destination); + } + + Ok(AddressSwapMap { addresses }) + } + + #[cfg(test)] + pub fn addresses(&self) -> &HashMap<OriginAddress, DestinationAddress> { + &self.addresses + } +} + +fn verify_headers(headers: &csv::StringRecord) -> Result<(), anyhow::Error> { + const LEFT_HEADER: &str = "Origin"; + const RIGHT_HEADER: &str = "Destination"; + + if &headers[0] != LEFT_HEADER && &headers[1] != RIGHT_HEADER { + anyhow::bail!("Invalid CSV headers"); + } + Ok(()) +} + +#[cfg(test)] +mod tests { + use std::io::Write; + + use tempfile::NamedTempFile; + + use crate::stardust::types::address_swap_map::AddressSwapMap; + + fn write_temp_file(content: &str) -> NamedTempFile { + let mut file = NamedTempFile::new().unwrap(); + writeln!(file, "{}", content).unwrap(); + file + } + + #[test] + fn test_from_csv_valid_file() { + let content = "Origin,Destination\n\ + iota1qp8h9augeh6tk3uvlxqfapuwv93atv63eqkpru029p6sgvr49eufyz7katr,0xa12b4d6ec3f9a28437d5c8f3e96ba72d3c4e8f5ac98d17b1a3b8e9f2c71d4a3c"; + let file = write_temp_file(content); + let file_path = file.path().to_str().unwrap(); + let result = AddressSwapMap::from_csv(file_path); + assert!(result.is_ok()); + let map = result.unwrap(); + assert_eq!(map.addresses().len(), 1); + } + + #[test] + fn test_from_csv_missing_file() { + let result = AddressSwapMap::from_csv("nonexistent_file.csv"); + assert!(result.is_err()); + } + + #[test] + fn test_from_csv_invalid_headers() { + let content = "wrong_header1,wrong_header2\n\ + iota1qp8h9augeh6tk3uvlxqfapuwv93atv63eqkpru029p6sgvr49eufyz7katr,0xa12b4d6ec3f9a28437d5c8f3e96ba72d3c4e8f5ac98d17b1a3b8e9f2c71d4a3c"; + let file = write_temp_file(content); + let file_path = file.path().to_str().unwrap(); + let result = AddressSwapMap::from_csv(file_path); + assert!(result.is_err()); + } + + #[test] + fn test_from_csv_invalid_record() { + let content = "Origin,Destination\n\ + iota1qp8h9augeh6tk3uvlxqfapuwv93atv63eqkpru029p6sgvr49eufyz7katr,0xa12b4d6ec3f9a28437d5c8f3e96ba72d3c4e8f5ac98d17b1a3b8e9f2c71d4a3c,invalid_number"; + let file = write_temp_file(content); + let file_path = file.path().to_str().unwrap(); + let result = AddressSwapMap::from_csv(file_path); + + assert!(result.is_err()); + } + + #[test] + fn test_from_csv_empty_file() { + let content = "Origin,Destination"; + let file = write_temp_file(content); + let file_path = file.path().to_str().unwrap(); + let result = AddressSwapMap::from_csv(file_path); + assert!(result.is_ok()); + let map = result.unwrap(); + + assert_eq!(map.addresses().len(), 0); + } +} diff --git a/crates/iota-genesis-builder/src/stardust/types/mod.rs b/crates/iota-genesis-builder/src/stardust/types/mod.rs index cf2a0681889..49ea9368cf5 100644 --- a/crates/iota-genesis-builder/src/stardust/types/mod.rs +++ b/crates/iota-genesis-builder/src/stardust/types/mod.rs @@ -1,6 +1,7 @@ // Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 +pub mod address_swap_map; pub mod output_header; pub mod output_index; pub mod snapshot; From 415e2471cf434141ddbb9d644f24d6d8c623f1d4 Mon Sep 17 00:00:00 2001 From: cpl121 <100352899+cpl121@users.noreply.github.com> Date: Thu, 12 Dec 2024 09:24:38 +0100 Subject: [PATCH 03/28] feat: add loading screen (#4445) --- apps/wallet-dashboard/app/page.tsx | 84 ++++++++++++++++-------------- 1 file changed, 45 insertions(+), 39 deletions(-) diff --git a/apps/wallet-dashboard/app/page.tsx b/apps/wallet-dashboard/app/page.tsx index c96c01faec9..8901eec400a 100644 --- a/apps/wallet-dashboard/app/page.tsx +++ b/apps/wallet-dashboard/app/page.tsx @@ -3,17 +3,21 @@ 'use client'; -import { ConnectButton, useCurrentAccount, useCurrentWallet } from '@iota/dapp-kit'; -import { useEffect } from 'react'; +import { ConnectButton, useCurrentWallet, useAutoConnectWallet } from '@iota/dapp-kit'; import { redirect } from 'next/navigation'; import { IotaLogoWeb } from '@iota/ui-icons'; import { HOMEPAGE_ROUTE } from '@/lib/constants/routes.constants'; import { Theme, useTheme } from '@iota/core'; +import { LoadingIndicator } from '@iota/apps-ui-kit'; function HomeDashboardPage(): JSX.Element { const { theme } = useTheme(); - const { connectionStatus } = useCurrentWallet(); - const account = useCurrentAccount(); + const { isConnected } = useCurrentWallet(); + const autoConnect = useAutoConnectWallet(); + + if (isConnected) { + redirect(HOMEPAGE_ROUTE.path); + } const CURRENT_YEAR = new Date().getFullYear(); const videoSrc = @@ -21,45 +25,47 @@ function HomeDashboardPage(): JSX.Element { ? 'https://files.iota.org/media/tooling/wallet-dashboard-welcome-dark.mp4' : 'https://files.iota.org/media/tooling/wallet-dashboard-welcome-light.mp4'; - useEffect(() => { - if (connectionStatus === 'connected' && account) { - redirect(HOMEPAGE_ROUTE.path); - } - }, [connectionStatus, account]); - return ( <main className="flex h-screen"> - <div className="relative hidden sm:flex md:w-1/3"> - <video - key={theme} - src={videoSrc} - autoPlay - muted - loop - className="absolute right-0 top-0 h-full w-full min-w-fit object-cover" - disableRemotePlayback - ></video> - </div> - <div className="flex h-full w-full flex-col items-center justify-between p-md sm:p-2xl"> - <IotaLogoWeb width={130} height={32} /> - <div className="flex max-w-sm flex-col items-center gap-8 text-center"> - <div className="flex flex-col items-center gap-4"> - <span className="text-headline-sm text-neutral-40">Welcome to</span> - <h1 className="text-display-lg text-neutral-10 dark:text-neutral-100"> - IOTA Wallet - </h1> - <span className="text-title-lg text-neutral-40"> - Connecting you to the decentralized web and IOTA network - </span> + {autoConnect === 'idle' ? ( + <div className="flex w-full justify-center"> + <LoadingIndicator size="w-16 h-16" /> + </div> + ) : ( + <> + <div className="relative hidden sm:flex md:w-1/3"> + <video + key={theme} + src={videoSrc} + autoPlay + muted + loop + className="absolute right-0 top-0 h-full w-full min-w-fit object-cover" + disableRemotePlayback + ></video> </div> - <div className="[&_button]:!bg-neutral-90 [&_button]:dark:!bg-neutral-20"> - <ConnectButton connectText="Connect" /> + <div className="flex h-full w-full flex-col items-center justify-between p-md sm:p-2xl"> + <IotaLogoWeb width={130} height={32} /> + <div className="flex max-w-sm flex-col items-center gap-8 text-center"> + <div className="flex flex-col items-center gap-4"> + <span className="text-headline-sm text-neutral-40">Welcome to</span> + <h1 className="text-display-lg text-neutral-10 dark:text-neutral-100"> + IOTA Wallet + </h1> + <span className="text-title-lg text-neutral-40"> + Connecting you to the decentralized web and IOTA network + </span> + </div> + <div className="[&_button]:!bg-neutral-90 [&_button]:dark:!bg-neutral-20"> + <ConnectButton connectText="Connect" /> + </div> + </div> + <div className="text-body-lg text-neutral-60"> + © IOTA Foundation {CURRENT_YEAR} + </div> </div> - </div> - <div className="text-body-lg text-neutral-60"> - © IOTA Foundation {CURRENT_YEAR} - </div> - </div> + </> + )} </main> ); } From f6c35ae4406e69ef6e9841346be5089e071621e3 Mon Sep 17 00:00:00 2001 From: Dr-Electron <dr-electr0n@protonmail.com> Date: Thu, 12 Dec 2024 09:25:54 +0100 Subject: [PATCH 04/28] fix: Override package.json ownership in external crates (#4464) * fix: Override package.json ownership in external crates * Update .github/CODEOWNERS --- .github/CODEOWNERS | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f77a9c2b71b..38bb6687fd2 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -7,10 +7,6 @@ # Changes to the genesis builder should be approved by Konstantinos or Mirko at least /crates/iota-genesis-builder/ @kodemartin @miker83z -# vm-language team -/iota-execution/ @iotaledger/vm-language -/external-crates/ @iotaledger/vm-language - # infrastructure team /docker/ @iotaledger/infrastructure @iotaledger/node @iotaledger/devops-admin /crates/iota-json-rpc*/ @iotaledger/infrastructure @@ -61,6 +57,11 @@ prettier.config.js @iotaledger/tooling turbo.json @iotaledger/tooling vercel.json @iotaledger/tooling +# vm-language team +# Needs to be after package.json ownership definition to override it +/iota-execution/ @iotaledger/vm-language +/external-crates/ @iotaledger/vm-language + # Docs and examples are for DevEx to approve upon /docs/ @iotaledger/devx /examples/ @iotaledger/devx From f11d8ccf59bc9c172890f50bd700ae110e51a71a Mon Sep 17 00:00:00 2001 From: Thibault Martinez <thibault@iota.org> Date: Thu, 12 Dec 2024 09:27:46 +0100 Subject: [PATCH 05/28] chore(ci): remove `tag-docker-hub-images` (#4441) * chore(ci): remove `tag-docker-hub-images` * fmt --- .github/workflows/release.yml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f96bae10dc4..cd3e0cc9b07 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -228,15 +228,3 @@ jobs: # env: # # https://github.com/settings/tokens/new?scopes=public_repo,workflow # COMMITTER_TOKEN: ${{ secrets.HOMEBREW_GH_FORMULA_BUMP }} -# -# # Tag all iota images with release tag, so that they can be easily found -# tag-docker-hub-images: -# runs-on: ubuntu-latest -# steps: -# - name: Dispatch Tagging of images in DockerHub, in MystenLabs/sui-operations -# uses: peter-evans/repository-dispatch@ff45666b9427631e3450c54a1bcbee4d9ff4d7c0 # v3.0.0 -# with: -# repository: iotaledger/iota -# token: ${{ secrets.DOCKER_BINARY_BUILDS_DISPATCH }} -# event-type: tag-docker-images -# client-payload: '{"iota_commit": "${{ github.sha }}", "repo_name": "all", "tag": "${{ env.TAG_NAME }}"}' From c477d40a1019a98cc8b6d0e373bc4e2e57f794e5 Mon Sep 17 00:00:00 2001 From: JCNoguera <88061365+VmMad@users.noreply.github.com> Date: Thu, 12 Dec 2024 10:55:29 +0100 Subject: [PATCH 06/28] feat(dashboard): add migration overview (#4329) * feat(dashboard): add migration overview * feat: refine values * fix: update summarizeMigratableObjectValues function --- .../app/(protected)/migrations/page.tsx | 154 ++++++++++++------ apps/wallet-dashboard/lib/utils/migration.ts | 60 ++++++- 2 files changed, 163 insertions(+), 51 deletions(-) diff --git a/apps/wallet-dashboard/app/(protected)/migrations/page.tsx b/apps/wallet-dashboard/app/(protected)/migrations/page.tsx index 4d5324ac6e2..544f352e963 100644 --- a/apps/wallet-dashboard/app/(protected)/migrations/page.tsx +++ b/apps/wallet-dashboard/app/(protected)/migrations/page.tsx @@ -2,14 +2,32 @@ // SPDX-License-Identifier: Apache-2.0 'use client'; -import { VirtualList } from '@/components'; import MigratePopup from '@/components/Popup/Popups/MigratePopup'; -import { useGetStardustMigratableObjects, usePopups } from '@/hooks'; -import { Button } from '@iota/apps-ui-kit'; -import { useCurrentAccount, useIotaClient, useIotaClientContext } from '@iota/dapp-kit'; -import { STARDUST_BASIC_OUTPUT_TYPE, STARDUST_NFT_OUTPUT_TYPE } from '@iota/core'; -import { getNetwork, IotaObjectData } from '@iota/iota-sdk/client'; +import { usePopups } from '@/hooks'; +import { summarizeMigratableObjectValues } from '@/lib/utils'; +import { + Button, + ButtonSize, + ButtonType, + Card, + CardBody, + CardImage, + ImageShape, + Panel, + Title, +} from '@iota/apps-ui-kit'; +import { useCurrentAccount, useIotaClient } from '@iota/dapp-kit'; +import { STARDUST_BASIC_OUTPUT_TYPE, STARDUST_NFT_OUTPUT_TYPE, useFormatCoin } from '@iota/core'; +import { useGetStardustMigratableObjects } from '@/hooks'; import { useQueryClient } from '@tanstack/react-query'; +import { Assets, Clock, IotaLogoMark, Tokens } from '@iota/ui-icons'; +import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; + +interface MigrationDisplayCard { + title: string; + subtitle: string; + icon: React.FC; +} function MigrationDashboardPage(): JSX.Element { const account = useCurrentAccount(); @@ -17,8 +35,6 @@ function MigrationDashboardPage(): JSX.Element { const { openPopup, closePopup } = usePopups(); const queryClient = useQueryClient(); const iotaClient = useIotaClient(); - const { network } = useIotaClientContext(); - const { explorer } = getNetwork(network); const { migratableBasicOutputs, @@ -30,12 +46,6 @@ function MigrationDashboardPage(): JSX.Element { const hasMigratableObjects = migratableBasicOutputs.length > 0 || migratableNftOutputs.length > 0; - const virtualItem = (asset: IotaObjectData): JSX.Element => ( - <a href={`${explorer}/object/${asset.objectId}`} target="_blank" rel="noreferrer"> - {asset.objectId} - </a> - ); - function handleOnSuccess(digest: string): void { iotaClient .waitForTransaction({ @@ -73,41 +83,93 @@ function MigrationDashboardPage(): JSX.Element { ); } + const { + accumulatedIotaAmount: accumulatedTimelockedIotaAmount, + totalNativeTokens, + totalVisualAssets, + } = summarizeMigratableObjectValues({ + migratableBasicOutputs, + migratableNftOutputs, + address, + }); + + const [timelockedIotaTokens, symbol] = useFormatCoin( + accumulatedTimelockedIotaAmount, + IOTA_TYPE_ARG, + ); + + const MIGRATION_CARDS: MigrationDisplayCard[] = [ + { + title: `${timelockedIotaTokens} ${symbol}`, + subtitle: 'IOTA Tokens', + icon: IotaLogoMark, + }, + { + title: `${totalNativeTokens}`, + subtitle: 'Native Tokens', + icon: Tokens, + }, + { + title: `${totalVisualAssets}`, + subtitle: 'Visual Assets', + icon: Assets, + }, + ]; + + const timelockedAssetsAmount = unmigratableBasicOutputs.length + unmigratableNftOutputs.length; + const TIMELOCKED_ASSETS_CARDS: MigrationDisplayCard[] = [ + { + title: `${timelockedAssetsAmount}`, + subtitle: 'Time-locked', + icon: Clock, + }, + ]; + return ( <div className="flex h-full w-full flex-wrap items-center justify-center space-y-4"> - <div className="flex w-1/2 flex-col"> - <h1>Migratable Basic Outputs: {migratableBasicOutputs.length}</h1> - <VirtualList - items={migratableBasicOutputs} - estimateSize={() => 30} - render={virtualItem} - /> - </div> - <div className="flex w-1/2 flex-col"> - <h1>Unmigratable Basic Outputs: {unmigratableBasicOutputs.length}</h1> - <VirtualList - items={unmigratableBasicOutputs} - estimateSize={() => 30} - render={virtualItem} - /> - </div> - <div className="flex w-1/2 flex-col"> - <h1>Migratable NFT Outputs: {migratableNftOutputs.length}</h1> - <VirtualList - items={migratableNftOutputs} - estimateSize={() => 30} - render={virtualItem} - /> - </div> - <div className="flex w-1/2 flex-col"> - <h1>Unmigratable NFT Outputs: {unmigratableNftOutputs.length}</h1> - <VirtualList - items={unmigratableNftOutputs} - estimateSize={() => 30} - render={virtualItem} - /> + <div className="flex w-full flex-row justify-center"> + <div className="flex w-1/3 flex-col gap-md--rs"> + <Panel> + <Title + title="Migration" + trailingElement={ + <Button + text="Migrate All" + disabled={!hasMigratableObjects} + onClick={openMigratePopup} + size={ButtonSize.Small} + /> + } + /> + <div className="flex flex-col gap-xs p-md--rs"> + {MIGRATION_CARDS.map((card) => ( + <Card key={card.subtitle}> + <CardImage shape={ImageShape.SquareRounded}> + <card.icon /> + </CardImage> + <CardBody title={card.title} subtitle={card.subtitle} /> + </Card> + ))} + <Button text="See All" type={ButtonType.Ghost} fullWidth /> + </div> + </Panel> + + <Panel> + <Title title="Time-locked Assets" /> + <div className="flex flex-col gap-xs p-md--rs"> + {TIMELOCKED_ASSETS_CARDS.map((card) => ( + <Card key={card.subtitle}> + <CardImage shape={ImageShape.SquareRounded}> + <card.icon /> + </CardImage> + <CardBody title={card.title} subtitle={card.subtitle} /> + </Card> + ))} + <Button text="See All" type={ButtonType.Ghost} fullWidth /> + </div> + </Panel> + </div> </div> - <Button text="Migrate" disabled={!hasMigratableObjects} onClick={openMigratePopup} /> </div> ); } diff --git a/apps/wallet-dashboard/lib/utils/migration.ts b/apps/wallet-dashboard/lib/utils/migration.ts index 49f54b89867..ee129d4d211 100644 --- a/apps/wallet-dashboard/lib/utils/migration.ts +++ b/apps/wallet-dashboard/lib/utils/migration.ts @@ -20,17 +20,14 @@ export function groupStardustObjectsByMigrationStatus( const epochUnix = epochTimestamp / 1000; for (const outputObject of stardustOutputObjects) { - const outputObjectFields = ( - outputObject.content as unknown as { - fields: CommonOutputObjectWithUc; - } - ).fields; + const outputObjectFields = extractOutputFields(outputObject); if (outputObjectFields.expiration_uc) { const unlockableAddress = outputObjectFields.expiration_uc.fields.unix_time <= epochUnix ? outputObjectFields.expiration_uc.fields.return_address : outputObjectFields.expiration_uc.fields.owner; + if (unlockableAddress !== address) { unmigratable.push(outputObject); continue; @@ -49,3 +46,56 @@ export function groupStardustObjectsByMigrationStatus( return { migratable, unmigratable }; } + +interface MigratableObjectsData { + totalNativeTokens: number; + totalVisualAssets: number; + accumulatedIotaAmount: number; +} + +export function summarizeMigratableObjectValues({ + migratableBasicOutputs, + migratableNftOutputs, + address, +}: { + migratableBasicOutputs: IotaObjectData[]; + migratableNftOutputs: IotaObjectData[]; + address: string; +}): MigratableObjectsData { + let totalNativeTokens = 0; + let totalIotaAmount = 0; + + const totalVisualAssets = migratableNftOutputs.length; + const outputObjects = [...migratableBasicOutputs, ...migratableNftOutputs]; + + for (const output of outputObjects) { + const outputObjectFields = extractOutputFields(output); + + totalIotaAmount += parseInt(outputObjectFields.balance); + totalNativeTokens += parseInt(outputObjectFields.native_tokens.fields.size); + totalIotaAmount += extractStorageDepositReturnAmount(outputObjectFields, address) || 0; + } + + return { totalNativeTokens, totalVisualAssets, accumulatedIotaAmount: totalIotaAmount }; +} + +function extractStorageDepositReturnAmount( + { storage_deposit_return_uc }: CommonOutputObjectWithUc, + address: string, +): number | null { + if ( + storage_deposit_return_uc?.fields && + storage_deposit_return_uc?.fields.return_address === address + ) { + return parseInt(storage_deposit_return_uc?.fields.return_amount); + } + return null; +} + +function extractOutputFields(outputObject: IotaObjectData): CommonOutputObjectWithUc { + return ( + outputObject.content as unknown as { + fields: CommonOutputObjectWithUc; + } + ).fields; +} From 3090a3b79d19b53d3fbc0500bbd3627a9572ee21 Mon Sep 17 00:00:00 2001 From: Marc Espin <mespinsanz@gmail.com> Date: Thu, 12 Dec 2024 11:34:43 +0100 Subject: [PATCH 07/28] fix(pnpm): Update happy-dom to 15.11.7 (#4468) --- apps/explorer/package.json | 2 +- apps/wallet/package.json | 2 +- pnpm-lock.yaml | 889 ++++++++++++++++++++----------------- 3 files changed, 475 insertions(+), 418 deletions(-) diff --git a/apps/explorer/package.json b/apps/explorer/package.json index 7b26ec2aff6..8982b0a9d72 100644 --- a/apps/explorer/package.json +++ b/apps/explorer/package.json @@ -86,7 +86,7 @@ "@vitejs/plugin-react": "^4.3.1", "@vitest/ui": "^0.33.0", "autoprefixer": "^10.4.19", - "happy-dom": "^10.5.1", + "happy-dom": "^15.11.7", "onchange": "^7.1.0", "postcss": "^8.4.31", "start-server-and-test": "^2.0.0", diff --git a/apps/wallet/package.json b/apps/wallet/package.json index c652c639d4c..a240f6170bb 100644 --- a/apps/wallet/package.json +++ b/apps/wallet/package.json @@ -63,7 +63,7 @@ "dotenv": "^16.4.5", "eslint-webpack-plugin": "^4.0.1", "git-rev-sync": "^3.0.2", - "happy-dom": "^10.5.1", + "happy-dom": "^15.11.7", "html-webpack-plugin": "^5.5.3", "mini-css-extract-plugin": "^2.7.6", "onchange": "^7.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d1595c130be..5233dee99b1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -59,7 +59,7 @@ importers: version: 9.1.0(eslint@8.57.1) eslint-import-resolver-typescript: specifier: ^3.6.1 - version: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1) + version: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1) eslint-plugin-header: specifier: ^3.1.1 version: 3.1.1(eslint@8.57.1) @@ -119,7 +119,7 @@ importers: version: link:../../sdk/typescript '@nestjs/cache-manager': specifier: ^2.2.2 - version: 2.2.2(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.4)(cache-manager@5.7.6)(rxjs@7.8.1) + version: 2.2.2(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.4(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.4)(reflect-metadata@0.2.2)(rxjs@7.8.1))(cache-manager@5.7.6)(rxjs@7.8.1) '@nestjs/common': specifier: ^10.0.0 version: 10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1) @@ -134,7 +134,7 @@ importers: version: 10.4.4(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.4) '@nestjs/schedule': specifier: ^4.0.2 - version: 4.1.1(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.4) + version: 4.1.1(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.4(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.4)(reflect-metadata@0.2.2)(rxjs@7.8.1)) cache-manager: specifier: ^5.6.1 version: 5.7.6 @@ -144,13 +144,13 @@ importers: devDependencies: '@nestjs/cli': specifier: ^10.0.0 - version: 10.4.5(@swc/core@1.7.28(@swc/helpers@0.5.5)) + version: 10.4.5(@swc/core@1.7.28) '@nestjs/schematics': specifier: ^10.0.0 version: 10.1.4(chokidar@3.6.0)(typescript@5.6.2) '@nestjs/testing': specifier: ^10.0.0 - version: 10.4.4(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.4)(@nestjs/platform-express@10.4.4) + version: 10.4.4(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.4(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.4)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.4(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.4)) '@types/express': specifier: ^4.17.17 version: 4.17.21 @@ -180,7 +180,7 @@ importers: version: 5.2.1(@types/eslint@8.56.12)(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3) jest: specifier: ^29.5.0 - version: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)) + version: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)) prettier: specifier: ^3.3.1 version: 3.3.3 @@ -192,13 +192,13 @@ importers: version: 6.3.4 ts-jest: specifier: ^29.1.0 - version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)))(typescript@5.6.2) + version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)))(typescript@5.6.2) ts-loader: specifier: ^9.4.4 - version: 9.5.1(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + version: 9.5.1(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.7.28)) ts-node: specifier: ^10.9.1 - version: 10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2) + version: 10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2) tsconfig-paths: specifier: ^4.2.0 version: 4.2.0 @@ -277,13 +277,13 @@ importers: devDependencies: '@headlessui/tailwindcss': specifier: ^0.1.3 - version: 0.1.3(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2))) + version: 0.1.3(tailwindcss@3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2))) '@tailwindcss/aspect-ratio': specifier: ^0.4.2 - version: 0.4.2(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2))) + version: 0.4.2(tailwindcss@3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2))) '@tailwindcss/forms': specifier: ^0.5.7 - version: 0.5.9(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2))) + version: 0.5.9(tailwindcss@3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2))) '@types/react': specifier: ^18.3.3 version: 18.3.9 @@ -295,7 +295,7 @@ importers: version: 8.4.47 tailwindcss: specifier: ^3.3.3 - version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2)) + version: 3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2)) typescript: specifier: ^5.5.3 version: 5.6.2 @@ -304,7 +304,7 @@ importers: version: 5.4.8(@types/node@22.7.3)(sass@1.79.3)(terser@5.34.0) vitest: specifier: ^2.0.1 - version: 2.1.1(@types/node@22.7.3)(happy-dom@10.11.2)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) + version: 2.1.1(@types/node@22.7.3)(happy-dom@15.11.7)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) apps/explorer: dependencies: @@ -505,8 +505,8 @@ importers: specifier: ^10.4.19 version: 10.4.20(postcss@8.4.47) happy-dom: - specifier: ^10.5.1 - version: 10.11.2 + specifier: ^15.11.7 + version: 15.11.7 onchange: specifier: ^7.1.0 version: 7.1.0 @@ -518,7 +518,7 @@ importers: version: 2.0.8 tailwindcss: specifier: ^3.3.3 - version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)) + version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2)) tsconfig-paths: specifier: ^4.2.0 version: 4.2.0 @@ -533,7 +533,7 @@ importers: version: 3.3.0(rollup@4.22.4)(typescript@5.6.2)(vite@5.4.8(@types/node@20.16.9)(sass@1.79.3)(terser@5.34.0)) vitest: specifier: ^2.0.1 - version: 2.1.1(@types/node@20.16.9)(@vitest/ui@0.33.0)(happy-dom@10.11.2)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) + version: 2.1.1(@types/node@20.16.9)(@vitest/ui@0.33.0)(happy-dom@15.11.7)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) apps/ui-icons: devDependencies: @@ -645,7 +645,7 @@ importers: version: 4.0.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(storybook@7.6.20) tailwindcss: specifier: ^3.3.3 - version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)) + version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2)) typescript: specifier: ^5.5.3 version: 5.6.2 @@ -910,7 +910,7 @@ importers: version: 0.10.7 '@types/webpack': specifier: ^5.28.1 - version: 5.28.5(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack-cli@5.1.4) + version: 5.28.5(@swc/core@1.7.28)(webpack-cli@5.1.4(webpack@5.95.0)) '@types/zxcvbn': specifier: ^4.4.1 version: 4.4.5 @@ -919,31 +919,31 @@ importers: version: 4.3.1(vite@5.4.8(@types/node@20.16.9)(sass@1.79.3)(terser@5.34.0)) copy-webpack-plugin: specifier: ^11.0.0 - version: 11.0.0(webpack@5.95.0) + version: 11.0.0(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)) cross-env: specifier: ^7.0.3 version: 7.0.3 css-loader: specifier: ^6.7.3 - version: 6.11.0(webpack@5.95.0) + version: 6.11.0(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)) dotenv: specifier: ^16.4.5 version: 16.4.5 eslint-webpack-plugin: specifier: ^4.0.1 - version: 4.2.0(eslint@8.57.1)(webpack@5.95.0) + version: 4.2.0(eslint@8.57.1)(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)) git-rev-sync: specifier: ^3.0.2 version: 3.0.2 happy-dom: - specifier: ^10.5.1 - version: 10.11.2 + specifier: ^15.11.7 + version: 15.11.7 html-webpack-plugin: specifier: ^5.5.3 - version: 5.6.0(webpack@5.95.0) + version: 5.6.0(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)) mini-css-extract-plugin: specifier: ^2.7.6 - version: 2.9.1(webpack@5.95.0) + version: 2.9.1(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)) onchange: specifier: ^7.1.0 version: 7.1.0 @@ -952,7 +952,7 @@ importers: version: 8.4.47 postcss-loader: specifier: ^7.3.3 - version: 7.3.4(postcss@8.4.47)(typescript@5.6.2)(webpack@5.95.0) + version: 7.3.4(postcss@8.4.47)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)) postcss-preset-env: specifier: ^9.0.0 version: 9.6.0(postcss@8.4.47) @@ -961,19 +961,19 @@ importers: version: 1.79.3 sass-loader: specifier: ^13.3.2 - version: 13.3.3(sass@1.79.3)(webpack@5.95.0) + version: 13.3.3(sass@1.79.3)(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)) tailwindcss: specifier: ^3.3.3 - version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)) + version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2)) tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2))) + version: 1.0.7(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2))) ts-loader: specifier: ^9.4.4 - version: 9.5.1(typescript@5.6.2)(webpack@5.95.0) + version: 9.5.1(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)) ts-node: specifier: ^10.9.1 - version: 10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2) + version: 10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2) tsconfig-paths: specifier: ^4.2.0 version: 4.2.0 @@ -988,13 +988,13 @@ importers: version: 4.3.2(typescript@5.6.2)(vite@5.4.8(@types/node@20.16.9)(sass@1.79.3)(terser@5.34.0)) vitest: specifier: ^2.0.1 - version: 2.1.1(@types/node@20.16.9)(@vitest/ui@0.33.0)(happy-dom@10.11.2)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) + version: 2.1.1(@types/node@20.16.9)(@vitest/ui@0.33.0)(happy-dom@15.11.7)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) web-ext: specifier: ^7.6.2 version: 7.12.0(body-parser@1.20.3) webpack: specifier: ^5.79.0 - version: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack-cli@5.1.4) + version: 5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4) webpack-cli: specifier: ^5.0.1 version: 5.1.4(webpack@5.95.0) @@ -1067,16 +1067,16 @@ importers: version: 14.2.3(eslint@8.57.1)(typescript@5.6.2) jest: specifier: ^29.5.0 - version: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)) + version: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)) postcss: specifier: ^8.4.31 version: 8.4.47 tailwindcss: specifier: ^3.3.3 - version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)) + version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2)) ts-jest: specifier: ^29.1.0 - version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)))(typescript@5.6.2) + version: 29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)))(typescript@5.6.2) typescript: specifier: ^5.5.3 version: 5.6.2 @@ -1116,7 +1116,7 @@ importers: devDependencies: '@headlessui/tailwindcss': specifier: ^0.1.3 - version: 0.1.3(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2))) + version: 0.1.3(tailwindcss@3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2))) '@types/react': specifier: ^18.3.3 version: 18.3.9 @@ -1134,7 +1134,7 @@ importers: version: 8.4.47 tailwindcss: specifier: ^3.3.3 - version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2)) + version: 3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2)) typescript: specifier: ^5.5.3 version: 5.6.2 @@ -1228,7 +1228,7 @@ importers: devDependencies: '@tailwindcss/forms': specifier: ^0.5.7 - version: 0.5.9(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2))) + version: 0.5.9(tailwindcss@3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2))) '@tsconfig/docusaurus': specifier: ^2.0.3 version: 2.0.3 @@ -1249,10 +1249,10 @@ importers: version: 8.4.47 tailwindcss: specifier: ^3.3.3 - version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2)) + version: 3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2)) tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2))) + version: 1.0.7(tailwindcss@3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2))) typescript: specifier: ^5.5.3 version: 5.6.2 @@ -1298,7 +1298,7 @@ importers: version: 8.4.47 tailwindcss: specifier: ^3.3.3 - version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2)) + version: 3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2)) typescript: specifier: ^5.5.3 version: 5.6.2 @@ -1316,25 +1316,25 @@ importers: version: 3.6.1(@algolia/client-search@4.24.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/core': specifier: 3.5.2 - version: 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + version: 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) '@docusaurus/preset-classic': specifier: 3.5.2 - version: 3.5.2(@algolia/client-search@4.24.0)(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/react@18.3.9)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + version: 3.5.2(@algolia/client-search@4.24.0)(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@types/react@18.3.9)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) '@docusaurus/remark-plugin-npm2yarn': specifier: ^3.5.2 version: 3.5.2 '@docusaurus/theme-common': specifier: ^3.5.2 - version: 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + version: 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) '@docusaurus/theme-live-codeblock': specifier: ^3.5.2 - version: 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + version: 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) '@docusaurus/theme-mermaid': specifier: ^3.5.2 - version: 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + version: 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) '@docusaurus/theme-search-algolia': specifier: ^3.5.2 - version: 3.5.2(@algolia/client-search@4.24.0)(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/react@18.3.9)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + version: 3.5.2(@algolia/client-search@4.24.0)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@types/react@18.3.9)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) '@emotion/react': specifier: ^11.11.4 version: 11.13.3(@types/react@18.3.9)(react@18.3.1) @@ -1343,7 +1343,7 @@ importers: version: 11.13.0(@emotion/react@11.13.3(@types/react@18.3.9)(react@18.3.1))(@types/react@18.3.9)(react@18.3.1) '@graphql-markdown/docusaurus': specifier: ^1.24.1 - version: 1.26.2(@docusaurus/logger@3.5.2)(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(graphql-config@5.1.2(@types/node@22.7.3)(graphql@16.9.0)(typescript@5.6.2))(graphql@16.9.0)(prettier@3.3.3)(typescript@5.6.2) + version: 1.26.2(@docusaurus/logger@3.5.2)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(graphql-config@5.1.2(@types/node@22.7.3)(graphql@16.9.0)(typescript@5.6.2))(graphql@16.9.0)(prettier@3.3.3)(typescript@5.6.2) '@graphql-tools/graphql-file-loader': specifier: ^8.0.1 version: 8.0.1(graphql@16.9.0) @@ -1379,7 +1379,7 @@ importers: version: 3.2.0 docusaurus-theme-search-typesense: specifier: 0.20.0-0 - version: 0.20.0-0(iea5eyhbiud2dlcqtud2g4pxzm) + version: 0.20.0-0(@algolia/client-search@4.24.0)(@babel/runtime@7.25.6)(@docusaurus/core@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/theme-common@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.9)(algoliasearch@4.24.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) dotenv: specifier: ^16.4.5 version: 16.4.5 @@ -1436,7 +1436,7 @@ importers: version: 6.0.0 tailwindcss: specifier: ^3.3.3 - version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2)) + version: 3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2)) web3: specifier: ^4.2.2 version: 4.13.0(typescript@5.6.2)(zod@3.23.8) @@ -1446,13 +1446,13 @@ importers: version: 7.25.2(@babel/core@7.25.2) '@docusaurus/module-type-aliases': specifier: 3.5.2 - version: 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/tsconfig': specifier: 3.5.2 version: 3.5.2 '@docusaurus/types': specifier: 3.5.2 - version: 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@metamask/providers': specifier: ^10.2.1 version: 10.2.1 @@ -1495,7 +1495,7 @@ importers: version: 5.6.2 vitest: specifier: ^2.0.1 - version: 2.1.1(@types/node@22.7.3)(happy-dom@10.11.2)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) + version: 2.1.1(@types/node@22.7.3)(happy-dom@15.11.7)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) sdk/build-scripts: dependencies: @@ -1758,7 +1758,7 @@ importers: version: 5.4.8(@types/node@22.7.3)(sass@1.79.3)(terser@5.34.0) vitest: specifier: ^2.0.1 - version: 2.1.1(@types/node@22.7.3)(happy-dom@10.11.2)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) + version: 2.1.1(@types/node@22.7.3)(happy-dom@15.11.7)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) sdk/graphql-transport: dependencies: @@ -1813,7 +1813,7 @@ importers: version: 5.6.2 vitest: specifier: ^2.0.1 - version: 2.1.1(@types/node@20.16.9)(@vitest/ui@0.33.0)(happy-dom@10.11.2)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) + version: 2.1.1(@types/node@20.16.9)(@vitest/ui@0.33.0)(happy-dom@15.11.7)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) wait-on: specifier: ^7.2.0 version: 7.2.0 @@ -1847,7 +1847,7 @@ importers: version: 5.4.8(@types/node@22.7.3)(sass@1.79.3)(terser@5.34.0) vitest: specifier: ^2.0.1 - version: 2.1.1(@types/node@22.7.3)(happy-dom@10.11.2)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) + version: 2.1.1(@types/node@22.7.3)(happy-dom@15.11.7)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) wait-on: specifier: ^7.2.0 version: 7.2.0 @@ -1887,7 +1887,7 @@ importers: version: 5.6.2 vitest: specifier: ^2.0.1 - version: 2.1.1(@types/node@20.16.9)(@vitest/ui@0.33.0)(happy-dom@10.11.2)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) + version: 2.1.1(@types/node@20.16.9)(@vitest/ui@0.33.0)(happy-dom@15.11.7)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) sdk/move-bytecode-template: devDependencies: @@ -1902,7 +1902,7 @@ importers: version: 5.6.2 vitest: specifier: ^2.0.1 - version: 2.1.1(@types/node@22.7.3)(happy-dom@10.11.2)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) + version: 2.1.1(@types/node@22.7.3)(happy-dom@15.11.7)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) wasm-pack: specifier: ^0.13.0 version: 0.13.0 @@ -2005,7 +2005,7 @@ importers: version: 5.4.8(@types/node@20.16.9)(sass@1.79.3)(terser@5.34.0) vitest: specifier: ^2.0.1 - version: 2.1.1(@types/node@20.16.9)(@vitest/ui@0.33.0)(happy-dom@10.11.2)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) + version: 2.1.1(@types/node@20.16.9)(@vitest/ui@0.33.0)(happy-dom@15.11.7)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) wait-on: specifier: ^7.2.0 version: 7.2.0 @@ -2030,7 +2030,7 @@ importers: version: 5.6.2 typescript-json-schema: specifier: ^0.64.0 - version: 0.64.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + version: 0.64.0(@swc/core@1.7.28) packages: @@ -10823,8 +10823,9 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - happy-dom@10.11.2: - resolution: {integrity: sha512-rzgmLjLkhyaOdFEyU8CWXzbgyCyM7wJHLqhaoeEVSTyur1fjcUaiNTHx+D4CPaLvx16tGy+SBPd9TVnP/kzL3w==} + happy-dom@15.11.7: + resolution: {integrity: sha512-KyrFvnl+J9US63TEzwoiJOQzZBJY7KgBushJA8X61DMbNsH+2ONkDuLDnCnwUiPTF42tLoEmrPyoqbenVA5zrg==} + engines: {node: '>=18.0.0'} har-schema@2.0.0: resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} @@ -16508,10 +16509,6 @@ packages: resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} engines: {node: '>=0.8.0'} - whatwg-encoding@2.0.0: - resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} - engines: {node: '>=12'} - whatwg-encoding@3.1.1: resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} engines: {node: '>=18'} @@ -18503,7 +18500,7 @@ snapshots: transitivePeerDependencies: - '@algolia/client-search' - '@docusaurus/core@3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + '@docusaurus/core@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': dependencies: '@babel/core': 7.25.2 '@babel/generator': 7.25.6 @@ -18517,12 +18514,12 @@ snapshots: '@babel/traverse': 7.25.6 '@docusaurus/cssnano-preset': 3.4.0 '@docusaurus/logger': 3.4.0 - '@docusaurus/mdx-loader': 3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/mdx-loader': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) + '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) autoprefixer: 10.4.20(postcss@8.4.47) - babel-loader: 9.2.1(@babel/core@7.25.2)(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + babel-loader: 9.2.1(@babel/core@7.25.2)(webpack@5.95.0) babel-plugin-dynamic-import-node: 2.3.3 boxen: 6.2.1 chalk: 4.1.2 @@ -18531,34 +18528,34 @@ snapshots: cli-table3: 0.6.5 combine-promises: 1.2.0 commander: 5.1.0 - copy-webpack-plugin: 11.0.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + copy-webpack-plugin: 11.0.0(webpack@5.95.0) core-js: 3.38.1 - css-loader: 6.11.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) - css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + css-loader: 6.11.0(webpack@5.95.0) + css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.95.0) cssnano: 6.1.2(postcss@8.4.47) del: 6.1.1 detect-port: 1.6.1 escape-html: 1.0.3 eta: 2.2.0 eval: 0.1.8 - file-loader: 6.2.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + file-loader: 6.2.0(webpack@5.95.0) fs-extra: 11.2.0 html-minifier-terser: 7.2.0 html-tags: 3.3.1 - html-webpack-plugin: 5.6.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + html-webpack-plugin: 5.6.0(webpack@5.95.0) leven: 3.1.0 lodash: 4.17.21 - mini-css-extract-plugin: 2.9.1(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + mini-css-extract-plugin: 2.9.1(webpack@5.95.0) p-map: 4.0.0 postcss: 8.4.47 - postcss-loader: 7.3.4(postcss@8.4.47)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + postcss-loader: 7.3.4(postcss@8.4.47)(typescript@5.6.2)(webpack@5.95.0) prompts: 2.4.2 react: 18.3.1 - react-dev-utils: 12.0.1(eslint@8.57.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + react-dev-utils: 12.0.1(eslint@8.57.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.95.0) react-dom: 18.3.1(react@18.3.1) react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' - react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.95.0) react-router: 5.3.4(react@18.3.1) react-router-config: 5.1.1(react-router@5.3.4(react@18.3.1))(react@18.3.1) react-router-dom: 5.3.4(react@18.3.1) @@ -18566,15 +18563,15 @@ snapshots: semver: 7.6.3 serve-handler: 6.1.5 shelljs: 0.8.5 - terser-webpack-plugin: 5.3.10(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + terser-webpack-plugin: 5.3.10(webpack@5.95.0) tslib: 2.7.0 update-notifier: 6.0.2 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))))(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0))(webpack@5.95.0) + webpack: 5.95.0 webpack-bundle-analyzer: 4.10.2 - webpack-dev-server: 4.15.2(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + webpack-dev-server: 4.15.2(webpack@5.95.0) webpack-merge: 5.10.0 - webpackbar: 5.0.2(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + webpackbar: 5.0.2(webpack@5.95.0) transitivePeerDependencies: - '@docusaurus/types' - '@parcel/css' @@ -18594,7 +18591,7 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/core@3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + '@docusaurus/core@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': dependencies: '@babel/core': 7.25.2 '@babel/generator': 7.25.6 @@ -18608,13 +18605,13 @@ snapshots: '@babel/traverse': 7.25.6 '@docusaurus/cssnano-preset': 3.5.2 '@docusaurus/logger': 3.5.2 - '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) - '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) + '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) '@mdx-js/react': 3.0.1(@types/react@18.3.9)(react@18.3.1) autoprefixer: 10.4.20(postcss@8.4.47) - babel-loader: 9.2.1(@babel/core@7.25.2)(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + babel-loader: 9.2.1(@babel/core@7.25.2)(webpack@5.95.0) babel-plugin-dynamic-import-node: 2.3.3 boxen: 6.2.1 chalk: 4.1.2 @@ -18623,34 +18620,34 @@ snapshots: cli-table3: 0.6.5 combine-promises: 1.2.0 commander: 5.1.0 - copy-webpack-plugin: 11.0.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + copy-webpack-plugin: 11.0.0(webpack@5.95.0) core-js: 3.38.1 - css-loader: 6.11.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) - css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + css-loader: 6.11.0(webpack@5.95.0) + css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.95.0) cssnano: 6.1.2(postcss@8.4.47) del: 6.1.1 detect-port: 1.6.1 escape-html: 1.0.3 eta: 2.2.0 eval: 0.1.8 - file-loader: 6.2.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + file-loader: 6.2.0(webpack@5.95.0) fs-extra: 11.2.0 html-minifier-terser: 7.2.0 html-tags: 3.3.1 - html-webpack-plugin: 5.6.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + html-webpack-plugin: 5.6.0(webpack@5.95.0) leven: 3.1.0 lodash: 4.17.21 - mini-css-extract-plugin: 2.9.1(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + mini-css-extract-plugin: 2.9.1(webpack@5.95.0) p-map: 4.0.0 postcss: 8.4.47 - postcss-loader: 7.3.4(postcss@8.4.47)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + postcss-loader: 7.3.4(postcss@8.4.47)(typescript@5.6.2)(webpack@5.95.0) prompts: 2.4.2 react: 18.3.1 - react-dev-utils: 12.0.1(eslint@8.57.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + react-dev-utils: 12.0.1(eslint@8.57.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.95.0) react-dom: 18.3.1(react@18.3.1) react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' - react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.95.0) react-router: 5.3.4(react@18.3.1) react-router-config: 5.1.1(react-router@5.3.4(react@18.3.1))(react@18.3.1) react-router-dom: 5.3.4(react@18.3.1) @@ -18658,15 +18655,15 @@ snapshots: semver: 7.6.3 serve-handler: 6.1.5 shelljs: 0.8.5 - terser-webpack-plugin: 5.3.10(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + terser-webpack-plugin: 5.3.10(webpack@5.95.0) tslib: 2.7.0 update-notifier: 6.0.2 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))))(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0))(webpack@5.95.0) + webpack: 5.95.0 webpack-bundle-analyzer: 4.10.2 - webpack-dev-server: 4.15.2(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + webpack-dev-server: 4.15.2(webpack@5.95.0) webpack-merge: 5.10.0 - webpackbar: 5.0.2(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + webpackbar: 5.0.2(webpack@5.95.0) transitivePeerDependencies: - '@docusaurus/types' - '@parcel/css' @@ -18710,16 +18707,16 @@ snapshots: chalk: 4.1.2 tslib: 2.7.0 - '@docusaurus/mdx-loader@3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)': + '@docusaurus/mdx-loader@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)': dependencies: '@docusaurus/logger': 3.4.0 - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) + '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) '@mdx-js/mdx': 3.0.1 '@slorber/remark-comment': 1.0.0 escape-html: 1.0.3 estree-util-value-to-estree: 3.1.2 - file-loader: 6.2.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + file-loader: 6.2.0(webpack@5.95.0) fs-extra: 11.2.0 image-size: 1.1.1 mdast-util-mdx: 3.0.0 @@ -18735,9 +18732,9 @@ snapshots: tslib: 2.7.0 unified: 11.0.5 unist-util-visit: 5.0.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))))(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0))(webpack@5.95.0) vfile: 6.0.3 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 transitivePeerDependencies: - '@docusaurus/types' - '@swc/core' @@ -18747,16 +18744,16 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/mdx-loader@3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)': + '@docusaurus/mdx-loader@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)': dependencies: '@docusaurus/logger': 3.5.2 - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) '@mdx-js/mdx': 3.0.1 '@slorber/remark-comment': 1.0.0 escape-html: 1.0.3 estree-util-value-to-estree: 3.1.2 - file-loader: 6.2.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + file-loader: 6.2.0(webpack@5.95.0) fs-extra: 11.2.0 image-size: 1.1.1 mdast-util-mdx: 3.0.0 @@ -18772,9 +18769,9 @@ snapshots: tslib: 2.7.0 unified: 11.0.5 unist-util-visit: 5.0.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))))(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0))(webpack@5.95.0) vfile: 6.0.3 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 transitivePeerDependencies: - '@docusaurus/types' - '@swc/core' @@ -18784,9 +18781,9 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/module-type-aliases@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/module-type-aliases@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@docusaurus/types': 3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/history': 4.7.11 '@types/react': 18.3.9 '@types/react-router-config': 5.0.11 @@ -18802,9 +18799,9 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/module-type-aliases@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/module-type-aliases@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@docusaurus/types': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/history': 4.7.11 '@types/react': 18.3.9 '@types/react-router-config': 5.0.11 @@ -18820,17 +18817,17 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/plugin-content-blog@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + '@docusaurus/plugin-content-blog@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) '@docusaurus/logger': 3.5.2 - '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@docusaurus/types': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) - '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) + '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) cheerio: 1.0.0-rc.12 feed: 4.2.2 fs-extra: 11.2.0 @@ -18842,7 +18839,7 @@ snapshots: tslib: 2.7.0 unist-util-visit: 5.0.0 utility-types: 3.11.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 transitivePeerDependencies: - '@mdx-js/react' - '@parcel/css' @@ -18862,16 +18859,16 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-docs@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + '@docusaurus/plugin-content-docs@3.4.0(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': dependencies: - '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/core': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) '@docusaurus/logger': 3.4.0 - '@docusaurus/mdx-loader': 3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@docusaurus/module-type-aliases': 3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/mdx-loader': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@docusaurus/module-type-aliases': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) + '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) '@types/react-router-config': 5.0.11 combine-promises: 1.2.0 fs-extra: 11.2.0 @@ -18881,7 +18878,7 @@ snapshots: react-dom: 18.3.1(react@18.3.1) tslib: 2.7.0 utility-types: 3.11.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 transitivePeerDependencies: - '@parcel/css' - '@rspack/core' @@ -18900,17 +18897,17 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + '@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) '@docusaurus/logger': 3.5.2 - '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@docusaurus/module-type-aliases': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@docusaurus/types': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) - '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@docusaurus/module-type-aliases': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) + '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) '@types/react-router-config': 5.0.11 combine-promises: 1.2.0 fs-extra: 11.2.0 @@ -18920,7 +18917,7 @@ snapshots: react-dom: 18.3.1(react@18.3.1) tslib: 2.7.0 utility-types: 3.11.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 transitivePeerDependencies: - '@mdx-js/react' - '@parcel/css' @@ -18940,18 +18937,18 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-pages@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + '@docusaurus/plugin-content-pages@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@docusaurus/types': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) fs-extra: 11.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.7.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 transitivePeerDependencies: - '@mdx-js/react' - '@parcel/css' @@ -18971,11 +18968,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-debug@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + '@docusaurus/plugin-debug@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/types': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) fs-extra: 11.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -19000,11 +18997,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-analytics@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + '@docusaurus/plugin-google-analytics@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/types': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.7.0 @@ -19027,11 +19024,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-gtag@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + '@docusaurus/plugin-google-gtag@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/types': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) '@types/gtag.js': 0.0.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -19055,11 +19052,11 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + '@docusaurus/plugin-google-tag-manager@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/types': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.7.0 @@ -19082,14 +19079,14 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-sitemap@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + '@docusaurus/plugin-sitemap@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) '@docusaurus/logger': 3.5.2 - '@docusaurus/types': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) - '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) + '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) fs-extra: 11.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -19114,21 +19111,21 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/preset-classic@3.5.2(@algolia/client-search@4.24.0)(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/react@18.3.9)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': - dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/plugin-content-blog': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/plugin-content-pages': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/plugin-debug': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/plugin-google-analytics': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/plugin-google-gtag': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/plugin-google-tag-manager': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/plugin-sitemap': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/theme-classic': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/react@18.3.9)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@docusaurus/theme-search-algolia': 3.5.2(@algolia/client-search@4.24.0)(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/react@18.3.9)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/types': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/preset-classic@3.5.2(@algolia/client-search@4.24.0)(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@types/react@18.3.9)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + dependencies: + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/plugin-content-blog': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/plugin-content-pages': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/plugin-debug': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/plugin-google-analytics': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/plugin-google-gtag': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/plugin-google-tag-manager': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/plugin-sitemap': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/theme-classic': 3.5.2(@types/react@18.3.9)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@docusaurus/theme-search-algolia': 3.5.2(@algolia/client-search@4.24.0)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@types/react@18.3.9)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -19168,20 +19165,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@docusaurus/theme-classic@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/react@18.3.9)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + '@docusaurus/theme-classic@3.5.2(@types/react@18.3.9)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@docusaurus/module-type-aliases': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-blog': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/plugin-content-pages': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@docusaurus/module-type-aliases': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-blog': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/plugin-content-pages': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) '@docusaurus/theme-translations': 3.5.2 - '@docusaurus/types': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) - '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) + '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) '@mdx-js/react': 3.0.1(@types/react@18.3.9)(react@18.3.1) clsx: 2.1.1 copy-text-to-clipboard: 3.2.0 @@ -19216,13 +19213,13 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/theme-common@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)': + '@docusaurus/theme-common@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)': dependencies: - '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@docusaurus/module-type-aliases': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) - '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/mdx-loader': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@docusaurus/module-type-aliases': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) + '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@types/history': 4.7.11 '@types/react': 18.3.9 '@types/react-router-config': 5.0.11 @@ -19242,12 +19239,12 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/theme-live-codeblock@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + '@docusaurus/theme-live-codeblock@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) '@docusaurus/theme-translations': 3.5.2 - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) '@philpl/buble': 0.19.7 clsx: 2.1.1 fs-extra: 11.2.0 @@ -19276,13 +19273,13 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/theme-mermaid@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + '@docusaurus/theme-mermaid@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/module-type-aliases': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) - '@docusaurus/types': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/module-type-aliases': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) mermaid: 10.9.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -19307,16 +19304,16 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/theme-search-algolia@3.5.2(@algolia/client-search@4.24.0)(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/react@18.3.9)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': + '@docusaurus/theme-search-algolia@3.5.2(@algolia/client-search@4.24.0)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@types/react@18.3.9)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)': dependencies: '@docsearch/react': 3.6.1(@algolia/client-search@4.24.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) '@docusaurus/logger': 3.5.2 - '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@docusaurus/plugin-content-docs': 3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) '@docusaurus/theme-translations': 3.5.2 - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) - '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) + '@docusaurus/utils-validation': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) algoliasearch: 4.24.0 algoliasearch-helper: 3.22.5(algoliasearch@4.24.0) clsx: 2.1.1 @@ -19362,7 +19359,7 @@ snapshots: '@docusaurus/tsconfig@3.5.2': {} - '@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@mdx-js/mdx': 3.0.1 '@types/history': 4.7.11 @@ -19373,7 +19370,7 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) utility-types: 3.11.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 webpack-merge: 5.10.0 transitivePeerDependencies: - '@swc/core' @@ -19382,7 +19379,7 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@mdx-js/mdx': 3.0.1 '@types/history': 4.7.11 @@ -19393,7 +19390,7 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) utility-types: 3.11.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 webpack-merge: 5.10.0 transitivePeerDependencies: - '@swc/core' @@ -19402,29 +19399,29 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-common@3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + '@docusaurus/utils-common@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': dependencies: tslib: 2.7.0 optionalDependencies: - '@docusaurus/types': 3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common@3.4.0(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + '@docusaurus/utils-common@3.4.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': dependencies: tslib: 2.7.0 optionalDependencies: - '@docusaurus/types': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common@3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + '@docusaurus/utils-common@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': dependencies: tslib: 2.7.0 optionalDependencies: - '@docusaurus/types': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation@3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2)': + '@docusaurus/utils-validation@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2)': dependencies: '@docusaurus/logger': 3.4.0 - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) + '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) fs-extra: 11.2.0 joi: 17.13.3 js-yaml: 4.1.0 @@ -19439,11 +19436,11 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-validation@3.4.0(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2)': + '@docusaurus/utils-validation@3.4.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2)': dependencies: '@docusaurus/logger': 3.4.0 - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils': 3.4.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) + '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) fs-extra: 11.2.0 joi: 17.13.3 js-yaml: 4.1.0 @@ -19458,11 +19455,11 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-validation@3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2)': + '@docusaurus/utils-validation@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2)': dependencies: '@docusaurus/logger': 3.5.2 - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) - '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) + '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) fs-extra: 11.2.0 joi: 17.13.3 js-yaml: 4.1.0 @@ -19477,13 +19474,13 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils@3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2)': + '@docusaurus/utils@3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2)': dependencies: '@docusaurus/logger': 3.4.0 - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@svgr/webpack': 8.1.0(typescript@5.6.2) escape-string-regexp: 4.0.0 - file-loader: 6.2.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + file-loader: 6.2.0(webpack@5.95.0) fs-extra: 11.2.0 github-slugger: 1.5.0 globby: 11.1.0 @@ -19496,11 +19493,11 @@ snapshots: resolve-pathname: 3.0.0 shelljs: 0.8.5 tslib: 2.7.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))))(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0))(webpack@5.95.0) utility-types: 3.11.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 optionalDependencies: - '@docusaurus/types': 3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - '@swc/core' - esbuild @@ -19509,13 +19506,13 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils@3.4.0(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2)': + '@docusaurus/utils@3.4.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2)': dependencies: '@docusaurus/logger': 3.4.0 - '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-common': 3.4.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@svgr/webpack': 8.1.0(typescript@5.6.2) escape-string-regexp: 4.0.0 - file-loader: 6.2.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + file-loader: 6.2.0(webpack@5.95.0) fs-extra: 11.2.0 github-slugger: 1.5.0 globby: 11.1.0 @@ -19528,11 +19525,11 @@ snapshots: resolve-pathname: 3.0.0 shelljs: 0.8.5 tslib: 2.7.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))))(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0))(webpack@5.95.0) utility-types: 3.11.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 optionalDependencies: - '@docusaurus/types': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - '@swc/core' - esbuild @@ -19541,13 +19538,13 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils@3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2)': + '@docusaurus/utils@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2)': dependencies: '@docusaurus/logger': 3.5.2 - '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-common': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@svgr/webpack': 8.1.0(typescript@5.6.2) escape-string-regexp: 4.0.0 - file-loader: 6.2.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + file-loader: 6.2.0(webpack@5.95.0) fs-extra: 11.2.0 github-slugger: 1.5.0 globby: 11.1.0 @@ -19560,11 +19557,11 @@ snapshots: resolve-pathname: 3.0.0 shelljs: 0.8.5 tslib: 2.7.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))))(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.95.0))(webpack@5.95.0) utility-types: 3.11.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 optionalDependencies: - '@docusaurus/types': 3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - '@swc/core' - esbuild @@ -20129,24 +20126,24 @@ snapshots: - encoding - supports-color - '@graphql-markdown/core@1.12.0(@graphql-markdown/printer-legacy@1.9.0(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(graphql@16.9.0)(prettier@3.3.3)(typescript@5.6.2))(graphql-config@5.1.2(@types/node@22.7.3)(graphql@16.9.0)(typescript@5.6.2))(graphql@16.9.0)(prettier@3.3.3)': + '@graphql-markdown/core@1.12.0(@graphql-markdown/printer-legacy@1.9.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(graphql@16.9.0)(prettier@3.3.3)(typescript@5.6.2))(graphql-config@5.1.2(@types/node@22.7.3)(graphql@16.9.0)(typescript@5.6.2))(graphql@16.9.0)(prettier@3.3.3)': dependencies: '@graphql-markdown/graphql': 1.1.4(graphql@16.9.0)(prettier@3.3.3) '@graphql-markdown/logger': 1.0.4 '@graphql-markdown/utils': 1.7.0(prettier@3.3.3) optionalDependencies: - '@graphql-markdown/printer-legacy': 1.9.0(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(graphql@16.9.0)(prettier@3.3.3)(typescript@5.6.2) + '@graphql-markdown/printer-legacy': 1.9.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(graphql@16.9.0)(prettier@3.3.3)(typescript@5.6.2) graphql-config: 5.1.2(@types/node@22.7.3)(graphql@16.9.0)(typescript@5.6.2) transitivePeerDependencies: - graphql - prettier - '@graphql-markdown/docusaurus@1.26.2(@docusaurus/logger@3.5.2)(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(graphql-config@5.1.2(@types/node@22.7.3)(graphql@16.9.0)(typescript@5.6.2))(graphql@16.9.0)(prettier@3.3.3)(typescript@5.6.2)': + '@graphql-markdown/docusaurus@1.26.2(@docusaurus/logger@3.5.2)(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(graphql-config@5.1.2(@types/node@22.7.3)(graphql@16.9.0)(typescript@5.6.2))(graphql@16.9.0)(prettier@3.3.3)(typescript@5.6.2)': dependencies: '@docusaurus/logger': 3.5.2 - '@graphql-markdown/core': 1.12.0(@graphql-markdown/printer-legacy@1.9.0(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(graphql@16.9.0)(prettier@3.3.3)(typescript@5.6.2))(graphql-config@5.1.2(@types/node@22.7.3)(graphql@16.9.0)(typescript@5.6.2))(graphql@16.9.0)(prettier@3.3.3) + '@graphql-markdown/core': 1.12.0(@graphql-markdown/printer-legacy@1.9.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(graphql@16.9.0)(prettier@3.3.3)(typescript@5.6.2))(graphql-config@5.1.2(@types/node@22.7.3)(graphql@16.9.0)(typescript@5.6.2))(graphql@16.9.0)(prettier@3.3.3) '@graphql-markdown/logger': 1.0.4 - '@graphql-markdown/printer-legacy': 1.9.0(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(graphql@16.9.0)(prettier@3.3.3)(typescript@5.6.2) + '@graphql-markdown/printer-legacy': 1.9.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(graphql@16.9.0)(prettier@3.3.3)(typescript@5.6.2) transitivePeerDependencies: - '@docusaurus/types' - '@graphql-markdown/diff' @@ -20171,9 +20168,9 @@ snapshots: '@graphql-markdown/logger@1.0.4': {} - '@graphql-markdown/printer-legacy@1.9.0(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(graphql@16.9.0)(prettier@3.3.3)(typescript@5.6.2)': + '@graphql-markdown/printer-legacy@1.9.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(graphql@16.9.0)(prettier@3.3.3)(typescript@5.6.2)': dependencies: - '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/utils': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) '@graphql-markdown/graphql': 1.1.4(graphql@16.9.0)(prettier@3.3.3) '@graphql-markdown/utils': 1.7.0(prettier@3.3.3) transitivePeerDependencies: @@ -20511,9 +20508,9 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@headlessui/tailwindcss@0.1.3(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2)))': + '@headlessui/tailwindcss@0.1.3(tailwindcss@3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2)))': dependencies: - tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2)) + tailwindcss: 3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2)) '@hookform/resolvers@3.9.0(react-hook-form@7.53.0(react@18.3.1))': dependencies: @@ -20591,7 +20588,7 @@ snapshots: jest-util: 29.7.0 slash: 3.0.0 - '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2))': + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2))': dependencies: '@jest/console': 29.7.0 '@jest/reporters': 29.7.0(node-notifier@10.0.0) @@ -20605,7 +20602,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)) + jest-config: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -21110,14 +21107,14 @@ snapshots: pump: 3.0.2 tar-fs: 2.1.1 - '@nestjs/cache-manager@2.2.2(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.4)(cache-manager@5.7.6)(rxjs@7.8.1)': + '@nestjs/cache-manager@2.2.2(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.4(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.4)(reflect-metadata@0.2.2)(rxjs@7.8.1))(cache-manager@5.7.6)(rxjs@7.8.1)': dependencies: '@nestjs/common': 10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1) '@nestjs/core': 10.4.4(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.4)(reflect-metadata@0.2.2)(rxjs@7.8.1) cache-manager: 5.7.6 rxjs: 7.8.1 - '@nestjs/cli@10.4.5(@swc/core@1.7.28(@swc/helpers@0.5.5))': + '@nestjs/cli@10.4.5(@swc/core@1.7.28)': dependencies: '@angular-devkit/core': 17.3.8(chokidar@3.6.0) '@angular-devkit/schematics': 17.3.8(chokidar@3.6.0) @@ -21127,7 +21124,7 @@ snapshots: chokidar: 3.6.0 cli-table3: 0.6.5 commander: 4.1.1 - fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.3.3)(webpack@5.94.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.3.3)(webpack@5.94.0(@swc/core@1.7.28)) glob: 10.4.2 inquirer: 8.2.6 node-emoji: 1.11.0 @@ -21136,7 +21133,7 @@ snapshots: tsconfig-paths: 4.2.0 tsconfig-paths-webpack-plugin: 4.1.0 typescript: 5.3.3 - webpack: 5.94.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.94.0(@swc/core@1.7.28) webpack-node-externals: 3.0.0 optionalDependencies: '@swc/core': 1.7.28(@swc/helpers@0.5.5) @@ -21189,7 +21186,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@nestjs/schedule@4.1.1(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.4)': + '@nestjs/schedule@4.1.1(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.4(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.4)(reflect-metadata@0.2.2)(rxjs@7.8.1))': dependencies: '@nestjs/common': 10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1) '@nestjs/core': 10.4.4(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.4)(reflect-metadata@0.2.2)(rxjs@7.8.1) @@ -21218,7 +21215,7 @@ snapshots: transitivePeerDependencies: - chokidar - '@nestjs/testing@10.4.4(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.4)(@nestjs/platform-express@10.4.4)': + '@nestjs/testing@10.4.4(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.4(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.4)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.4(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.4.4))': dependencies: '@nestjs/common': 10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1) '@nestjs/core': 10.4.4(@nestjs/common@10.4.4(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.4.4)(reflect-metadata@0.2.2)(rxjs@7.8.1) @@ -23845,14 +23842,14 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tailwindcss/aspect-ratio@0.4.2(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2)))': + '@tailwindcss/aspect-ratio@0.4.2(tailwindcss@3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2)))': dependencies: - tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2)) + tailwindcss: 3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2)) - '@tailwindcss/forms@0.5.9(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2)))': + '@tailwindcss/forms@0.5.9(tailwindcss@3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2)))': dependencies: mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2)) + tailwindcss: 3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2)) '@tanstack/eslint-plugin-query@5.58.1(eslint@8.57.1)(typescript@5.6.2)': dependencies: @@ -24356,11 +24353,11 @@ snapshots: '@types/webextension-polyfill@0.10.7': {} - '@types/webpack@5.28.5(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack-cli@5.1.4)': + '@types/webpack@5.28.5(@swc/core@1.7.28)(webpack-cli@5.1.4(webpack@5.95.0))': dependencies: '@types/node': 20.16.9 tapable: 2.2.1 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - esbuild @@ -24975,7 +24972,7 @@ snapshots: pathe: 1.1.2 picocolors: 1.1.0 sirv: 2.0.4 - vitest: 2.1.1(@types/node@20.16.9)(@vitest/ui@0.33.0)(happy-dom@10.11.2)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) + vitest: 2.1.1(@types/node@20.16.9)(@vitest/ui@0.33.0)(happy-dom@15.11.7)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0) '@vitest/utils@0.33.0': dependencies: @@ -25135,19 +25132,19 @@ snapshots: '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 - '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4)(webpack@5.95.0)': + '@webpack-cli/configtest@2.1.1(webpack-cli@5.1.4(webpack@5.95.0))(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4))': dependencies: - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.95.0) - '@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.95.0)': + '@webpack-cli/info@2.0.2(webpack-cli@5.1.4(webpack@5.95.0))(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4))': dependencies: - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.95.0) - '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.95.0)': + '@webpack-cli/serve@2.0.5(webpack-cli@5.1.4(webpack@5.95.0))(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4))': dependencies: - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.95.0) '@whatwg-node/events@0.0.3': {} @@ -25638,12 +25635,12 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@9.2.1(@babel/core@7.25.2)(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + babel-loader@9.2.1(@babel/core@7.25.2)(webpack@5.95.0): dependencies: '@babel/core': 7.25.2 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 babel-plugin-dynamic-import-node@2.3.3: dependencies: @@ -26443,7 +26440,7 @@ snapshots: copy-text-to-clipboard@3.2.0: {} - copy-webpack-plugin@11.0.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + copy-webpack-plugin@11.0.0(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)): dependencies: fast-glob: 3.3.2 glob-parent: 6.0.2 @@ -26451,7 +26448,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4) copy-webpack-plugin@11.0.0(webpack@5.95.0): dependencies: @@ -26461,7 +26458,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack-cli@5.1.4) + webpack: 5.95.0 core-js-compat@3.38.1: dependencies: @@ -26531,13 +26528,13 @@ snapshots: crc-32@1.2.2: {} - create-jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)): + create-jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)) + jest-config: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -26601,7 +26598,7 @@ snapshots: postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - css-loader@6.11.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + css-loader@6.11.0(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)): dependencies: icss-utils: 5.1.0(postcss@8.4.47) postcss: 8.4.47 @@ -26612,7 +26609,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4) css-loader@6.11.0(webpack@5.95.0): dependencies: @@ -26625,9 +26622,9 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack-cli@5.1.4) + webpack: 5.95.0 - css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(webpack@5.95.0): dependencies: '@jridgewell/trace-mapping': 0.3.25 cssnano: 6.1.2(postcss@8.4.47) @@ -26635,7 +26632,7 @@ snapshots: postcss: 8.4.47 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 optionalDependencies: clean-css: 5.3.3 @@ -27184,15 +27181,15 @@ snapshots: dependencies: typedoc-plugin-markdown: 4.2.10(typedoc@0.26.11(typescript@5.6.2)) - docusaurus-theme-search-typesense@0.20.0-0(iea5eyhbiud2dlcqtud2g4pxzm): + docusaurus-theme-search-typesense@0.20.0-0(@algolia/client-search@4.24.0)(@babel/runtime@7.25.6)(@docusaurus/core@3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/theme-common@3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.9)(algoliasearch@4.24.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16): dependencies: - '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/core': 3.5.2(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) '@docusaurus/logger': 3.4.0 - '@docusaurus/plugin-content-docs': 3.4.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) - '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) + '@docusaurus/plugin-content-docs': 3.4.0(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16) + '@docusaurus/theme-common': 3.5.2(@docusaurus/plugin-content-docs@3.5.2(@mdx-js/react@3.0.1(@types/react@18.3.9)(react@18.3.1))(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2)(vue-template-compiler@2.7.16))(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.6.2) '@docusaurus/theme-translations': 3.4.0 - '@docusaurus/utils': 3.4.0(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) - '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.5.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/core@1.7.28(@swc/helpers@0.5.5))(typescript@5.6.2) + '@docusaurus/utils': 3.4.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) + '@docusaurus/utils-validation': 3.4.0(@docusaurus/types@3.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.6.2) algoliasearch-helper: 3.22.5(algoliasearch@4.24.0) clsx: 1.2.1 eta: 2.2.0 @@ -27638,7 +27635,26 @@ snapshots: debug: 4.3.7(supports-color@8.1.1) enhanced-resolve: 5.17.1 eslint: 8.57.1 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1) + fast-glob: 3.3.2 + get-tsconfig: 4.8.1 + is-bun-module: 1.2.1 + is-glob: 4.0.3 + optionalDependencies: + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + transitivePeerDependencies: + - '@typescript-eslint/parser' + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - supports-color + + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.3.7(supports-color@8.1.1) + enhanced-resolve: 5.17.1 + eslint: 8.57.1 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.2.1 @@ -27651,7 +27667,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: @@ -27662,6 +27678,17 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1) + transitivePeerDependencies: + - supports-color + eslint-plugin-header@3.1.1(eslint@8.57.1): dependencies: eslint: 8.57.1 @@ -27677,7 +27704,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2))(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -27792,7 +27819,7 @@ snapshots: eslint-visitor-keys@4.1.0: {} - eslint-webpack-plugin@4.2.0(eslint@8.57.1)(webpack@5.95.0): + eslint-webpack-plugin@4.2.0(eslint@8.57.1)(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)): dependencies: '@types/eslint': 8.56.12 eslint: 8.57.1 @@ -27800,7 +27827,7 @@ snapshots: micromatch: 4.0.8 normalize-path: 3.0.0 schema-utils: 4.2.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4) eslint@8.57.1: dependencies: @@ -28165,11 +28192,11 @@ snapshots: dependencies: flat-cache: 3.2.0 - file-loader@6.2.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + file-loader@6.2.0(webpack@5.95.0): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 file-system-cache@2.3.0: dependencies: @@ -28277,7 +28304,7 @@ snapshots: forever-agent@0.6.1: {} - fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.95.0): dependencies: '@babel/code-frame': 7.24.7 '@types/json-schema': 7.0.15 @@ -28293,12 +28320,12 @@ snapshots: semver: 7.6.3 tapable: 1.1.3 typescript: 5.6.2 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 optionalDependencies: eslint: 8.57.1 vue-template-compiler: 2.7.16 - fork-ts-checker-webpack-plugin@9.0.2(typescript@5.3.3)(webpack@5.94.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + fork-ts-checker-webpack-plugin@9.0.2(typescript@5.3.3)(webpack@5.94.0(@swc/core@1.7.28)): dependencies: '@babel/code-frame': 7.24.7 chalk: 4.1.2 @@ -28313,7 +28340,7 @@ snapshots: semver: 7.6.3 tapable: 2.2.1 typescript: 5.3.3 - webpack: 5.94.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.94.0(@swc/core@1.7.28) form-data-encoder@2.1.4: {} @@ -28813,13 +28840,10 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - happy-dom@10.11.2: + happy-dom@15.11.7: dependencies: - css.escape: 1.5.1 entities: 4.5.0 - iconv-lite: 0.6.3 webidl-conversions: 7.0.0 - whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 har-schema@2.0.0: {} @@ -29075,7 +29099,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + html-webpack-plugin@5.6.0(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -29083,7 +29107,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4) html-webpack-plugin@5.6.0(webpack@5.95.0): dependencies: @@ -29093,7 +29117,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack-cli@5.1.4) + webpack: 5.95.0 htmlparser2@6.1.0: dependencies: @@ -29728,16 +29752,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)): + jest-cli@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)) + create-jest: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)) + jest-config: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -29749,7 +29773,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)): + jest-config@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)): dependencies: '@babel/core': 7.25.2 '@jest/test-sequencer': 29.7.0 @@ -29775,7 +29799,7 @@ snapshots: strip-json-comments: 3.1.1 optionalDependencies: '@types/node': 20.16.9 - ts-node: 10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -30006,12 +30030,12 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)): + jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)): dependencies: - '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)) + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)) '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)) + jest-cli: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)) optionalDependencies: node-notifier: 10.0.0 transitivePeerDependencies: @@ -31289,17 +31313,17 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.9.1(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + mini-css-extract-plugin@2.9.1(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)): dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4) mini-css-extract-plugin@2.9.1(webpack@5.95.0): dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack-cli@5.1.4) + webpack: 5.95.0 mini-svg-data-uri@1.4.4: {} @@ -32236,29 +32260,29 @@ snapshots: '@csstools/utilities': 1.0.0(postcss@8.4.47) postcss: 8.4.47 - postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)): + postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2)): dependencies: lilconfig: 3.1.2 yaml: 2.5.1 optionalDependencies: postcss: 8.4.47 - ts-node: 10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2) + ts-node: 10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2) - postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2)): + postcss-load-config@4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2)): dependencies: lilconfig: 3.1.2 yaml: 2.5.1 optionalDependencies: postcss: 8.4.47 - ts-node: 10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2) + ts-node: 10.9.2(@types/node@22.7.3)(typescript@5.6.2) - postcss-loader@7.3.4(postcss@8.4.47)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + postcss-loader@7.3.4(postcss@8.4.47)(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)): dependencies: cosmiconfig: 8.3.6(typescript@5.6.2) jiti: 1.21.6 postcss: 8.4.47 semver: 7.6.3 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4) transitivePeerDependencies: - typescript @@ -32268,7 +32292,7 @@ snapshots: jiti: 1.21.6 postcss: 8.4.47 semver: 7.6.3 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack-cli@5.1.4) + webpack: 5.95.0 transitivePeerDependencies: - typescript @@ -32773,7 +32797,7 @@ snapshots: react: 18.3.1 tween-functions: 1.2.0 - react-dev-utils@12.0.1(eslint@8.57.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + react-dev-utils@12.0.1(eslint@8.57.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.95.0): dependencies: '@babel/code-frame': 7.24.7 address: 1.2.2 @@ -32784,7 +32808,7 @@ snapshots: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.1)(typescript@5.6.2)(vue-template-compiler@2.7.16)(webpack@5.95.0) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -32799,7 +32823,7 @@ snapshots: shell-quote: 1.8.1 strip-ansi: 6.0.1 text-table: 0.2.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 optionalDependencies: typescript: 5.6.2 transitivePeerDependencies: @@ -32900,11 +32924,11 @@ snapshots: sucrase: 3.35.0 use-editable: 2.3.3(react@18.3.1) - react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.95.0): dependencies: '@babel/runtime': 7.25.6 react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 react-number-format@5.4.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: @@ -33596,10 +33620,10 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@13.3.3(sass@1.79.3)(webpack@5.95.0): + sass-loader@13.3.3(sass@1.79.3)(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)): dependencies: neo-async: 2.6.2 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4) optionalDependencies: sass: 1.79.3 @@ -34325,15 +34349,15 @@ snapshots: tailwind-merge@2.5.2: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2))): + tailwindcss-animate@1.0.7(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2))): dependencies: - tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)) + tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2)) - tailwindcss-animate@1.0.7(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2))): + tailwindcss-animate@1.0.7(tailwindcss@3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2))): dependencies: - tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2)) + tailwindcss: 3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2)) - tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)): + tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -34352,7 +34376,7 @@ snapshots: postcss: 8.4.47 postcss-import: 15.1.0(postcss@8.4.47) postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)) + postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2)) postcss-nested: 6.2.0(postcss@8.4.47) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -34360,7 +34384,7 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2)): + tailwindcss@3.4.13(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -34379,7 +34403,7 @@ snapshots: postcss: 8.4.47 postcss-import: 15.1.0(postcss@8.4.47) postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2)) + postcss-load-config: 4.0.2(postcss@8.4.47)(ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2)) postcss-nested: 6.2.0(postcss@8.4.47) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -34435,39 +34459,48 @@ snapshots: term-size@2.2.1: {} - terser-webpack-plugin@5.3.10(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack@5.94.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + terser-webpack-plugin@5.3.10(@swc/core@1.7.28)(webpack@5.94.0(@swc/core@1.7.28)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.34.0 - webpack: 5.94.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.94.0(@swc/core@1.7.28) optionalDependencies: '@swc/core': 1.7.28(@swc/helpers@0.5.5) - terser-webpack-plugin@5.3.10(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + terser-webpack-plugin@5.3.10(@swc/core@1.7.28)(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.34.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4) optionalDependencies: '@swc/core': 1.7.28(@swc/helpers@0.5.5) - terser-webpack-plugin@5.3.10(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack@5.95.0): + terser-webpack-plugin@5.3.10(@swc/core@1.7.28)(webpack@5.95.0(@swc/core@1.7.28)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.34.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.28) optionalDependencies: '@swc/core': 1.7.28(@swc/helpers@0.5.5) + terser-webpack-plugin@5.3.10(webpack@5.95.0): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.34.0 + webpack: 5.95.0 + terser@5.34.0: dependencies: '@jridgewell/source-map': 0.3.6 @@ -34612,12 +34645,12 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-jest@29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)))(typescript@5.6.2): + ts-jest@29.2.5(@babel/core@7.25.2)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.25.2))(jest@29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)))(typescript@5.6.2): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2)) + jest: 29.7.0(@types/node@20.16.9)(babel-plugin-macros@3.1.0)(node-notifier@10.0.0)(ts-node@10.9.2(@types/node@20.16.9)(typescript@5.6.2)) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -34631,7 +34664,7 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.25.2) - ts-loader@9.5.1(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + ts-loader@9.5.1(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)): dependencies: chalk: 4.1.2 enhanced-resolve: 5.17.1 @@ -34639,9 +34672,9 @@ snapshots: semver: 7.6.3 source-map: 0.7.4 typescript: 5.6.2 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4) - ts-loader@9.5.1(typescript@5.6.2)(webpack@5.95.0): + ts-loader@9.5.1(typescript@5.6.2)(webpack@5.95.0(@swc/core@1.7.28)): dependencies: chalk: 4.1.2 enhanced-resolve: 5.17.1 @@ -34649,11 +34682,11 @@ snapshots: semver: 7.6.3 source-map: 0.7.4 typescript: 5.6.2 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.28) ts-log@2.2.5: {} - ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@16.18.111)(typescript@5.1.6): + ts-node@10.9.2(@swc/core@1.7.28)(@types/node@16.18.111)(typescript@5.1.6): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -34673,7 +34706,7 @@ snapshots: optionalDependencies: '@swc/core': 1.7.28(@swc/helpers@0.5.5) - ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@20.16.9)(typescript@5.6.2): + ts-node@10.9.2(@swc/core@1.7.28)(@types/node@20.16.9)(typescript@5.6.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -34693,7 +34726,7 @@ snapshots: optionalDependencies: '@swc/core': 1.7.28(@swc/helpers@0.5.5) - ts-node@10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@22.7.3)(typescript@5.6.2): + ts-node@10.9.2(@types/node@22.7.3)(typescript@5.6.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -34710,8 +34743,6 @@ snapshots: typescript: 5.6.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.7.28(@swc/helpers@0.5.5) optional: true ts-retry-promise@0.8.1: {} @@ -34881,14 +34912,14 @@ snapshots: transitivePeerDependencies: - supports-color - typescript-json-schema@0.64.0(@swc/core@1.7.28(@swc/helpers@0.5.5)): + typescript-json-schema@0.64.0(@swc/core@1.7.28): dependencies: '@types/json-schema': 7.0.15 '@types/node': 16.18.111 glob: 7.2.3 path-equal: 1.2.5 safe-stable-stringify: 2.5.0 - ts-node: 10.9.2(@swc/core@1.7.28(@swc/helpers@0.5.5))(@types/node@16.18.111)(typescript@5.1.6) + ts-node: 10.9.2(@swc/core@1.7.28)(@types/node@16.18.111)(typescript@5.1.6) typescript: 5.1.6 yargs: 17.7.2 transitivePeerDependencies: @@ -35129,14 +35160,14 @@ snapshots: dependencies: punycode: 2.3.1 - url-loader@4.1.1(file-loader@6.2.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))))(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + url-loader@4.1.1(file-loader@6.2.0(webpack@5.95.0))(webpack@5.95.0): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 optionalDependencies: - file-loader: 6.2.0(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + file-loader: 6.2.0(webpack@5.95.0) url-parse@1.5.10: dependencies: @@ -35428,7 +35459,7 @@ snapshots: sass: 1.79.3 terser: 5.34.0 - vitest@2.1.1(@types/node@20.16.9)(@vitest/ui@0.33.0)(happy-dom@10.11.2)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0): + vitest@2.1.1(@types/node@20.16.9)(@vitest/ui@0.33.0)(happy-dom@15.11.7)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0): dependencies: '@vitest/expect': 2.1.1 '@vitest/mocker': 2.1.1(msw@2.4.9(typescript@5.6.2))(vite@5.4.8(@types/node@20.16.9)(sass@1.79.3)(terser@5.34.0)) @@ -35452,7 +35483,7 @@ snapshots: optionalDependencies: '@types/node': 20.16.9 '@vitest/ui': 0.33.0(vitest@2.1.1) - happy-dom: 10.11.2 + happy-dom: 15.11.7 jsdom: 24.1.3 transitivePeerDependencies: - less @@ -35465,7 +35496,7 @@ snapshots: - supports-color - terser - vitest@2.1.1(@types/node@22.7.3)(happy-dom@10.11.2)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0): + vitest@2.1.1(@types/node@22.7.3)(happy-dom@15.11.7)(jsdom@24.1.3)(msw@2.4.9(typescript@5.6.2))(sass@1.79.3)(terser@5.34.0): dependencies: '@vitest/expect': 2.1.1 '@vitest/mocker': 2.1.1(msw@2.4.9(typescript@5.6.2))(vite@5.4.8(@types/node@22.7.3)(sass@1.79.3)(terser@5.34.0)) @@ -35488,7 +35519,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.7.3 - happy-dom: 10.11.2 + happy-dom: 15.11.7 jsdom: 24.1.3 transitivePeerDependencies: - less @@ -35883,9 +35914,9 @@ snapshots: webpack-cli@5.1.4(webpack@5.95.0): dependencies: '@discoveryjs/json-ext': 0.5.7 - '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.95.0) - '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.95.0) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.95.0) + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4(webpack@5.95.0))(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4(webpack@5.95.0))(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4(webpack@5.95.0))(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.5 @@ -35894,19 +35925,19 @@ snapshots: import-local: 3.2.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack-cli@5.1.4) + webpack: 5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4) webpack-merge: 5.10.0 - webpack-dev-middleware@5.3.4(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + webpack-dev-middleware@5.3.4(webpack@5.95.0): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 - webpack-dev-server@4.15.2(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + webpack-dev-server@4.15.2(webpack@5.95.0): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -35936,10 +35967,10 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + webpack-dev-middleware: 5.3.4(webpack@5.95.0) ws: 8.18.0 optionalDependencies: - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 transitivePeerDependencies: - bufferutil - debug @@ -35958,7 +35989,37 @@ snapshots: webpack-virtual-modules@0.6.2: {} - webpack@5.94.0(@swc/core@1.7.28(@swc/helpers@0.5.5)): + webpack@5.94.0(@swc/core@1.7.28): + dependencies: + '@types/estree': 1.0.6 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.12.1 + acorn-import-attributes: 1.9.5(acorn@8.12.1) + browserslist: 4.24.0 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.1 + es-module-lexer: 1.5.4 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(@swc/core@1.7.28)(webpack@5.94.0(@swc/core@1.7.28)) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + webpack@5.95.0: dependencies: '@types/estree': 1.0.6 '@webassemblyjs/ast': 1.12.1 @@ -35980,7 +36041,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack@5.94.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + terser-webpack-plugin: 5.3.10(webpack@5.95.0) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -35988,7 +36049,7 @@ snapshots: - esbuild - uglify-js - webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)): + webpack@5.95.0(@swc/core@1.7.28): dependencies: '@types/estree': 1.0.6 '@webassemblyjs/ast': 1.12.1 @@ -36010,7 +36071,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))) + terser-webpack-plugin: 5.3.10(@swc/core@1.7.28)(webpack@5.95.0(@swc/core@1.7.28)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -36018,7 +36079,7 @@ snapshots: - esbuild - uglify-js - webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack-cli@5.1.4): + webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4): dependencies: '@types/estree': 1.0.6 '@webassemblyjs/ast': 1.12.1 @@ -36040,7 +36101,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.7.28(@swc/helpers@0.5.5))(webpack@5.95.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.7.28)(webpack@5.95.0(@swc/core@1.7.28)(webpack-cli@5.1.4)) watchpack: 2.4.2 webpack-sources: 3.2.3 optionalDependencies: @@ -36050,13 +36111,13 @@ snapshots: - esbuild - uglify-js - webpackbar@5.0.2(webpack@5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5))): + webpackbar@5.0.2(webpack@5.95.0): dependencies: chalk: 4.1.2 consola: 2.15.3 pretty-time: 1.1.0 std-env: 3.7.0 - webpack: 5.95.0(@swc/core@1.7.28(@swc/helpers@0.5.5)) + webpack: 5.95.0 websocket-driver@0.7.4: dependencies: @@ -36066,10 +36127,6 @@ snapshots: websocket-extensions@0.1.4: {} - whatwg-encoding@2.0.0: - dependencies: - iconv-lite: 0.6.3 - whatwg-encoding@3.1.1: dependencies: iconv-lite: 0.6.3 From 2a755892a5b358500b2767c2ad557d3b31437fe3 Mon Sep 17 00:00:00 2001 From: Levente Pap <levente.pap@iota.org> Date: Thu, 12 Dec 2024 11:52:36 +0100 Subject: [PATCH 08/28] feat: bump iota to v0.8.0-alpha (#4446) * feat: bump iota to v0.8.0-alpha * fix: graphql-e2e-tests --- Cargo.lock | 232 +++++++++--------- Cargo.toml | 2 +- .../tests/call/simple.exp | 6 +- crates/iota-open-rpc/spec/openrpc.json | 2 +- 4 files changed, 121 insertions(+), 121 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 272c5b18d44..c0b1c6e29bf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1831,7 +1831,7 @@ checksum = "230c5f1ca6a325a32553f8640d31ac9b49f2411e901e427570154868b46da4f7" [[package]] name = "bin-version" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "const-str", "git-version", @@ -3669,14 +3669,14 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] name = "docs-examples" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "bcs", "bip32", "iota-keys", "iota-move-build", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "move-binary-format", "move-core-types", "serde_json", @@ -5714,7 +5714,7 @@ checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" [[package]] name = "iota" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anemo", "anyhow", @@ -5759,7 +5759,7 @@ dependencies = [ "iota-package-management", "iota-protocol-config", "iota-replay", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-simulator", "iota-source-validation", "iota-swarm", @@ -5838,7 +5838,7 @@ dependencies = [ [[package]] name = "iota-adapter-transactional-tests" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "datatest-stable", "iota-transactional-test-runner", @@ -5846,7 +5846,7 @@ dependencies = [ [[package]] name = "iota-analytics-indexer" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "arrow", @@ -5897,7 +5897,7 @@ dependencies = [ [[package]] name = "iota-analytics-indexer-derive" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "proc-macro2 1.0.86", "quote 1.0.37", @@ -5906,7 +5906,7 @@ dependencies = [ [[package]] name = "iota-archival" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "byteorder", @@ -5938,7 +5938,7 @@ dependencies = [ [[package]] name = "iota-authority-aggregation" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "futures", "iota-metrics", @@ -5949,7 +5949,7 @@ dependencies = [ [[package]] name = "iota-aws-orchestrator" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "async-trait", "aws-config", @@ -5980,7 +5980,7 @@ dependencies = [ [[package]] name = "iota-benchmark" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-trait", @@ -6002,7 +6002,7 @@ dependencies = [ "iota-metrics", "iota-network", "iota-protocol-config", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-simulator", "iota-storage", "iota-surfer", @@ -6030,7 +6030,7 @@ dependencies = [ [[package]] name = "iota-bridge" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "arc-swap", @@ -6052,7 +6052,7 @@ dependencies = [ "iota-json-rpc-types", "iota-keys", "iota-metrics", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-test-transaction-builder", "iota-types", "lru 0.12.4", @@ -6079,7 +6079,7 @@ dependencies = [ [[package]] name = "iota-bridge-cli" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "clap", @@ -6090,7 +6090,7 @@ dependencies = [ "iota-config", "iota-json-rpc-types", "iota-keys", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-types", "move-core-types", "reqwest 0.12.7", @@ -6105,7 +6105,7 @@ dependencies = [ [[package]] name = "iota-bridge-indexer" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-trait", @@ -6121,7 +6121,7 @@ dependencies = [ "iota-indexer-builder", "iota-json-rpc-types", "iota-metrics", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-test-transaction-builder", "iota-types", "prometheus", @@ -6135,7 +6135,7 @@ dependencies = [ [[package]] name = "iota-cluster-test" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-trait", @@ -6153,7 +6153,7 @@ dependencies = [ "iota-json", "iota-json-rpc-types", "iota-keys", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-swarm", "iota-swarm-config", "iota-test-transaction-builder", @@ -6175,7 +6175,7 @@ dependencies = [ [[package]] name = "iota-common" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "futures", "parking_lot 0.12.3", @@ -6184,7 +6184,7 @@ dependencies = [ [[package]] name = "iota-config" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anemo", "anyhow", @@ -6211,7 +6211,7 @@ dependencies = [ [[package]] name = "iota-core" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anemo", "anyhow", @@ -6313,7 +6313,7 @@ dependencies = [ [[package]] name = "iota-cost" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "bcs", @@ -6368,7 +6368,7 @@ dependencies = [ [[package]] name = "iota-data-ingestion" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-trait", @@ -6402,7 +6402,7 @@ dependencies = [ [[package]] name = "iota-data-ingestion-core" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-trait", @@ -6429,7 +6429,7 @@ dependencies = [ [[package]] name = "iota-e2e-tests" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-trait", @@ -6460,7 +6460,7 @@ dependencies = [ "iota-node", "iota-protocol-config", "iota-rest-api", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-simulator", "iota-storage", "iota-swarm", @@ -6491,7 +6491,7 @@ dependencies = [ [[package]] name = "iota-enum-compat-util" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "serde_yaml", ] @@ -6529,7 +6529,7 @@ dependencies = [ [[package]] name = "iota-faucet" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-recursion", @@ -6543,7 +6543,7 @@ dependencies = [ "iota-json-rpc-types", "iota-keys", "iota-metrics", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-types", "parking_lot 0.12.3", "prometheus", @@ -6567,7 +6567,7 @@ dependencies = [ [[package]] name = "iota-framework" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "bcs", @@ -6588,7 +6588,7 @@ dependencies = [ [[package]] name = "iota-framework-snapshot" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "bcs", @@ -6603,7 +6603,7 @@ dependencies = [ [[package]] name = "iota-framework-tests" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "datatest-stable", "iota-adapter-latest", @@ -6623,7 +6623,7 @@ dependencies = [ [[package]] name = "iota-genesis-builder" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "bcs", @@ -6676,7 +6676,7 @@ dependencies = [ [[package]] name = "iota-genesis-common" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "iota-execution", "iota-protocol-config", @@ -6686,7 +6686,7 @@ dependencies = [ [[package]] name = "iota-graphql-config" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "quote 1.0.37", "syn 1.0.109", @@ -6694,7 +6694,7 @@ dependencies = [ [[package]] name = "iota-graphql-e2e-tests" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "datatest-stable", "iota-graphql-rpc", @@ -6705,7 +6705,7 @@ dependencies = [ [[package]] name = "iota-graphql-rpc" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-graphql", @@ -6744,7 +6744,7 @@ dependencies = [ "iota-package-resolver", "iota-protocol-config", "iota-rest-api", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-swarm-config", "iota-test-transaction-builder", "iota-types", @@ -6784,7 +6784,7 @@ dependencies = [ [[package]] name = "iota-graphql-rpc-client" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-graphql", @@ -6799,14 +6799,14 @@ dependencies = [ [[package]] name = "iota-graphql-rpc-headers" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "axum", ] [[package]] name = "iota-indexer" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-trait", @@ -6835,7 +6835,7 @@ dependencies = [ "iota-package-resolver", "iota-protocol-config", "iota-rest-api", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-swarm-config", "iota-test-transaction-builder", "iota-transaction-builder", @@ -6868,7 +6868,7 @@ dependencies = [ [[package]] name = "iota-indexer-builder" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-trait", @@ -6883,7 +6883,7 @@ dependencies = [ [[package]] name = "iota-json" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "bcs", @@ -6902,7 +6902,7 @@ dependencies = [ [[package]] name = "iota-json-rpc" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "arc-swap", @@ -6956,7 +6956,7 @@ dependencies = [ [[package]] name = "iota-json-rpc-api" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "fastcrypto", @@ -6975,7 +6975,7 @@ dependencies = [ [[package]] name = "iota-json-rpc-tests" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-trait", @@ -6994,7 +6994,7 @@ dependencies = [ "iota-open-rpc", "iota-open-rpc-macros", "iota-protocol-config", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-simulator", "iota-swarm-config", "iota-test-transaction-builder", @@ -7013,7 +7013,7 @@ dependencies = [ [[package]] name = "iota-json-rpc-types" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "bcs", @@ -7042,7 +7042,7 @@ dependencies = [ [[package]] name = "iota-keys" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "bip32", @@ -7061,7 +7061,7 @@ dependencies = [ [[package]] name = "iota-light-client" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-trait", @@ -7073,7 +7073,7 @@ dependencies = [ "iota-json-rpc-types", "iota-package-resolver", "iota-rest-api", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-types", "move-binary-format", "move-core-types", @@ -7085,7 +7085,7 @@ dependencies = [ [[package]] name = "iota-macros" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "futures", "iota-proc-macros", @@ -7095,7 +7095,7 @@ dependencies = [ [[package]] name = "iota-metric-checker" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "backoff", @@ -7116,7 +7116,7 @@ dependencies = [ [[package]] name = "iota-metrics" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anemo", "anemo-tower", @@ -7139,7 +7139,7 @@ dependencies = [ [[package]] name = "iota-move" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "better_any", @@ -7177,7 +7177,7 @@ dependencies = [ [[package]] name = "iota-move-build" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "fastcrypto", @@ -7200,7 +7200,7 @@ dependencies = [ [[package]] name = "iota-move-lsp" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "bin-version", "clap", @@ -7231,7 +7231,7 @@ dependencies = [ [[package]] name = "iota-network" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anemo", "anemo-build", @@ -7269,7 +7269,7 @@ dependencies = [ [[package]] name = "iota-network-stack" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anemo", "bcs", @@ -7292,7 +7292,7 @@ dependencies = [ [[package]] name = "iota-node" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anemo", "anemo-tower", @@ -7342,7 +7342,7 @@ dependencies = [ [[package]] name = "iota-open-rpc" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "bcs", @@ -7366,7 +7366,7 @@ dependencies = [ [[package]] name = "iota-open-rpc-macros" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "derive-syn-parse", "itertools 0.13.0", @@ -7378,7 +7378,7 @@ dependencies = [ [[package]] name = "iota-package-dump" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "bcs", @@ -7395,11 +7395,11 @@ dependencies = [ [[package]] name = "iota-package-management" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "iota-json-rpc-types", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-types", "move-core-types", "move-package", @@ -7410,7 +7410,7 @@ dependencies = [ [[package]] name = "iota-package-resolver" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "async-trait", "bcs", @@ -7433,7 +7433,7 @@ dependencies = [ [[package]] name = "iota-proc-macros" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "msim-macros", "proc-macro2 1.0.86", @@ -7443,7 +7443,7 @@ dependencies = [ [[package]] name = "iota-protocol-config" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "clap", "insta", @@ -7457,7 +7457,7 @@ dependencies = [ [[package]] name = "iota-protocol-config-macros" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "proc-macro2 1.0.86", "quote 1.0.37", @@ -7466,7 +7466,7 @@ dependencies = [ [[package]] name = "iota-replay" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-recursion", @@ -7482,7 +7482,7 @@ dependencies = [ "iota-json-rpc-api", "iota-json-rpc-types", "iota-protocol-config", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-storage", "iota-transaction-checks", "iota-types", @@ -7513,7 +7513,7 @@ dependencies = [ [[package]] name = "iota-rest-api" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-trait", @@ -7544,7 +7544,7 @@ dependencies = [ [[package]] name = "iota-rosetta" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-trait", @@ -7562,7 +7562,7 @@ dependencies = [ "iota-metrics", "iota-move-build", "iota-node", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-swarm-config", "iota-types", "move-core-types", @@ -7586,7 +7586,7 @@ dependencies = [ [[package]] name = "iota-rpc-loadgen" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-trait", @@ -7596,7 +7596,7 @@ dependencies = [ "futures", "iota-json-rpc-types", "iota-keys", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-types", "itertools 0.13.0", "serde", @@ -7631,7 +7631,7 @@ dependencies = [ [[package]] name = "iota-sdk" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-trait", @@ -7709,7 +7709,7 @@ dependencies = [ [[package]] name = "iota-simulator" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anemo", "anemo-tower", @@ -7731,7 +7731,7 @@ dependencies = [ [[package]] name = "iota-single-node-benchmark" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "async-trait", "bcs", @@ -7766,7 +7766,7 @@ dependencies = [ [[package]] name = "iota-snapshot" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "bcs", @@ -7794,7 +7794,7 @@ dependencies = [ [[package]] name = "iota-source-validation" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "colored", @@ -7804,7 +7804,7 @@ dependencies = [ "iota-json-rpc-types", "iota-move-build", "iota-package-management", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-test-transaction-builder", "iota-types", "move-binary-format", @@ -7826,7 +7826,7 @@ dependencies = [ [[package]] name = "iota-source-validation-service" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "axum", @@ -7842,7 +7842,7 @@ dependencies = [ "iota-metrics", "iota-move", "iota-move-build", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-source-validation", "jsonrpsee", "move-compiler", @@ -7865,7 +7865,7 @@ dependencies = [ [[package]] name = "iota-storage" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-trait", @@ -7919,7 +7919,7 @@ dependencies = [ [[package]] name = "iota-surfer" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "async-trait", "bcs", @@ -7948,7 +7948,7 @@ dependencies = [ [[package]] name = "iota-swarm" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "futures", @@ -7973,7 +7973,7 @@ dependencies = [ [[package]] name = "iota-swarm-config" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anemo", "anyhow", @@ -8000,12 +8000,12 @@ dependencies = [ [[package]] name = "iota-test-transaction-builder" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "bcs", "iota-genesis-builder", "iota-move-build", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-types", "move-core-types", "shared-crypto", @@ -8013,7 +8013,7 @@ dependencies = [ [[package]] name = "iota-tls" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "axum", @@ -8034,7 +8034,7 @@ dependencies = [ [[package]] name = "iota-tool" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anemo", "anemo-cli", @@ -8056,7 +8056,7 @@ dependencies = [ "iota-package-dump", "iota-protocol-config", "iota-replay", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-snapshot", "iota-storage", "iota-types", @@ -8079,7 +8079,7 @@ dependencies = [ [[package]] name = "iota-transaction-builder" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-trait", @@ -8095,7 +8095,7 @@ dependencies = [ [[package]] name = "iota-transaction-checks" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "fastcrypto-zkp", "iota-config", @@ -8109,7 +8109,7 @@ dependencies = [ [[package]] name = "iota-transactional-test-runner" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-trait", @@ -8158,7 +8158,7 @@ dependencies = [ [[package]] name = "iota-types" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anemo", "anyhow", @@ -8239,7 +8239,7 @@ dependencies = [ [[package]] name = "iota-upgrade-compatibility-transactional-tests" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "datatest-stable", @@ -8253,7 +8253,7 @@ dependencies = [ [[package]] name = "iota-util-mem" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "cfg-if", "ed25519-consensus", @@ -8271,7 +8271,7 @@ dependencies = [ [[package]] name = "iota-util-mem-derive" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "proc-macro2 1.0.86", "syn 1.0.109", @@ -8295,7 +8295,7 @@ dependencies = [ [[package]] name = "iota-verifier-transactional-tests" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "datatest-stable", "iota-transactional-test-runner", @@ -11766,7 +11766,7 @@ dependencies = [ [[package]] name = "prometheus-closure-metric" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "prometheus", @@ -13569,7 +13569,7 @@ dependencies = [ [[package]] name = "shared-crypto" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "bcs", "eyre", @@ -13705,7 +13705,7 @@ dependencies = [ [[package]] name = "simulacrum" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "async-trait", @@ -14421,7 +14421,7 @@ dependencies = [ [[package]] name = "telemetry-subscribers" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "atomic_float", "bytes", @@ -14497,7 +14497,7 @@ checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "test-cluster" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "anyhow", "bcs", @@ -14517,7 +14517,7 @@ dependencies = [ "iota-metrics", "iota-node", "iota-protocol-config", - "iota-sdk 0.7.0-alpha", + "iota-sdk 0.8.0-alpha", "iota-simulator", "iota-swarm", "iota-swarm-config", @@ -15238,7 +15238,7 @@ dependencies = [ [[package]] name = "transaction-fuzzer" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "iota-core", "iota-move-build", @@ -15344,7 +15344,7 @@ dependencies = [ [[package]] name = "typed-store" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "async-trait", "bcs", @@ -15375,7 +15375,7 @@ dependencies = [ [[package]] name = "typed-store-derive" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "itertools 0.13.0", "proc-macro2 1.0.86", @@ -15385,7 +15385,7 @@ dependencies = [ [[package]] name = "typed-store-error" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "serde", "thiserror", @@ -15393,7 +15393,7 @@ dependencies = [ [[package]] name = "typed-store-workspace-hack" -version = "0.7.0-alpha" +version = "0.8.0-alpha" dependencies = [ "libc", "memchr", diff --git a/Cargo.toml b/Cargo.toml index d9a5cb5b76b..277ac3a5492 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -161,7 +161,7 @@ members = [ [workspace.package] # This version string will be inherited by iota-core, iota-faucet, iota-node, iota-tools, iota-sdk, iota-move-build, and iota crates. -version = "0.7.0-alpha" +version = "0.8.0-alpha" [profile.release] # debug = 1 means line charts only, which is minimum needed for good stack traces diff --git a/crates/iota-graphql-e2e-tests/tests/call/simple.exp b/crates/iota-graphql-e2e-tests/tests/call/simple.exp index b4c44eda117..732d92b4bd4 100644 --- a/crates/iota-graphql-e2e-tests/tests/call/simple.exp +++ b/crates/iota-graphql-e2e-tests/tests/call/simple.exp @@ -114,11 +114,11 @@ task 15, lines 64-69: Headers: { "content-type": "application/json", "content-length": "157", - "x-iota-rpc-version": "0.7.0-testing-no-sha", + "x-iota-rpc-version": "0.8.0-testing-no-sha", "vary": "origin, access-control-request-method, access-control-request-headers", "access-control-allow-origin": "*", } -Service version: 0.7.0-testing-no-sha +Service version: 0.8.0-testing-no-sha Response: { "data": { "checkpoint": { @@ -375,7 +375,7 @@ Response: { "data": { "serviceConfig": { "availableVersions": [ - "0.7" + "0.8" ] } } diff --git a/crates/iota-open-rpc/spec/openrpc.json b/crates/iota-open-rpc/spec/openrpc.json index f5ca3c7c01e..5a54a311381 100644 --- a/crates/iota-open-rpc/spec/openrpc.json +++ b/crates/iota-open-rpc/spec/openrpc.json @@ -12,7 +12,7 @@ "name": "Apache-2.0", "url": "https://raw.githubusercontent.com/iotaledger/iota/main/LICENSE" }, - "version": "0.7.0-alpha" + "version": "0.8.0-alpha" }, "methods": [ { From b6e2f4014f78414484dd4508df551924d9aa1ca3 Mon Sep 17 00:00:00 2001 From: Junwei <v860117@gmail.com> Date: Thu, 12 Dec 2024 20:03:10 +0800 Subject: [PATCH 09/28] fix(workflow): remove duplicate definition (#4474) --- .github/workflows/release_docker.yml | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/.github/workflows/release_docker.yml b/.github/workflows/release_docker.yml index 0cdf3645e19..9acbe8dcc40 100644 --- a/.github/workflows/release_docker.yml +++ b/.github/workflows/release_docker.yml @@ -87,8 +87,6 @@ jobs: with: context: . file: docker/iota-node/Dockerfile - build-args: | - RUST_IMAGE_VERSION=${{ env.TOOLCHAIN_VERSION }}-bookworm platforms: linux/amd64 tags: ${{ steps.meta-node.outputs.tags }} push: true @@ -96,6 +94,7 @@ jobs: build-args: | GIT_REVISION=${{ env.GIT_REVISION }} BUILD_DATE=${{ env.BUILD_DATE }} + RUST_IMAGE_VERSION=${{ env.TOOLCHAIN_VERSION }}-bookworm build-iota-indexer: if: github.event_name == 'workflow_dispatch' && github.event.inputs.iota_indexer == 'true' || github.event_name == 'release' @@ -157,8 +156,6 @@ jobs: with: context: . file: docker/iota-indexer/Dockerfile - build-args: | - RUST_IMAGE_VERSION=${{ env.TOOLCHAIN_VERSION }}-bookworm platforms: linux/amd64 tags: ${{ steps.meta-indexer.outputs.tags }} push: true @@ -166,6 +163,7 @@ jobs: build-args: | GIT_REVISION=${{ env.GIT_REVISION }} BUILD_DATE=${{ env.BUILD_DATE }} + RUST_IMAGE_VERSION=${{ env.TOOLCHAIN_VERSION }}-bookworm build-iota-tools: if: github.event_name == 'workflow_dispatch' && github.event.inputs.iota_tools == 'true' || github.event_name == 'release' @@ -227,8 +225,6 @@ jobs: with: context: . file: docker/iota-tools/Dockerfile - build-args: | - RUST_IMAGE_VERSION=${{ env.TOOLCHAIN_VERSION }}-bookworm platforms: linux/amd64 tags: ${{ steps.meta-tools.outputs.tags }} push: true @@ -236,6 +232,7 @@ jobs: build-args: | GIT_REVISION=${{ env.GIT_REVISION }} BUILD_DATE=${{ env.BUILD_DATE }} + RUST_IMAGE_VERSION=${{ env.TOOLCHAIN_VERSION }}-bookworm build-iota-graphql-rpc: if: github.event_name == 'workflow_dispatch' && github.event.inputs.iota_graphql_rpc == 'true' || github.event_name == 'release' @@ -297,8 +294,6 @@ jobs: with: context: . file: docker/iota-graphql-rpc/Dockerfile - build-args: | - RUST_IMAGE_VERSION=${{ env.TOOLCHAIN_VERSION }}-bookworm platforms: linux/amd64 tags: ${{ steps.meta-tools.outputs.tags }} push: true @@ -306,3 +301,4 @@ jobs: build-args: | GIT_REVISION=${{ env.GIT_REVISION }} BUILD_DATE=${{ env.BUILD_DATE }} + RUST_IMAGE_VERSION=${{ env.TOOLCHAIN_VERSION }}-bookworm From 2b73ad7ac94573d1169cf8e13f2d28d6c03b234c Mon Sep 17 00:00:00 2001 From: JannemanDev <j.oonk@fontys.nl> Date: Thu, 12 Dec 2024 13:17:39 +0100 Subject: [PATCH 10/28] fix(docs): Fix typo (#4145) --- docs/content/developer/iota-move-ctf/introduction.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/developer/iota-move-ctf/introduction.mdx b/docs/content/developer/iota-move-ctf/introduction.mdx index 1b33e9f4639..c455535f862 100644 --- a/docs/content/developer/iota-move-ctf/introduction.mdx +++ b/docs/content/developer/iota-move-ctf/introduction.mdx @@ -21,7 +21,7 @@ The CTF contract are already deployed on the IOTA Testnet. To get started, you n 1. [Install the IOTA CLI Tool](../getting-started/install-iota.mdx) 2. [Connect to an IOTA Network](../getting-started/connect.mdx) -3. [Create and Address](../getting-started/get-address.mdx) +3. [Create an Address](../getting-started/get-address.mdx) 4. [Fund Your Address](../getting-started/get-coins.mdx) 5. Get the flags! From 882cbc4fb58c058415ad31d777894f12e1d6ac06 Mon Sep 17 00:00:00 2001 From: evavirseda <evirseda@boxfish.studio> Date: Thu, 12 Dec 2024 17:20:37 +0100 Subject: [PATCH 11/28] feat(sdk/dappkit): fix styles in the dropdown (#4374) * feat: fix styels * feat: add scrollable content * add item height --- .../src/components/AccountDropdownMenu.css.ts | 9 ++++++++- .../src/components/AccountDropdownMenu.tsx | 16 +++++++++------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/sdk/dapp-kit/src/components/AccountDropdownMenu.css.ts b/sdk/dapp-kit/src/components/AccountDropdownMenu.css.ts index ef0b38e5e9f..54b2ca54071 100644 --- a/sdk/dapp-kit/src/components/AccountDropdownMenu.css.ts +++ b/sdk/dapp-kit/src/components/AccountDropdownMenu.css.ts @@ -18,7 +18,7 @@ export const menuContent = style({ display: 'flex', flexDirection: 'column', width: 180, - maxHeight: 200, + maxHeight: 300, marginTop: 4, padding: 8, gap: 8, @@ -26,8 +26,15 @@ export const menuContent = style({ backgroundColor: themeVars.backgroundColors.dropdownMenu, }); +export const scrollableContent = style({ + overflowY: 'auto', + maxHeight: 300, + flexGrow: 1, +}); + export const menuItem = style({ padding: 8, + height: 40, userSelect: 'none', outline: 'none', display: 'flex', diff --git a/sdk/dapp-kit/src/components/AccountDropdownMenu.tsx b/sdk/dapp-kit/src/components/AccountDropdownMenu.tsx index cb602d9ebe1..9981b316814 100644 --- a/sdk/dapp-kit/src/components/AccountDropdownMenu.tsx +++ b/sdk/dapp-kit/src/components/AccountDropdownMenu.tsx @@ -41,13 +41,15 @@ export function AccountDropdownMenu({ currentAccount, size = 'lg' }: AccountDrop <DropdownMenu.Portal> <StyleMarker className={styles.menuContainer}> <DropdownMenu.Content className={styles.menuContent}> - {accounts.map((account) => ( - <AccountDropdownMenuItem - key={account.address} - account={account} - active={currentAccount.address === account.address} - /> - ))} + <div className={styles.scrollableContent}> + {accounts.map((account) => ( + <AccountDropdownMenuItem + key={account.address} + account={account} + active={currentAccount.address === account.address} + /> + ))} + </div> <DropdownMenu.Separator className={styles.separator} /> <DropdownMenu.Item className={clsx(styles.menuItem)} From c879d571086c2dda27d61c0a5ec8cabf59a13c3d Mon Sep 17 00:00:00 2001 From: JCNoguera <88061365+VmMad@users.noreply.github.com> Date: Thu, 12 Dec 2024 19:52:09 +0100 Subject: [PATCH 12/28] chore(explorer): only show max 15 elents in the activity table (#4482) --- apps/explorer/src/pages/home/Home.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/explorer/src/pages/home/Home.tsx b/apps/explorer/src/pages/home/Home.tsx index 057cb1c9e64..1cee4ba88ab 100644 --- a/apps/explorer/src/pages/home/Home.tsx +++ b/apps/explorer/src/pages/home/Home.tsx @@ -19,7 +19,7 @@ import { } from '~/components'; import { useNetwork } from '~/hooks'; -const TRANSACTIONS_LIMIT = 25; +const TRANSACTIONS_LIMIT = 15; function Home(): JSX.Element { const [network] = useNetwork(); From 4c11b01732b66a61c5c82c3290f954d78234d94f Mon Sep 17 00:00:00 2001 From: JCNoguera <88061365+VmMad@users.noreply.github.com> Date: Thu, 12 Dec 2024 19:53:35 +0100 Subject: [PATCH 13/28] fix(ui-kit): only call onClick if `Card` is not disabled (#4479) --- apps/ui-kit/src/lib/components/molecules/card/Card.tsx | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/apps/ui-kit/src/lib/components/molecules/card/Card.tsx b/apps/ui-kit/src/lib/components/molecules/card/Card.tsx index 1870f2e77c9..cc1b8368349 100644 --- a/apps/ui-kit/src/lib/components/molecules/card/Card.tsx +++ b/apps/ui-kit/src/lib/components/molecules/card/Card.tsx @@ -46,9 +46,14 @@ export function Card({ children, testId, }: CardProps) { + function handleOnClick() { + if (!isDisabled) { + onClick?.(); + } + } return ( <div - onClick={onClick} + onClick={handleOnClick} className={cx( 'relative inline-flex w-full items-center gap-3 rounded-xl px-sm py-xs', CARD_TYPE_CLASSES[type], From 9864dcb05fd8aef29d3cc152f3c3224a50bde4ed Mon Sep 17 00:00:00 2001 From: cpl121 <100352899+cpl121@users.noreply.github.com> Date: Thu, 12 Dec 2024 20:10:38 +0100 Subject: [PATCH 14/28] feat(sdk): add kiosk rules package id to .env.defaults for testnet(#4434) * feat(sdk): add kiosk rules package id to .env.defaults * feat(sdk): add a changeset --- .changeset/silly-bulldogs-divide.md | 6 ++++++ sdk/.env.defaults | 8 +++++++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 .changeset/silly-bulldogs-divide.md diff --git a/.changeset/silly-bulldogs-divide.md b/.changeset/silly-bulldogs-divide.md new file mode 100644 index 00000000000..9db48e0918f --- /dev/null +++ b/.changeset/silly-bulldogs-divide.md @@ -0,0 +1,6 @@ +--- +'@iota/kiosk': minor +'@iota/iota-sdk': minor +--- + +Add default royalty, kiosk lock, floor price & personal kiosk rules package ids to testnet network diff --git a/sdk/.env.defaults b/sdk/.env.defaults index 2d1458fa6dc..e876e2d7a9b 100644 --- a/sdk/.env.defaults +++ b/sdk/.env.defaults @@ -10,7 +10,13 @@ IOTA_NETWORKS = ' "url": "https://api.testnet.iota.cafe", "explorer": "https://explorer.rebased.iota.org", "chain": "iota:testnet", - "faucet": "https://faucet.testnet.iota.cafe" + "faucet": "https://faucet.testnet.iota.cafe", + "kiosk": { + "royaltyRulePackageId": "0x975f749f57701209454e4b9b9e33825ccb6a9abf57de2ce86979e5fa86c343f2", + "kioskLockRulePackageId": "0x975f749f57701209454e4b9b9e33825ccb6a9abf57de2ce86979e5fa86c343f2", + "floorPriceRulePackageId": "0x975f749f57701209454e4b9b9e33825ccb6a9abf57de2ce86979e5fa86c343f2", + "personalKioskRulePackageId": "0x975f749f57701209454e4b9b9e33825ccb6a9abf57de2ce86979e5fa86c343f2" + } }, "devnet": { "id": "devnet", From a183192c71d66329c2d730f466dddaaa4ef978c1 Mon Sep 17 00:00:00 2001 From: Thoralf-M <46689931+Thoralf-M@users.noreply.github.com> Date: Fri, 13 Dec 2024 09:50:00 +0100 Subject: [PATCH 15/28] feat(workflows): add release_move_ide.yml (#4332) * feat(workflows): add release_move_ide.yml * Fix target and filename, make binaries executable, update package.json * Remove push: branches: * Don't install nextest * Remove outdated comment --- .github/workflows/release_move_ide.yml | 143 ++++++++++++++++++ .../move-analyzer/editors/code/package.json | 7 +- .../editors/code/scripts/create_from_local.sh | 119 +++++++++++++++ .../move-analyzer/editors/code/src/context.ts | 4 +- 4 files changed, 268 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/release_move_ide.yml create mode 100755 external-crates/move/crates/move-analyzer/editors/code/scripts/create_from_local.sh diff --git a/.github/workflows/release_move_ide.yml b/.github/workflows/release_move_ide.yml new file mode 100644 index 00000000000..553b02e1f86 --- /dev/null +++ b/.github/workflows/release_move_ide.yml @@ -0,0 +1,143 @@ +name: Release Move IDE to VS Marketplace + +on: + ## Allow triggering this workflow manually via GitHub CLI/web + workflow_dispatch: + +env: + CARGO_TERM_COLOR: always + # Disable incremental compilation. + # + # Incremental compilation is useful as part of an edit-build-test-edit cycle, + # as it lets the compiler avoid recompiling code that hasn't changed. However, + # on CI, we're not making small edits; we're almost always building the entire + # project from scratch. Thus, incremental compilation on CI actually + # introduces *additional* overhead to support making future builds + # faster...but no future builds will ever occur in any given CI environment. + # + # See https://matklad.github.io/2021/09/04/fast-rust-builds.html#ci-workflow + # for details. + CARGO_INCREMENTAL: 0 + # Allow more retries for network requests in cargo (downloading crates) and + # rustup (installing toolchains). This should help to reduce flaky CI failures + # from transient network timeouts or other issues. + CARGO_NET_RETRY: 10 + RUSTUP_MAX_RETRIES: 10 + # Don't emit giant backtraces in the CI logs. + RUST_BACKTRACE: short + TMP_BUILD_DIR: "./tmp/" + +jobs: + build-move-analyzer: + name: Build move-analyzer + strategy: + matrix: + os: [ + self-hosted, # ubuntu-x86_64 + macos-latest, # macos-arm64 + macos-latest-large, # macos-x86_64 + windows-latest, # windows-x86_64 + ] + fail-fast: false + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # pin@v4 + - name: Set os/arch variables (Windows) + if: ${{ matrix.os == 'windows-latest' }} + shell: bash + run: | + export arch=$(uname -m) + export os_type="windows-${arch}" + echo "os_type=${os_type}" >> $GITHUB_ENV + echo "extention=$(echo ".exe")" >> $GITHUB_ENV + + - name: Set os/arch variables (self hosted ubuntu) + if: ${{ matrix.os == 'self-hosted' }} + shell: bash + run: | + export arch=$(uname -m) + export os_type="linux-${arch}" + echo "os_type=${os_type}" >> $GITHUB_ENV + + - name: Set os/arch variables + if: ${{ matrix.os == 'macos-latest' }} + shell: bash + run: | + export arch=$(uname -m) + export system_os=$(echo ${{ matrix.os }} | cut -d- -f1) + export os_type="${system_os}-${arch}" + echo "os_type=${system_os}-${arch}" >> $GITHUB_ENV + + - name: Cargo build for ${{ matrix.os }} platform + shell: bash + run: | + [ -f ~/.cargo/env ] && source ~/.cargo/env ; cargo build --bin move-analyzer --release + + # Filenames need to match external-crates/move/crates/move-analyzer/editors/code/scripts/create_from_local.sh + - name: Rename binaries for ${{ matrix.os }} + shell: bash + run: | + if [ ${{ matrix.os }} == "macos-latest" ]; then + OS_TARGET="macos-arm64" + elif [ ${{ matrix.os }} == "macos-latest-large" ]; then + OS_TARGET="macos-x86_64" + elif [ ${{ matrix.os }} == "windows-latest" ]; then + OS_TARGET="windows-x86_64" + elif [ ${{ matrix.os }} == "self-hosted" ]; then + OS_TARGET="ubuntu-x86_64" + else + echo "Unknown OS" ${{ matrix.os }} + exit 1 + fi + + mkdir -p ${{ env.TMP_BUILD_DIR }} + mv ./target/release/move-analyzer${{ env.extention }} ${{ env.TMP_BUILD_DIR }}/move-analyzer-$OS_TARGET${{ env.extention }} + + - name: Print built file + run: ls -R ${{ env.TMP_BUILD_DIR }} + + - name: Upload move-analyzer binary + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.os }}-move-analyzer + path: ${{ env.TMP_BUILD_DIR }} + if-no-files-found: error + + build-and-publish-vs-code-extension: + name: Build and publish VS Code extension with move-analyzer binaries + needs: build-move-analyzer + runs-on: self-hosted + steps: + - name: Checkout + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # Pin v4.1.1 + with: + ref: ${{ github.event.inputs.iota_repo_ref || github.ref }} + + - name: Download move-analyzer binaries + uses: actions/download-artifact@v4 + with: + merge-multiple: true + path: "external-crates/move/crates/move-analyzer/editors/code/move-analyzer-binaries" + + - name: Print downloaded binaries + run: ls -R external-crates/move/crates/move-analyzer/editors/code/move-analyzer-binaries + + - name: Setup Node + uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # pin@v4.0.2 + with: + node-version: "20" + + - name: Install dependencies + working-directory: ./external-crates/move/crates/move-analyzer/editors/code + run: | + npm install + npm install --save-dev @types/node @types/semver + npm install -g vsce + sudo apt install zsh -y + + - name: Build and publish VS Code extension with move-analyzer binaries + working-directory: external-crates/move/crates/move-analyzer/editors/code/ + run: | + # Set the Personal Access Token to publish to the Visual Studio Marketplace + export VSCE_PAT=${{ secrets.VS_MARKETPLACE_TOKEN }} + ./scripts/create_from_local.sh -pub move-analyzer-binaries diff --git a/external-crates/move/crates/move-analyzer/editors/code/package.json b/external-crates/move/crates/move-analyzer/editors/code/package.json index 7d23d4246b1..c5199da4812 100644 --- a/external-crates/move/crates/move-analyzer/editors/code/package.json +++ b/external-crates/move/crates/move-analyzer/editors/code/package.json @@ -23,6 +23,7 @@ "keywords": [ "move", "Iota", + "iotaledger", "IOTA Foundation" ], "main": "./out/src/main.js", @@ -124,13 +125,13 @@ "menus": { "commandPalette": [ { - "command": "iota.serverVersion" + "command": "iota-move.serverVersion" }, { - "command": "iota.build" + "command": "iota-move.build" }, { - "command": "iota.test" + "command": "iota-move.test" } ] } diff --git a/external-crates/move/crates/move-analyzer/editors/code/scripts/create_from_local.sh b/external-crates/move/crates/move-analyzer/editors/code/scripts/create_from_local.sh new file mode 100755 index 00000000000..0f9cd3c89e2 --- /dev/null +++ b/external-crates/move/crates/move-analyzer/editors/code/scripts/create_from_local.sh @@ -0,0 +1,119 @@ +#!/bin/zsh +# Copyright (c) Mysten Labs, Inc. +# Modifications Copyright (c) 2024 IOTA Stiftung +# SPDX-License-Identifier: Apache-2.0 + +set -e + +usage() { + SCRIPT_NAME=$(basename "$1") + >&2 echo "Usage: $SCRIPT_NAME -pkg|-pub [-h] BINDIR" + >&2 echo "" + >&2 echo "Options:" + >&2 echo " -pub Publish extensions for all targets" + >&2 echo " -pkg Package extensions for all targets" + >&2 echo " -h Print this message" + >&2 echo " BINDIR Directory containing pre-built IOTA move-analyzer binaries" +} + +clean_tmp_dir() { + test -d "$TMP_DIR" && rm -fr "$TMP_DIR" +} + +if [[ "$@" == "" ]]; then + usage $0 + exit 1 +fi + +BIN_DIR="" +for cmd in "$@" +do + if [[ "$cmd" == "-h" ]]; then + usage $0 + exit 0 + elif [[ "$cmd" == "-pkg" ]]; then + OP="package" + OPTS="-omove-VSCODE_OS.vsix" + elif [[ "$cmd" == "-pub" ]]; then + OP="publish" + OPTS="" + else + BIN_DIR=$cmd + + if [[ ! -d "$BIN_DIR" ]]; then + echo IOTA binary directory $BIN_DIR does not exist + usage $0 + exit 1 + fi + fi +done + +if [[ $BIN_DIR == "" ]]; then + # directory storing IOTA binaries have not been defined + usage $0 + exit 1 +fi + +# a map from os version identifiers in IOTA's binary distribution to os version identifiers +# representing VSCode's target platforms used for creating platform-specific plugin distributions +declare -A SUPPORTED_OS +SUPPORTED_OS[macos-arm64]=darwin-arm64 +SUPPORTED_OS[macos-x86_64]=darwin-x64 +SUPPORTED_OS[ubuntu-x86_64]=linux-x64 +SUPPORTED_OS[windows-x86_64]=win32-x64 + +TMP_DIR=$( mktemp -d -t vscode-createXXX ) +trap "clean_tmp_dir $TMP_DIR" EXIT + +BIN_FILES=($BIN_DIR/*) + +if (( ${#BIN_FILES[@]} != 4 )); then + echo "IOTA binary directory $BIN_DIR should only contain binaries for the four supported platforms" + exit 1 +fi + + +for IOTA_MOVE_ANALYZER_BIN in "${BIN_FILES[@]}"; do + echo "Processing" $IOTA_MOVE_ANALYZER_BIN + # Extract just the file name + FILE_NAME=${IOTA_MOVE_ANALYZER_BIN##*/} + # Get the OS target + OS_TARGET="${FILE_NAME#move-analyzer-}" + # Remove ".exe" for Windows + OS_TARGET="${OS_TARGET%.exe}" + + if [[ ! -v SUPPORTED_OS[$OS_TARGET] ]]; then + echo "Found IOTA binary archive for a platform that is not supported: $IOTA_MOVE_ANALYZER_BIN" + echo "Supported platforms:" + for PLATFORM in ${(k)SUPPORTED_OS}; do + echo "\t$PLATFORM" + done + exit 1 + fi + + # copy move-analyzer binary to the appropriate location where it's picked up when bundling the + # extension + LANG_SERVER_DIR="language-server" + # remove existing one to have only the binary for the target OS + rm -rf $LANG_SERVER_DIR + mkdir $LANG_SERVER_DIR + + # Copy renamed + if [[ "$IOTA_MOVE_ANALYZER_BIN" == *.exe ]]; then + cp $IOTA_MOVE_ANALYZER_BIN $LANG_SERVER_DIR/move-analyzer.exe + else + cp $IOTA_MOVE_ANALYZER_BIN $LANG_SERVER_DIR/move-analyzer + # Make binaries executable + chmod +x $LANG_SERVER_DIR/move-analyzer + fi + + VSCODE_OS=${SUPPORTED_OS[$OS_TARGET]} + vsce "$OP" ${OPTS//VSCODE_OS/$VSCODE_OS} --target "$VSCODE_OS" + + rm -rf $LANG_SERVER_DIR + +done + + +# build a "generic" version of the extension that does not bundle the move-analyzer binary +vsce "$OP" ${OPTS//VSCODE_OS/generic} diff --git a/external-crates/move/crates/move-analyzer/editors/code/src/context.ts b/external-crates/move/crates/move-analyzer/editors/code/src/context.ts index 686af1638a2..c377e52a620 100644 --- a/external-crates/move/crates/move-analyzer/editors/code/src/context.ts +++ b/external-crates/move/crates/move-analyzer/editors/code/src/context.ts @@ -359,7 +359,7 @@ export class Context { await vscode.window.showInformationMessage( `The move-analyzer binary at the user-specified path ('${this.configuration.serverPath}') ` + 'is not working. See troubleshooting instructions in the README file accompanying ' + - 'Move VSCode extension by IOTA Foundation in the VSCode marketplace', + 'Move VSCode extension by iotaledger in the VSCode marketplace', { modal: true }, items, ); @@ -410,7 +410,7 @@ export class Context { await vscode.window.showErrorMessage( 'Pre-built move-analyzer binary is not available for this platform. ' + 'Follow the instructions to manually install the language server in the README ' + - 'file accompanying Move VSCode extension by IOTA Foundation in the VSCode marketplace', + 'file accompanying Move VSCode extension by iotaledger in the VSCode marketplace', { modal: true }, items, ); From 1dea4c02ae575101024541538156d3f86b4dcf65 Mon Sep 17 00:00:00 2001 From: Konstantinos Demartinos <konstantinos.demartinos@iota.org> Date: Fri, 13 Dec 2024 11:55:13 +0200 Subject: [PATCH 16/28] fix(ci): use dedicated rosetta config dir (#4473) * fix(ci): use dedicated rosetta config dir * Add rosetta workflow and diff tag * dprint * validation --------- Co-authored-by: Chloe Martin <chloedaughterofmars@gmail.com> --- .github/actions/diffs/action.yml | 3 ++ .github/scripts/rosetta/setup.sh | 8 +++-- .github/workflows/_rosetta.yml | 55 +++++++++++++++++++++++++++++++ .github/workflows/_rust_tests.yml | 33 ------------------- .github/workflows/hierarchy.yml | 12 +++++++ 5 files changed, 76 insertions(+), 35 deletions(-) create mode 100644 .github/workflows/_rosetta.yml diff --git a/.github/actions/diffs/action.yml b/.github/actions/diffs/action.yml index c7bc240b392..f940c9b26d9 100644 --- a/.github/actions/diffs/action.yml +++ b/.github/actions/diffs/action.yml @@ -59,6 +59,9 @@ runs: - "examples/**" - "iota_programmability/**" - ".github/workflows/_move_tests.yml" + isRosetta: + - ".github/scripts/rosetta/**" + - "crates/iota-rosetta/**" isExternalCrates: - "external-crates/move/crates/**" isReleaseNotesEligible: diff --git a/.github/scripts/rosetta/setup.sh b/.github/scripts/rosetta/setup.sh index 6ad5bef07a6..308006ca289 100755 --- a/.github/scripts/rosetta/setup.sh +++ b/.github/scripts/rosetta/setup.sh @@ -7,11 +7,15 @@ echo "Install binaries" cargo install --locked --bin iota --path crates/iota cargo install --locked --bin iota-rosetta --path crates/iota-rosetta +echo "create dedicated config dir for IOTA genesis" +CONFIG_DIR="~/.iota/rosetta_config" +mkdir -p $CONFIG_DIR + echo "run IOTA genesis" -iota genesis +iota genesis -f --working-dir $CONFIG_DIR echo "generate rosetta configuration" iota-rosetta generate-rosetta-cli-config --online-url http://127.0.0.1:9002 --offline-url http://127.0.0.1:9003 echo "install rosetta-cli" -curl -sSfL https://raw.githubusercontent.com/coinbase/rosetta-cli/master/scripts/install.sh | sh -s \ No newline at end of file +curl -sSfL https://raw.githubusercontent.com/coinbase/rosetta-cli/master/scripts/install.sh | sh -s diff --git a/.github/workflows/_rosetta.yml b/.github/workflows/_rosetta.yml new file mode 100644 index 00000000000..423158a1f47 --- /dev/null +++ b/.github/workflows/_rosetta.yml @@ -0,0 +1,55 @@ +name: Rosetta validation + +on: workflow_call + +concurrency: + group: rosetta-validation-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: ${{ github.ref != 'refs/heads/develop' }} + +env: + CARGO_TERM_COLOR: always + RUST_LOG: "error" + # Don't emit giant backtraces in the CI logs. + RUST_BACKTRACE: short + CARGO_INCREMENTAL: 0 + # Allow more retries for network requests in cargo (downloading crates) and + # rustup (installing toolchains). This should help to reduce flaky CI failures + # from transient network timeouts or other issues. + CARGO_NET_RETRY: 10 + RUSTUP_MAX_RETRIES: 10 + # RUSTFLAGS: -D warnings + RUSTDOCFLAGS: -D warnings + +jobs: + validation: + timeout-minutes: 45 + runs-on: [self-hosted] + steps: + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + + - name: Setup environment + run: .github/scripts/rosetta/setup.sh + shell: bash + + - name: Start local IOTA network + run: | + iota start --no-full-node & + shell: bash + + - name: Start Rosetta servers + run: .github/scripts/rosetta/start_rosetta.sh + shell: bash + + - name: Sleep for 20 seconds + run: sleep 20s + shell: bash + + - name: Run check:construction test + run: | + ./bin/rosetta-cli --configuration-file rosetta_cli.json check:construction + shell: bash + + - name: Run check:data test + run: | + ./bin/rosetta-cli --configuration-file rosetta_cli.json check:data + shell: bash diff --git a/.github/workflows/_rust_tests.yml b/.github/workflows/_rust_tests.yml index da2303c56e4..75a96614c06 100644 --- a/.github/workflows/_rust_tests.yml +++ b/.github/workflows/_rust_tests.yml @@ -159,39 +159,6 @@ jobs: eval ${command} - rosetta-validation: - timeout-minutes: 45 - runs-on: [self-hosted] - steps: - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - - - name: Setup environment - run: .github/scripts/rosetta/setup.sh - shell: bash - - - name: Start local IOTA network - run: | - iota start --no-full-node & - shell: bash - - - name: Start Rosetta servers - run: .github/scripts/rosetta/start_rosetta.sh - shell: bash - - - name: Sleep for 20 seconds - run: sleep 20s - shell: bash - - - name: Run check:construction test - run: | - ./bin/rosetta-cli --configuration-file rosetta_cli.json check:construction - shell: bash - - - name: Run check:data test - run: | - ./bin/rosetta-cli --configuration-file rosetta_cli.json check:data - shell: bash - graphql-rpc: name: graphql-rpc timeout-minutes: 45 diff --git a/.github/workflows/hierarchy.yml b/.github/workflows/hierarchy.yml index 9c61f02a77d..c5def7a8b1b 100644 --- a/.github/workflows/hierarchy.yml +++ b/.github/workflows/hierarchy.yml @@ -20,6 +20,7 @@ jobs: outputs: isRust: ${{ steps.diff.outputs.isRust }} isMove: ${{ steps.diff.outputs.isMove }} + isRosetta: ${{ steps.diff.outputs.isRosetta }} isDoc: ${{ steps.diff.outputs.isDoc }} isReleaseNotesEligible: ${{ steps.diff.outputs.isReleaseNotesEligible }} isExternalCrates: ${{ steps.diff.outputs.isExternalCrates }} @@ -107,6 +108,17 @@ jobs: with: isRust: ${{ needs.diff.outputs.isRust == 'true' }} + rosetta: + needs: + - diff + - dprint-format + - license-check + - typos + if: | + !cancelled() && !failure() && + (needs.diff.outputs.isRosetta == 'true' || needs.diff.outputs.isRust == 'true') + uses: ./.github/workflows/_rosetta.yml + e2e: if: (!cancelled() && !failure() && (!github.event.pull_request.draft || github.ref_name == 'develop')) needs: From 18f998d10bcd74fc4475934624a6e53a18c1a5e6 Mon Sep 17 00:00:00 2001 From: Marc Espin <mespinsanz@gmail.com> Date: Fri, 13 Dec 2024 11:43:53 +0100 Subject: [PATCH 17/28] refactor(wallet-dashboard): Clean up unused components (#4487) --- .../transactions/StakeTransactionCard.tsx | 47 --------------- .../transactions/UnstakeTransactionCard.tsx | 58 ------------------- .../components/transactions/index.ts | 2 - sdk/typescript/src/version.ts | 2 +- 4 files changed, 1 insertion(+), 108 deletions(-) delete mode 100644 apps/wallet-dashboard/components/transactions/StakeTransactionCard.tsx delete mode 100644 apps/wallet-dashboard/components/transactions/UnstakeTransactionCard.tsx diff --git a/apps/wallet-dashboard/components/transactions/StakeTransactionCard.tsx b/apps/wallet-dashboard/components/transactions/StakeTransactionCard.tsx deleted file mode 100644 index adfc74a33ec..00000000000 --- a/apps/wallet-dashboard/components/transactions/StakeTransactionCard.tsx +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// Modifications Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -import { Box } from '..'; -import { TransactionAmount } from './'; -import { formatPercentageDisplay, useGetValidatorsApy } from '@iota/core'; -import type { IotaEvent } from '@iota/iota-sdk/client'; -import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; - -interface StakeTransactionCardProps { - event: IotaEvent; -} - -export default function StakeTransactionCard({ event }: StakeTransactionCardProps) { - const json = event.parsedJson as { amount: string; validator_address: string; epoch: string }; - const validatorAddress = json?.validator_address; - const stakedAmount = json?.amount; - - const { data: rollingAverageApys } = useGetValidatorsApy(); - - const { apy, isApyApproxZero } = rollingAverageApys?.[validatorAddress] ?? { - apy: null, - }; - - return ( - <Box> - <div className="divide-gray-40 flex flex-col divide-x-0 divide-y divide-solid"> - {stakedAmount && ( - <TransactionAmount - amount={stakedAmount} - coinType={IOTA_TYPE_ARG} - label="Stake" - /> - )} - <div className="flex flex-col"> - <div className="flex w-full justify-between py-3.5"> - <div className="text-steel flex items-baseline justify-center gap-1"> - APY - </div> - {formatPercentageDisplay(apy, '--', isApyApproxZero)} - </div> - </div> - </div> - </Box> - ); -} diff --git a/apps/wallet-dashboard/components/transactions/UnstakeTransactionCard.tsx b/apps/wallet-dashboard/components/transactions/UnstakeTransactionCard.tsx deleted file mode 100644 index 92419a8c3ec..00000000000 --- a/apps/wallet-dashboard/components/transactions/UnstakeTransactionCard.tsx +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (c) Mysten Labs, Inc. -// Modifications Copyright (c) 2024 IOTA Stiftung -// SPDX-License-Identifier: Apache-2.0 - -import { useFormatCoin } from '@iota/core'; -import type { IotaEvent } from '@iota/iota-sdk/client'; -import { IOTA_TYPE_ARG } from '@iota/iota-sdk/utils'; -import { Box } from '..'; -import { TransactionAmount } from './'; - -interface UnstakeTransactionCardProps { - event: IotaEvent; -} - -export default function UnstakeTransactionCard({ event }: UnstakeTransactionCardProps) { - const eventJson = event.parsedJson as { - principal_amount?: number; - reward_amount?: number; - validator_address?: string; - }; - const principalAmount = eventJson?.principal_amount || 0; - const rewardAmount = eventJson?.reward_amount || 0; - const totalAmount = Number(principalAmount) + Number(rewardAmount); - const [formatPrinciple, symbol] = useFormatCoin(principalAmount, IOTA_TYPE_ARG); - const [formattedRewards] = useFormatCoin(rewardAmount || 0, IOTA_TYPE_ARG); - - return ( - <Box> - <div className="divide-gray-40 flex flex-col divide-x-0 divide-y divide-solid"> - {totalAmount && ( - <TransactionAmount - amount={totalAmount} - coinType={IOTA_TYPE_ARG} - label="Total" - /> - )} - - <div className="flex w-full justify-between py-3.5"> - <div className="text-steel flex items-baseline gap-1">Your IOTA Stake</div> - - <div className="text-steel flex items-baseline gap-1"> - {formatPrinciple} {symbol} - </div> - </div> - - <div className="flex w-full justify-between py-3.5"> - <div className="text-steel flex items-baseline gap-1"> - Staking Rewards Earned - </div> - - <div className="text-steel flex items-baseline gap-1"> - {formattedRewards} {symbol} - </div> - </div> - </div> - </Box> - ); -} diff --git a/apps/wallet-dashboard/components/transactions/index.ts b/apps/wallet-dashboard/components/transactions/index.ts index 509933e7c10..1dc714be773 100644 --- a/apps/wallet-dashboard/components/transactions/index.ts +++ b/apps/wallet-dashboard/components/transactions/index.ts @@ -2,8 +2,6 @@ // SPDX-License-Identifier: Apache-2.0 export { default as TransactionAmount } from './TransactionAmount'; -export { default as StakeTransactionCard } from './StakeTransactionCard'; -export { default as UnstakeTransactionCard } from './UnstakeTransactionCard'; export { default as TransactionSummary } from './TransactionSummary'; export * from './TransactionTile'; export { default as TransactionIcon } from './TransactionIcon'; diff --git a/sdk/typescript/src/version.ts b/sdk/typescript/src/version.ts index 5f991cdfb70..8e619f300a4 100644 --- a/sdk/typescript/src/version.ts +++ b/sdk/typescript/src/version.ts @@ -5,4 +5,4 @@ // This file is generated by genversion.mjs. Do not edit it directly. export const PACKAGE_VERSION = '0.3.1'; -export const TARGETED_RPC_VERSION = '0.7.0-alpha'; +export const TARGETED_RPC_VERSION = '0.8.0-alpha'; From 1520c91068b7cd00027612f6bb8c6efb05c07bea Mon Sep 17 00:00:00 2001 From: Pavlo Botnar <pavlo.botnar@gmail.com> Date: Fri, 13 Dec 2024 13:10:39 +0200 Subject: [PATCH 18/28] fix(iota-genesis-builder): address_swap_map_path becomes optional (#4490) --- crates/iota-genesis-builder/src/main.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/iota-genesis-builder/src/main.rs b/crates/iota-genesis-builder/src/main.rs index 403080b5ee7..e0adc0db630 100644 --- a/crates/iota-genesis-builder/src/main.rs +++ b/crates/iota-genesis-builder/src/main.rs @@ -46,7 +46,7 @@ enum Snapshot { long, help = "Path to the address swap map file. This must be a CSV file with two columns, where an entry contains in the first column an IotaAddress present in the Hornet full-snapshot and in the second column an IotaAddress that will be used for the swap." )] - address_swap_map_path: String, + address_swap_map_path: Option<String>, #[clap(long, value_parser = clap::value_parser!(MigrationTargetNetwork), help = "Target network for migration")] target_network: MigrationTargetNetwork, }, @@ -84,7 +84,11 @@ fn main() -> Result<()> { CoinType::Iota => scale_amount_for_iota(snapshot_parser.total_supply()?)?, }; - let address_swap_map = AddressSwapMap::from_csv(&address_swap_map_path)?; + let address_swap_map = if let Some(address_swap_map_path) = address_swap_map_path { + AddressSwapMap::from_csv(&address_swap_map_path)? + } else { + AddressSwapMap::default() + }; // Prepare the migration using the parser output stream let migration = Migration::new( snapshot_parser.target_milestone_timestamp(), From cf7ec2bd6de6bf6054e53ea718c9a61fe5d39a40 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 13 Dec 2024 12:31:33 +0100 Subject: [PATCH 19/28] Version Packages (#4484) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Begoña Alvarez <balvarez@boxfish.studio> --- .changeset/silly-bulldogs-divide.md | 6 ------ sdk/create-dapp/CHANGELOG.md | 8 ++++++++ sdk/create-dapp/package.json | 2 +- sdk/dapp-kit/CHANGELOG.md | 8 ++++++++ sdk/dapp-kit/package.json | 2 +- sdk/graphql-transport/CHANGELOG.md | 7 +++++++ sdk/graphql-transport/package.json | 2 +- sdk/kiosk/CHANGELOG.md | 12 ++++++++++++ sdk/kiosk/package.json | 2 +- sdk/typescript/CHANGELOG.md | 7 +++++++ sdk/typescript/package.json | 2 +- sdk/typescript/src/version.ts | 2 +- sdk/wallet-standard/CHANGELOG.md | 7 +++++++ sdk/wallet-standard/package.json | 2 +- 14 files changed, 56 insertions(+), 13 deletions(-) delete mode 100644 .changeset/silly-bulldogs-divide.md diff --git a/.changeset/silly-bulldogs-divide.md b/.changeset/silly-bulldogs-divide.md deleted file mode 100644 index 9db48e0918f..00000000000 --- a/.changeset/silly-bulldogs-divide.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@iota/kiosk': minor -'@iota/iota-sdk': minor ---- - -Add default royalty, kiosk lock, floor price & personal kiosk rules package ids to testnet network diff --git a/sdk/create-dapp/CHANGELOG.md b/sdk/create-dapp/CHANGELOG.md index 1354dbff338..d04a319a617 100644 --- a/sdk/create-dapp/CHANGELOG.md +++ b/sdk/create-dapp/CHANGELOG.md @@ -1,5 +1,13 @@ # @iota/create-dapp +## 0.2.2 + +### Patch Changes + +- Updated dependencies [9864dcb] + - @iota/iota-sdk@0.4.0 + - @iota/dapp-kit@0.3.2 + ## 0.2.1 ### Patch Changes diff --git a/sdk/create-dapp/package.json b/sdk/create-dapp/package.json index af275038111..29361e97cce 100644 --- a/sdk/create-dapp/package.json +++ b/sdk/create-dapp/package.json @@ -3,7 +3,7 @@ "author": "IOTA Foundation <info@iota.org>", "description": "A CLI for creating new IOTA dApps", "homepage": "https://docs.iota.org/references/ts-sdk/typescript/", - "version": "0.2.1", + "version": "0.2.2", "license": "Apache-2.0", "files": [ "CHANGELOG.md", diff --git a/sdk/dapp-kit/CHANGELOG.md b/sdk/dapp-kit/CHANGELOG.md index c385559519c..224182b16a1 100644 --- a/sdk/dapp-kit/CHANGELOG.md +++ b/sdk/dapp-kit/CHANGELOG.md @@ -1,5 +1,13 @@ # @iota/dapp-kit +## 0.3.2 + +### Patch Changes + +- Updated dependencies [9864dcb] + - @iota/iota-sdk@0.4.0 + - @iota/wallet-standard@0.2.2 + ## 0.3.1 ### Patch Changes diff --git a/sdk/dapp-kit/package.json b/sdk/dapp-kit/package.json index 4060a691508..096b7694d2e 100644 --- a/sdk/dapp-kit/package.json +++ b/sdk/dapp-kit/package.json @@ -3,7 +3,7 @@ "author": "IOTA Foundation <info@iota.org>", "description": "A collection of React hooks and components for interacting with the IOTA blockchain and wallets.", "homepage": "https://docs.iota.org/references/ts-sdk/dapp-kit/", - "version": "0.3.1", + "version": "0.3.2", "license": "Apache-2.0", "files": [ "CHANGELOG.md", diff --git a/sdk/graphql-transport/CHANGELOG.md b/sdk/graphql-transport/CHANGELOG.md index 09c3bda7086..ab39c68ca55 100644 --- a/sdk/graphql-transport/CHANGELOG.md +++ b/sdk/graphql-transport/CHANGELOG.md @@ -1,5 +1,12 @@ # @iota/graphql-transport +## 0.2.2 + +### Patch Changes + +- Updated dependencies [9864dcb] + - @iota/iota-sdk@0.4.0 + ## 0.2.1 ### Patch Changes diff --git a/sdk/graphql-transport/package.json b/sdk/graphql-transport/package.json index 2227a81a102..262ab7e6e3d 100644 --- a/sdk/graphql-transport/package.json +++ b/sdk/graphql-transport/package.json @@ -1,6 +1,6 @@ { "name": "@iota/graphql-transport", - "version": "0.2.1", + "version": "0.2.2", "description": "A GraphQL transport to allow IotaClient to work with RPC 2.0", "license": "Apache-2.0", "author": "IOTA Foundation <info@iota.org>", diff --git a/sdk/kiosk/CHANGELOG.md b/sdk/kiosk/CHANGELOG.md index 64072a1683d..893388e7e87 100644 --- a/sdk/kiosk/CHANGELOG.md +++ b/sdk/kiosk/CHANGELOG.md @@ -1,5 +1,17 @@ # @iota/kiosk +## 0.3.0 + +### Minor Changes + +- 9864dcb: Add default royalty, kiosk lock, floor price & personal kiosk rules package ids to + testnet network + +### Patch Changes + +- Updated dependencies [9864dcb] + - @iota/iota-sdk@0.4.0 + ## 0.2.1 ### Patch Changes diff --git a/sdk/kiosk/package.json b/sdk/kiosk/package.json index ac2524cfc11..e210f5b4661 100644 --- a/sdk/kiosk/package.json +++ b/sdk/kiosk/package.json @@ -2,7 +2,7 @@ "name": "@iota/kiosk", "author": "IOTA Foundation <info@iota.org>", "description": "IOTA Kiosk library", - "version": "0.2.1", + "version": "0.3.0", "license": "Apache-2.0", "type": "commonjs", "main": "./dist/cjs/index.js", diff --git a/sdk/typescript/CHANGELOG.md b/sdk/typescript/CHANGELOG.md index 21d1242a7af..d69da4adad8 100644 --- a/sdk/typescript/CHANGELOG.md +++ b/sdk/typescript/CHANGELOG.md @@ -1,5 +1,12 @@ # @iota/iota-sdk +## 0.4.0 + +### Minor Changes + +- 9864dcb: Add default royalty, kiosk lock, floor price & personal kiosk rules package ids to + testnet network + ## 0.3.1 ### Patch Changes diff --git a/sdk/typescript/package.json b/sdk/typescript/package.json index 2285a952c73..45cf01555b8 100644 --- a/sdk/typescript/package.json +++ b/sdk/typescript/package.json @@ -3,7 +3,7 @@ "author": "IOTA Foundation <info@iota.org>", "description": "IOTA TypeScript API", "homepage": "https://docs.iota.org/references/ts-sdk/typescript/", - "version": "0.3.1", + "version": "0.4.0", "license": "Apache-2.0", "sideEffects": false, "files": [ diff --git a/sdk/typescript/src/version.ts b/sdk/typescript/src/version.ts index 8e619f300a4..d2405a15cce 100644 --- a/sdk/typescript/src/version.ts +++ b/sdk/typescript/src/version.ts @@ -4,5 +4,5 @@ // This file is generated by genversion.mjs. Do not edit it directly. -export const PACKAGE_VERSION = '0.3.1'; +export const PACKAGE_VERSION = '0.4.0'; export const TARGETED_RPC_VERSION = '0.8.0-alpha'; diff --git a/sdk/wallet-standard/CHANGELOG.md b/sdk/wallet-standard/CHANGELOG.md index f66c15f48d7..bc16a2364f5 100644 --- a/sdk/wallet-standard/CHANGELOG.md +++ b/sdk/wallet-standard/CHANGELOG.md @@ -1,5 +1,12 @@ # @iota/wallet-standard +## 0.2.2 + +### Patch Changes + +- Updated dependencies [9864dcb] + - @iota/iota-sdk@0.4.0 + ## 0.2.1 ### Patch Changes diff --git a/sdk/wallet-standard/package.json b/sdk/wallet-standard/package.json index 2939771ea80..09593d4d8ef 100644 --- a/sdk/wallet-standard/package.json +++ b/sdk/wallet-standard/package.json @@ -1,6 +1,6 @@ { "name": "@iota/wallet-standard", - "version": "0.2.1", + "version": "0.2.2", "description": "A suite of standard utilities for implementing wallets based on the Wallet Standard.", "license": "Apache-2.0", "author": "IOTA Foundation <info@iota.org>", From 3befeadb92c51f4879c765ace612fec507062ad1 Mon Sep 17 00:00:00 2001 From: Lucas Tortora <85233773+lucas-tortora@users.noreply.github.com> Date: Fri, 13 Dec 2024 09:35:26 -0300 Subject: [PATCH 20/28] fix(devx): fix move.toml and build-test.mdx (#4456) * fix(devx): fix move.toml and build-test.mdx * dprint --- docs/content/developer/getting-started/build-test.mdx | 2 +- examples/move/first_package/Move.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/content/developer/getting-started/build-test.mdx b/docs/content/developer/getting-started/build-test.mdx index 69b5289b910..6c4db2d6cf3 100644 --- a/docs/content/developer/getting-started/build-test.mdx +++ b/docs/content/developer/getting-started/build-test.mdx @@ -60,7 +60,7 @@ Test result: OK. Total tests: 0; passed: 0; failed: 0 ### Add Tests -You can add your first unit test by copying the following public test function and adding it to `first_package_tests` file, within the `tests` directory. +You can add your first unit test by copying the following public test function and adding it to the `first_package` file. ```move #[test] diff --git a/examples/move/first_package/Move.toml b/examples/move/first_package/Move.toml index 9003fc5d467..df18f6f1957 100644 --- a/examples/move/first_package/Move.toml +++ b/examples/move/first_package/Move.toml @@ -5,7 +5,7 @@ edition = "2024.beta" # edition = "legacy" to use legacy (pre-2024) Move # authors = ["..."] # e.g., ["Joe Smith (joesmith@noemail.com)", "John Snow (johnsnow@noemail.com)"] [dependencies] -Iota = { local = "../../../crates/iota-framework/packages/iota-framework" } +Iota = { git = "https://github.com/iotaledger/iota.git", subdir = "crates/iota-framework/packages/iota-framework", rev = "testnet" } # For remote import, use the `{ git = "...", subdir = "...", rev = "..." }`. # Revision can be a branch, a tag, and a commit hash. From 61572267f42fa5ec3127984415097f8fad5324af Mon Sep 17 00:00:00 2001 From: Dr-Electron <dr-electr0n@protonmail.com> Date: Fri, 13 Dec 2024 14:27:50 +0100 Subject: [PATCH 21/28] feat(docs): port glossary over from current Wiki (#3716) --- .../iota-architecture/iota-security.mdx | 2 +- .../transaction-lifecycle.mdx | 30 ++--- docs/content/operator/genesis.mdx | 2 +- .../operator/iota-full-node/overview.mdx | 2 +- docs/content/operator/observability.mdx | 2 +- docs/content/operator/validator-committee.mdx | 26 ++--- docs/content/references/iota-compared.mdx | 8 +- docs/content/references/iota-glossary.mdx | 92 +--------------- docs/content/references/research-papers.mdx | 2 +- docs/site/config/jargon.js | 35 ++++++ docs/site/docusaurus.config.js | 7 +- docs/site/package.json | 3 + docs/site/src/components/Glossary/index.tsx | 53 +++++++++ docs/site/src/css/custom.css | 104 +++++++++++++++++- pnpm-lock.yaml | 103 +++++++++++++++++ 15 files changed, 339 insertions(+), 132 deletions(-) create mode 100644 docs/site/config/jargon.js create mode 100644 docs/site/src/components/Glossary/index.tsx diff --git a/docs/content/about-iota/iota-architecture/iota-security.mdx b/docs/content/about-iota/iota-architecture/iota-security.mdx index bb6633c8fd9..f524ccf7030 100644 --- a/docs/content/about-iota/iota-architecture/iota-security.mdx +++ b/docs/content/about-iota/iota-architecture/iota-security.mdx @@ -47,7 +47,7 @@ Move allows for shared assets. Although these shared assets are public in princi ### Certification and Finalization -When you submit a transaction in IOTA, all the validators must agree that it's valid. Once they agree, they create a certificate to confirm its validity, and this certificate must also be shared with all validators. Even if some validators don't follow the rules, the transaction can still be finalized by the majority of validators who do follow the IOTA protocol. This process uses cryptographic methods to ensure that validators who don't follow the rules can't trick the system into accepting false information and that misbehaving validators can't stop the system from processing transactions. +When you submit a transaction in IOTA, all the validators must agree that it's valid. Once they agree, they create a _certificate_ to confirm its validity, and this _certificate_ must also be shared with all validators. Even if some validators don't follow the rules, the transaction can still be finalized by the majority of validators who do follow the IOTA protocol. This process uses cryptographic methods to ensure that validators who don't follow the rules can't trick the system into accepting false information and that misbehaving validators can't stop the system from processing transactions. ### Gas and Transaction Execution diff --git a/docs/content/about-iota/iota-architecture/transaction-lifecycle.mdx b/docs/content/about-iota/iota-architecture/transaction-lifecycle.mdx index f2146ee274a..599dff115f7 100644 --- a/docs/content/about-iota/iota-architecture/transaction-lifecycle.mdx +++ b/docs/content/about-iota/iota-architecture/transaction-lifecycle.mdx @@ -18,13 +18,13 @@ import ThemedImage from '@theme/ThemedImage'; 2. **Submit to Validators**: The IOTA protocol sends the transaction to every validator. The validators validate the transaction. If valid, the validators sign it and return the signed transaction to the client. -3. **Form a Transaction Certificate**: After collecting responses from a supermajority of validators, the client can form a transaction certificate. Unlike consensus-based blockchains, IOTA validators are not burdened by needing to propagate signatures or aggregate certificates; this is the responsibility of the client or gateway. +3. **Form a Transaction Certificate**: After collecting responses from a supermajority of validators, the client can form a transaction _certificate_. Unlike consensus-based blockchains, IOTA validators are not burdened by needing to propagate signatures or aggregate _certificate_s; this is the responsibility of the client or gateway. -4. **Send the Certificate**: The client sends the assembled certificate back to all validators. The validators check its validity and acknowledge receipt. If the transaction involves only owned objects, IOTA can process and execute it immediately without waiting for consensus (**fast path consensus**). All certificates are forwarded to the IOTA DAG-based consensus protocol. +4. **Send the Certificate**: The client sends the assembled _certificate_ back to all validators. The validators check its validity and acknowledge receipt. If the transaction involves only owned objects, IOTA can process and execute it immediately without waiting for consensus (**fast path consensus**). All _certificate_s are forwarded to the IOTA DAG-based consensus protocol. -5. **Consensus and Execution**: The IOTA DAG-based consensus protocol eventually produces a total order of certificates. Validators check and execute certificates that involve shared objects. +5. **Consensus and Execution**: The IOTA DAG-based consensus protocol eventually produces a total order of _certificate_s. Validators check and execute _certificate_s that involve shared objects. -6. **Effect Certificate**: Clients can gather responses from a supermajority of validators, assemble them into an effect certificate, and use it as proof that the transaction is settled. +6. **Effect Certificate**: Clients can gather responses from a supermajority of validators, assemble them into an effect _certificate_, and use it as proof that the transaction is settled. 7. **Checkpoints and Reconfiguration**: IOTA forms checkpoints for every consensus commit, which are also used to drive the reconfiguration protocol. @@ -42,13 +42,13 @@ Your wallet app sends the signed transaction to a full node, which then broadcas ### Transaction Certification -Validators receive the transaction from the full node. They check if it's valid and lock the involved objects to prevent double-spending. After validation, they send their signature back to the full node. When the full node collects enough validator signatures (a quorum), it creates a transaction certificate, which includes the transaction and the validator signatures. +Validators receive the transaction from the full node. They check if it's valid and lock the involved objects to prevent double-spending. After validation, they send their signature back to the full node. When the full node collects enough validator signatures (a quorum), it creates a transaction _certificate_, which includes the transaction and the validator signatures. ### Transaction Finalization -The full node broadcasts this transaction certificate to all validators. Validators verify the certificate, execute the transaction, and unlock the previously locked objects. They then sign the transaction effects (a detailed list of changes) and return these signed effects to the full node. The full node verifies these effects and, once it has enough signatures, forms an effects certificate. +The full node broadcasts this transaction _certificate_ to all validators. Validators verify the _certificate_, execute the transaction, and unlock the previously locked objects. They then sign the transaction effects (a detailed list of changes) and return these signed effects to the full node. The full node verifies these effects and, once it has enough signatures, forms an effects _certificate_. -Your wallet app receives this effects certificate, which you can show to the coffee shop to prove that the transaction is complete and irreversible. +Your wallet app receives this effects _certificate_, which you can show to the coffee shop to prove that the transaction is complete and irreversible. ## Transaction Life Cycle @@ -67,13 +67,13 @@ After submission to a full node, the certification process begins. The full node If these checks pass, the validator locks the input objects to the transaction, preventing double-spending, and proceeds to sign the transaction and returns the signature to the node. The node needs signatures from a majority of validators to certify the transaction. -The full node collects these signatures in parallel to speed up the process. Once it has enough signatures (a quorum), the transaction is certified, forming a **transaction certificate**. +The full node collects these signatures in parallel to speed up the process. Once it has enough signatures (a quorum), the transaction is certified, forming a **transaction _certificate_**. Even if some validators are dishonest, the principle of "quorum intersection" ensures that as long as most validators are honest, double-spending is prevented. An honest validator will not sign two transactions that try to use the same object at the same time. ### Execution -Certified transactions are then sent to validators for **execution**. Validators verify the certificate signatures to ensure the transaction is valid and not attempting to double-spend. +Certified transactions are then sent to validators for **execution**. Validators verify the _certificate_ signatures to ensure the transaction is valid and not attempting to double-spend. Depending on whether the transaction uses shared input objects, the validators will either: @@ -90,9 +90,9 @@ After the transaction is executed, the validator signs off on the effects of the * The amount of gas spent. * The transaction's execution status (either success or an error code). -The full node then gathers these signed effects from a majority of validators, forming an **effects certificate**, which guarantees that the transaction is final. +The full node then gathers these signed effects from a majority of validators, forming an **effects _certificate_**, which guarantees that the transaction is final. -Once you or the full node sees an effects certificate, you can be sure that the transaction will be included in a [checkpoint](#checkpoints), meaning it can't be undone. This certificate can also serve as proof that you sent the NFT to your friend since it can't be faked due to the validator signatures. +Once you or the full node sees an effects _certificate_, you can be sure that the transaction will be included in a [checkpoint](#checkpoints), meaning it can't be undone. This _certificate_ can also serve as proof that you sent the NFT to your friend since it can't be faked due to the validator signatures. ### Checkpoints @@ -109,25 +109,25 @@ Transaction finality means that once a transaction is executed, it can't be reve ### Settlement Finality -After executing a transaction, validators send back the signed effects to the network. When a majority of validators have executed the transaction and the [effects certificate](#effects-certificate) exists, the transaction's effects (like transfers or newly created objects) are implemented. This allows the network to process new transactions that depend on these effects. +After executing a transaction, validators send back the signed effects to the network. When a majority of validators have executed the transaction and the [effects _certificate_](#effects-certificate) exists, the transaction's effects (like transfers or newly created objects) are implemented. This allows the network to process new transactions that depend on these effects. Settlement finality depends on [object ownership](../../developer/iota-101/objects/object-ownership/object-ownership.mdx). For transactions involving only owned objects, this happens quickly, in under half a second. For those involving shared objects, it happens shortly after consensus, which can take a few seconds. At this point, the transaction reaches settlement finality, meaning the network can now process more transactions using the same input objects. ### Checkpoint Processing -The [real-world example](#real-world-example) at the beginning of the article demonstrates a finalized transaction through an effects certificate. However, if a full node goes offline before collecting all signatures, your wallet app will try another full node. If your phone dies during this process, the coffee shop will still see your payment on its terminal connected to a different full node, thanks to checkpoints. +The [real-world example](#real-world-example) at the beginning of the article demonstrates a finalized transaction through an effects _certificate_. However, if a full node goes offline before collecting all signatures, your wallet app will try another full node. If your phone dies during this process, the coffee shop will still see your payment on its terminal connected to a different full node, thanks to checkpoints. A checkpoint contains a list of transactions and is signed by a majority of validators, making it final. If a full node learns about your transaction through checkpoints, it ensures that the transaction will be finalized. ### Local Execution on a Full Node -Before sending back an effects certificate, a full node might execute the transaction locally if the request asks it to. This is more important for high-frequency applications like gaming but can add unnecessary delay for simple transactions like buying coffee. The `WaitForLocalExecution` parameter requests this local execution, while you can use the `WaitForEffects` parameter for a quicker response. +Before sending back an effects _certificate_, a full node might execute the transaction locally if the request asks it to. This is more important for high-frequency applications like gaming but can add unnecessary delay for simple transactions like buying coffee. The `WaitForLocalExecution` parameter requests this local execution, while you can use the `WaitForEffects` parameter for a quicker response. Additionally, when any app builds a transaction, the full node is usually in charge of choosing the object that is used to pay for the transaction's gas. Since gas is paid in IOTA, which is a shared object, if the full node is not up-to-date, it could potentially lead to an invalid transaction or even a [client equivocation](../../developer/iota-101/transactions/sponsored-transactions/about-sponsored-transactions.mdx#risk-considerations). You can avoid this unwanted behavior by sending the `WaitForLocalExecution` parameter. ### Epoch Change -Every ~24 hours, the IOTA network undergoes an epoch change, during which staking rewards are calculated and distributed, validator metadata is updated, and other network processes occur. User transactions are paused during this time. If your transaction is submitted at the epoch boundary, it may need resubmission in the new epoch. Transactions that were certified but not yet finalized will be reverted. Any transaction certificate from the previous epoch will become invalid, so the full node will resubmit the invalid transactions. +Every ~24 hours, the IOTA network undergoes an epoch change, during which staking rewards are calculated and distributed, validator metadata is updated, and other network processes occur. User transactions are paused during this time. If your transaction is submitted at the epoch boundary, it may need resubmission in the new epoch. Transactions that were certified but not yet finalized will be reverted. Any transaction _certificate_ from the previous epoch will become invalid, so the full node will resubmit the invalid transactions. ### Verifying Finality diff --git a/docs/content/operator/genesis.mdx b/docs/content/operator/genesis.mdx index cd5d30a6146..c2f87446c06 100644 --- a/docs/content/operator/genesis.mdx +++ b/docs/content/operator/genesis.mdx @@ -2,7 +2,7 @@ title: Genesis --- -Genesis is the initial state of the IOTA blockchain. To launch a network, the initial committee of validators collaborate by providing their validator information (public keys, network addresses, and so on) to a shared workspace. After all of the initial validators have contributed their information, IOTA generates the initial, unsigned genesis checkpoint (checkpoint with sequence number 0) and each validator provides their signature. IOTA aggregates these signatures to form a certificate on the genesis checkpoint. IOTA bundles this checkpoint, as well as the initial objects, together into a single genesis.blob file that is used to initialize the state when running the `iota-node` binary for both validators and Full nodes. +Genesis is the initial state of the IOTA blockchain. To launch a network, the initial committee of validators collaborate by providing their validator information (public keys, network addresses, and so on) to a shared workspace. After all of the initial validators have contributed their information, IOTA generates the initial, unsigned genesis checkpoint (checkpoint with sequence number 0) and each validator provides their signature. IOTA aggregates these signatures to form a _certificate_ on the genesis checkpoint. IOTA bundles this checkpoint, as well as the initial objects, together into a single genesis.blob file that is used to initialize the state when running the `iota-node` binary for both validators and Full nodes. ## Genesis blob locations diff --git a/docs/content/operator/iota-full-node/overview.mdx b/docs/content/operator/iota-full-node/overview.mdx index 00f91922651..cfb80e6b4f8 100644 --- a/docs/content/operator/iota-full-node/overview.mdx +++ b/docs/content/operator/iota-full-node/overview.mdx @@ -24,7 +24,7 @@ IOTA Full nodes: IOTA Full nodes sync with validators to receive new transactions on the network. -A transaction requires a few round trips to 2f+1 validators to form a transaction certificate (TxCert). +A transaction requires a few round trips to 2f+1 validators to form a transaction _certificate_ (TxCert). This synchronization process includes: diff --git a/docs/content/operator/observability.mdx b/docs/content/operator/observability.mdx index 03676ee1447..6467539eed0 100644 --- a/docs/content/operator/observability.mdx +++ b/docs/content/operator/observability.mdx @@ -99,7 +99,7 @@ To generate detailed span start and end logs, define the `IOTA_JSON_SPAN_LOGS` e You can send this output to a tool or service for indexing, alerts, aggregation, and analysis. -The following example output shows certificate processing in the authority with span logging. Note the `START` and `END` annotations, and notice how `DB_UPDATE_STATE` which is nested is embedded within `PROCESS_CERT`. Also notice `elapsed_milliseconds`, which logs the duration of each span. +The following example output shows _certificate_ processing in the authority with span logging. Note the `START` and `END` annotations, and notice how `DB_UPDATE_STATE` which is nested is embedded within `PROCESS_CERT`. Also notice `elapsed_milliseconds`, which logs the duration of each span. ```bash {"v":0,"name":"iota","msg":"[PROCESS_CERT - START]","level":20,"hostname":"Evan-MLbook.lan","pid":51425,"time":"2022-03-08T22:48:11.241421Z","target":"iota_core::authority_server","line":67,"file":"iota_core/src/authority_server.rs","tx_digest":"t#d1385064287c2ad67e4019dd118d487a39ca91a40e0fd8e678dbc32e112a1493"} diff --git a/docs/content/operator/validator-committee.mdx b/docs/content/operator/validator-committee.mdx index 598939eeffb..85920009733 100644 --- a/docs/content/operator/validator-committee.mdx +++ b/docs/content/operator/validator-committee.mdx @@ -1,6 +1,6 @@ --- title: Validator Committee -description: IOTA has a committee of validators to verify on-chain transactions. Epochs, quorums, transactions, certificates, and consensus are touch points for this committee. +description: IOTA has a committee of validators to verify on-chain transactions. Epochs, quorums, transactions, _certificate_s, and consensus are touch points for this committee. --- import Quiz from '@site/src/components/Quiz'; @@ -20,38 +20,38 @@ Operation of the IOTA network is temporally partitioned into non-overlapping, ap A quorum is a set of validators whose combined voting power is greater than two-thirds (>2/3) of the total during a particular epoch. For example, in an IOTA instance operated by four validators that all have the same voting power, any group containing three validators is a quorum. -The quorum size of >2/3 ensures Byzantine fault tolerance (BFT). A validator commits a transaction (durably store the transaction and update its internal state with the effects of the transaction) only if it is accompanied by cryptographic signatures from a quorum. IOTA calls the combination of the transaction and the quorum signatures on its bytes a *certificate*. The policy of committing only certificates ensures Byzantine fault tolerance: if >2/3 of the validators faithfully follow the protocol, they are guaranteed to eventually agree on both the set of committed certificates and their effects. +The quorum size of >2/3 ensures Byzantine fault tolerance (BFT). A validator commits a transaction (durably store the transaction and update its internal state with the effects of the transaction) only if it is accompanied by cryptographic signatures from a quorum. IOTA calls the combination of the transaction and the quorum signatures on its bytes a _certificate_. The policy of committing only _certificate_s ensures Byzantine fault tolerance: if >2/3 of the validators faithfully follow the protocol, they are guaranteed to eventually agree on both the set of committed _certificate_s and their effects. ## Write requests -A validator can handle two types of write requests: transactions and certificates. At a high level, a client: +A validator can handle two types of write requests: transactions and _certificate_s. At a high level, a client: -- Communicates a transaction to a quorum of validators to collect the signatures required to form a certificate. -- Submits a certificate to a validator to commit state changes on that validator. +- Communicates a transaction to a quorum of validators to collect the signatures required to form a _certificate_. +- Submits a _certificate_ to a validator to commit state changes on that validator. ### Transactions -When a validator receives a transaction from a client, it first performs transaction validity checks (validity of the sender's signature). If the checks pass, the validator locks all owned-objects and signs the transaction bytes, then returns the signature to the client. The client repeats this process with multiple validators until it has collected signatures on its transaction from a quorum, thereby forming a certificate. +When a validator receives a transaction from a client, it first performs transaction validity checks (validity of the sender's signature). If the checks pass, the validator locks all owned-objects and signs the transaction bytes, then returns the signature to the client. The client repeats this process with multiple validators until it has collected signatures on its transaction from a quorum, thereby forming a _certificate_. -The process of collecting validator signatures on a transaction into a certificate and the process of submitting certificates can be performed in parallel. The client can simultaneously multicast transactions/certificates to an arbitrary number of validators. Alternatively, a client can outsource either or both of these tasks to a third-party service provider. This provider must be trusted for liveness (it can refuse to form a certificate), but not for safety (it cannot change the effects of the transaction, and does not need the user's secret key). +The process of collecting validator signatures on a transaction into a _certificate_ and the process of submitting _certificate_s can be performed in parallel. The client can simultaneously multicast transactions/_certificate_s to an arbitrary number of validators. Alternatively, a client can outsource either or both of these tasks to a third-party service provider. This provider must be trusted for liveness (it can refuse to form a _certificate_), but not for safety (it cannot change the effects of the transaction, and does not need the user's secret key). ### Certificates -After the client forms a certificate, it submits it to the validators, which perform certificate validity checks. These checks ensure the signers are validators in the current epoch, and the signatures are cryptographically valid. If the checks pass, the validators execute the transaction inside the certificate. Execution of a transaction either succeeds and commits all of its effects or aborts and has no effect other than debiting the transaction's gas input. Some reasons a transaction might abort include an explicit abort instruction, a runtime error such as division by zero, or exceeding the maximum gas budget. Whether it succeeds or aborts, the validator durably stores the certificate indexed by the hash of its inner transaction. +After the client forms a _certificate_, it submits it to the validators, which perform _certificate_ validity checks. These checks ensure the signers are validators in the current epoch, and the signatures are cryptographically valid. If the checks pass, the validators execute the transaction inside the _certificate_. Execution of a transaction either succeeds and commits all of its effects or aborts and has no effect other than debiting the transaction's gas input. Some reasons a transaction might abort include an explicit abort instruction, a runtime error such as division by zero, or exceeding the maximum gas budget. Whether it succeeds or aborts, the validator durably stores the _certificate_ indexed by the hash of its inner transaction. -If a client collects a quorum of signatures on the effects of the transaction, then the client has a promise of finality. This means that transaction effects persist on the shared database and are actually committed and visible to everyone by the end of the epoch. This does not mean that the latency is a full epoch, because you can use the effects certificate to convince anyone of the transactions finality, as well as to access the effects and issue new transactions. As with transactions, you can parallelize the process of sharing a certificate with validators and (if desired) outsource to a third-party service provider. +If a client collects a quorum of signatures on the effects of the transaction, then the client has a promise of finality. This means that transaction effects persist on the shared database and are actually committed and visible to everyone by the end of the epoch. This does not mean that the latency is a full epoch, because you can use the effects _certificate_ to convince anyone of the transactions finality, as well as to access the effects and issue new transactions. As with transactions, you can parallelize the process of sharing a _certificate_ with validators and (if desired) outsource to a third-party service provider. ## The role of Narwhal and Bullshark IOTA takes advantage of Narwhal and Bullshark as its mempool and consensus engines. Narwhal/Bullshark (N/B) is also implemented in IOTA so that when Byzantine agreement is required it uses a high-throughput DAG-based consensus to manage shared locks while execution on different shared objects is parallelized. -Narwhal enables the parallel ordering of transactions into batches that are collected into concurrently proposed blocks, and Bullshark defines an algorithm for executing the DAG that these blocks form. N/B combined builds a DAG of blocks, concurrently proposed, and creates an order between those blocks as a byproduct of the building of the DAG. But that order is overlaid on top of the causal order of IOTA transactions (the "payload" of Narwhal/Bullshark here), and does not substitute for it: +Narwhal enables the parallel ordering of transactions into batches that are collected into concurrently proposed blocks, and Bullshark defines an algorithm for executing the DAG that these blocks form. N/B combined builds a DAG of blocks, concurrently proposed, and creates an order between those blocks as a byproduct of the building of the DAG. But that order is overlaid on top of the _causal order_ of IOTA transactions (the "payload" of Narwhal/Bullshark here), and does not substitute for it: - N/B operates in OX, rather than XO mode (O = order, X = execute); the execution occurs after the Narwhal/Bullshark ordering. - The output of N/B is therefore a sequence of transactions, with interdependencies stored in the transaction data itself. -Consensus sequences certificates of transactions. These represent transactions that have already been presented to 2/3 of validators that checked that all their owned objects are available to be operated on and signed the transaction. Upon a certificate being sequenced, IOTA sets the lock of the shared objects at the next available version to map to the execution of that certificate. So for example if you have a shared object X at version 2, and you sequence certificate T, IOTA stores T -> [(X, 2)]. That is all you do when IOTA reaches consensus, and as a result IOTA can ingest a lot of sequenced transactions. +Consensus sequences _certificate_s of transactions. These represent transactions that have already been presented to 2/3 of validators that checked that all their owned objects are available to be operated on and signed the transaction. Upon a _certificate_ being sequenced, IOTA sets the lock of the shared objects at the next available version to map to the execution of that _certificate_. So for example if you have a shared object X at version 2, and you sequence _certificate_ T, IOTA stores T -> [(X, 2)]. That is all you do when IOTA reaches consensus, and as a result IOTA can ingest a lot of sequenced transactions. -Now, after this is done IOTA can execute all certificates that have their locks set, on one or multiple cores. Obviously, transactions for earlier versions of objects need to be processed first (causally), and that reduces the degree of concurrency. The read and write set of the transaction can be statically determined from its versioned object inputs--execution can only read/write an object that was an input to the transaction, or that was created by the transaction. +Now, after this is done IOTA can execute all _certificate_s that have their locks set, on one or multiple cores. Obviously, transactions for earlier versions of objects need to be processed first (causally), and that reduces the degree of concurrency. The read and write set of the transaction can be statically determined from its versioned object inputs--execution can only read/write an object that was an input to the transaction, or that was created by the transaction. -<Quiz questions={questions} /> \ No newline at end of file +<Quiz questions={questions} /> diff --git a/docs/content/references/iota-compared.mdx b/docs/content/references/iota-compared.mdx index 90de98f1d04..0126c647a66 100644 --- a/docs/content/references/iota-compared.mdx +++ b/docs/content/references/iota-compared.mdx @@ -29,16 +29,16 @@ This doesn't mean that IOTA as a platform never orders transactions with respect ## A collaborative approach to transaction submission -IOTA validates transactions individually, rather than batching them in the traditional blocks. The key advantage of this approach is low latency; each successful transaction quickly obtains a certificate of finality that proves to anyone that the transaction will persists its effects on the IOTA network. +IOTA validates transactions individually, rather than batching them in the traditional blocks. The key advantage of this approach is low latency; each successful transaction quickly obtains a _certificate_ of finality that proves to anyone that the transaction will persists its effects on the IOTA network. But the process of submitting a transaction is a bit more involved. That little more work occurs on the network. (With bandwidth getting cheaper, this is less of a concern.) Whereas a usual blockchain can accept a bunch of transactions from the same author in a fire-and-forget mode, IOTA transaction submission follows these steps: 1. Sender broadcasts a transaction to all IOTA validators. 1. IOTA validators send individual votes on this transaction to the sender. 1. Each vote has a certain weight since each validator has weight based upon the rules of [Proof of Stake](https://en.wikipedia.org/wiki/Proof_of_work). -1. Sender collects a Byzantine-resistant-majority of these votes into a _certificate_ and broadcasts it to all IOTA validators. +1. Sender collects a Byzantine-resistant-majority of these votes into a __certificate__ and broadcasts it to all IOTA validators. 1. The validators execute the transaction and sign the results. When the client receives a Byzantine-resistant-majority of the results _finality_ is reached, ie., assurance the transaction will not be dropped (revoked). -1. Optionally, the sender assembles the votes to a certificate detailing the effects of the transaction. +1. Optionally, the sender assembles the votes to a _certificate_ detailing the effects of the transaction. While those steps demand more of the sender, performing them efficiently can still yield a cryptographic proof of finality with minimum latency. Aside from crafting the original transaction itself, the session management for a transaction does not require access to any private keys and can be delegated to a third party. @@ -49,7 +49,7 @@ Because IOTA focuses on managing specific objects rather than a single aggregate - Every object in IOTA has a unique version number. - Every new version is created from a transaction that may involve several dependencies, themselves versioned objects. -As a consequence, a IOTA Validator can exhibit a causal history of an object, showing its history since genesis. IOTA explicitly makes the bet that in many cases, the ordering of that causal history with the causal history of another object is irrelevant; and in the few cases where this information is relevant, IOTA makes this relationship explicit in the data. +As a consequence, a IOTA Validator can exhibit a _causal history_ of an object, showing its history since genesis. IOTA explicitly makes the bet that in many cases, the ordering of that _causal history_ with the _causal history_ of another object is irrelevant; and in the few cases where this information is relevant, IOTA makes this relationship explicit in the data. ## Causal order vs. total order diff --git a/docs/content/references/iota-glossary.mdx b/docs/content/references/iota-glossary.mdx index d6b592a54d5..9593a486845 100644 --- a/docs/content/references/iota-glossary.mdx +++ b/docs/content/references/iota-glossary.mdx @@ -2,96 +2,8 @@ title: Glossary slug: /iota-glossary --- +import Glossary from '@site/src/components/Glossary'; Find terms used in IOTA defined below. -### Causal history - -Causal history is the relationship between an object in IOTA and its direct predecessors and successors. This history is essential to the causal order IOTA uses to process transactions. In contrast, other blockchains read the entire state of their world for each transaction, -introducing latency. - -### Causal order - -[Causal order](https://www.scattered-thoughts.net/writing/causal-ordering/) is a representation of the relationship between transactions and the objects they produce, laid out as dependencies. Validators cannot execute a transaction dependent on objects created by a prior transaction that has not finished. Rather than total order, IOTA uses causal order (a partial order). - -### Certificate - -A certificate is the mechanism proving a transaction was approved or certified. Validators vote on transactions, and aggregators collect a Byzantine-resistant-majority of these votes into a certificate and broadcasts it to all IOTA validators, thereby ensuring finality. - -### Epoch - -Operation of the IOTA network is temporally partitioned into non-overlapping, fixed-duration epochs. During a particular epoch, the set of validators participating in the network is fixed. - -### Equivocation - -Equivocation in blockchains is the malicious action of dishonest actors giving conflicting information for the same message, such as inconsistent or duplicate voting. - -### Eventual consistency - -[Eventual consistency](https://en.wikipedia.org/wiki/Eventual_consistency) is the consensus model employed by IOTA; if one honest validator -certifies the transaction, all of the other honest validators will too eventually. - -### Finality - -[Finality](https://medium.com/mechanism-labs/finality-in-blockchain-consensus-d1f83c120a9a) is the assurance a transaction will not be revoked. This stage is considered closure for an exchange or other blockchain transaction. - -### Gas - -[Gas](https://ethereum.org/en/developers/docs/gas/) refers to the computational effort required for executing operations on the IOTA network. In IOTA, gas is paid with the network's native currency IOTA. The cost of executing a transaction in IOTA units is referred to as the transaction fee. - -### Genesis - -Genesis is the initial act of creating accounts and gas objects for a IOTA network. IOTA provides a `genesis` command that allows users to create and inspect the genesis object setting up the network for operation. - -### Multi-writer objects - -Multi-writer objects are objects that are owned by more than one address. Transactions affecting multi-writer objects require consensus in IOTA. This contrasts with transactions affecting only single-writer objects, which require only a confirmation of the owner's address contents. - -### Object - -The basic unit of storage in IOTA is object. In contrast to many other blockchains, where storage is centered around address and each address contains a key-value store, IOTA's storage is centered around objects. IOTA objects have one of the following primary states: - -- _Immutable_ - the object cannot be modified. -- _Mutable_ - the object can be changed. - -Further, mutable objects are divided into these categories: - -- _Owned_ - the object can be modified only by its owner. -- _Shared_ - the object can be modified by anyone. - -Immutable objects do not need this distinction because they have no owner. - -### Proof-of-stake - -[Proof-of-stake](https://en.wikipedia.org/wiki/Proof_of_stake) is a blockchain consensus mechanism where the voting weights of validators or validators is proportional to a bonded amount of the network's native currency (called their stake in the network). This mitigates [Sybil attacks](https://en.wikipedia.org/wiki/Sybil_attack) by forcing bad actors to gain a large stake in the blockchain first. - -### Single-writer objects - -Single-writer objects are owned by one address. In IOTA, transactions affecting only single-writer objects owned by the same address may proceed with only a verification of the sender's address, greatly speeding transaction times. These are _simple transactions_. See Single-Writer Apps for example applications of this simple transaction model. - -### Smart contract - -A [smart contract](https://en.wikipedia.org/wiki/Smart_contract) is an agreement based upon the protocol for conducting transactions in a blockchain. In IOTA, smart contracts are written in [Solidity/EVM or Move](../developer/evm-to-move/evm-to-move.mdx). - -### IOTA - -IOTA refers to the IOTA blockchain, and the [IOTA open source project](https://github.com/iotaledger/iota/) as a whole, or the native token to the IOTA network. - -### Total order - -[Total order](https://en.wikipedia.org/wiki/Total_order) refers to the ordered presentation of the history of all transactions processed by a traditional blockchain up to a given time. This is maintained by many blockchain systems, as the only way to process transactions. In contrast, IOTA uses a causal (partial) order wherever possible and safe. - -### Transaction - -A transaction in IOTA is a change to the blockchain. This may be a _simple transaction_ affecting only single-writer, single-address objects, such as minting an NFT or transferring an NFT or another token. These transactions may bypass the consensus protocol in IOTA. - -More _complex transactions_ affecting objects that are shared or owned by multiple addresses, such as asset management and other DeFi use cases, do go through consensus. - -### Transfer - -A transfer is switching the owner address of a token to a new one via command in IOTA. This is accomplished via the IOTA CLI client command line interface. It is one of the more common of many commands available in the CLI client. - -### Validator - -A validator in IOTA plays a passive role analogous to the more active role of validators and minors in other blockchains. In IOTA, validators do not continuously participate in the consensus protocol but are called into action only when receiving a transaction or -certificate. +<Glossary/> diff --git a/docs/content/references/research-papers.mdx b/docs/content/references/research-papers.mdx index 49b064fd219..53ca90d660e 100644 --- a/docs/content/references/research-papers.mdx +++ b/docs/content/references/research-papers.mdx @@ -42,7 +42,7 @@ This document contains a list of research papers that are relevant to IOTA. to add strong privacy to FastPay transactions (but IOTA does not plan to do this). - **Summary:** We introduce Zef, the first Byzantine-Fault Tolerant (BFT) protocol to support payments in anonymous digital coins at arbitrary scale. Zef follows the communication and security model of FastPay: both protocols are asynchronous, low-latency, linearly-scalable, and powered by partially-trusted - sharded validators. Zef further introduces opaque coins represented as off-chain certificates that are bound to user accounts. In order to hide the face + sharded validators. Zef further introduces opaque coins represented as off-chain _certificate_s that are bound to user accounts. In order to hide the face values of coins when a payment operation consumes or creates them, Zef uses random commitments and NIZK proofs. Created coins are made unlinkable using the blind and randomizable threshold anonymous credentials of [Coconut](https://arxiv.org/pdf/1802.07344.pdf). To control storage costs associated with coin replay prevention, Zef accounts are designed so that data can be safely removed once an account is deactivated. Besides the specifications and a detailed diff --git a/docs/site/config/jargon.js b/docs/site/config/jargon.js new file mode 100644 index 00000000000..669bc6d8cff --- /dev/null +++ b/docs/site/config/jargon.js @@ -0,0 +1,35 @@ +module.exports = { + 'causal history': 'Causal history is the relationship between an object in IOTA and its direct predecessors and successors. This history is essential to the causal order IOTA uses to process transactions. In contrast, other blockchains read the entire state of their world for each transaction, introducing latency.', + 'causal order': '<a href="https://www.scattered-thoughts.net/writing/causal-ordering/">Causal order</a> is a representation of the relationship between transactions and the objects they produce, laid out as dependencies. Validators cannot execute a transaction dependent on objects created by a prior transaction that has not finished. Rather than total order, IOTA uses causal order (a partial order).', + certificate: 'A certificate is the mechanism proving a transaction was approved or certified. Validators vote on transactions, and aggregators collect a Byzantine-resistant majority of these votes into a certificate and broadcasts it to all IOTA validators, thereby ensuring finality.', + epoch: 'Operation of the IOTA network is temporally partitioned into non-overlapping, fixed-duration epochs. During a particular epoch, the set of validators participating in the network is fixed.', + equivocation: 'Equivocation in blockchains is the malicious action of dishonest actors giving conflicting information for the same message, such as inconsistent or duplicate voting.', + 'eventual consistency': '<a href="https://en.wikipedia.org/wiki/Eventual_consistency">Eventual consistency</a> is the consensus model employed by IOTA; if one honest validator certifies the transaction, all of the other honest validators will too eventually.', + finality: '<a href="https://medium.com/mechanism-labs/finality-in-blockchain-consensus-d1f83c120a9a">Finality</a> is the assurance a transaction will not be revoked. This stage is considered closure for an exchange or other blockchain transaction.', + gas: '<a href="https://ethereum.org/en/developers/docs/gas/">Gas</a> refers to the computational effort required for executing operations on the IOTA network. In IOTA, gas is paid with the network\'s native currency IOTA. The cost of executing a transaction in IOTA units is referred to as the transaction fee.', + genesis: 'Genesis is the initial act of creating accounts and gas objects for a IOTA network. IOTA provides a `genesis` command that allows users to create and inspect the genesis object setting up the network for operation.', + 'multi-writer objects': 'Multi-writer objects are objects that are owned by more than one address. Transactions affecting multi-writer objects require consensus in IOTA. This contrasts with transactions affecting only single-writer objects, which require only a confirmation of the owner\'s address contents.', + object: ` + The basic unit of storage in IOTA is object. In contrast to many other blockchains, where storage is centered around address and each address contains a key-value store, IOTA\'s storage is centered around objects. IOTA objects have one of the following primary states:<br/> + <br/> + - <i>Immutable</i> - the object cannot be modified.<br/> + - <i>Mutable</i> - the object can be changed.<br/> + <br/> + Further, mutable objects are divided into these categories:<br/> + <br/> + - <i>Owned</i> - the object can be modified only by its owner.<br/> + - <i>Shared</i> - the object can be modified by anyone.<br/> + <br/> + Immutable objects do not need this distinction because they have no owner. + `, + PoS: '<a href="https://en.wikipedia.org/wiki/Proof_of_stake">Proof-of-stake</a> is a blockchain consensus mechanism where the voting weights of validators or validators is proportional to a bonded amount of the network\'s native currency (called their stake in the network). This mitigates <a href="https://en.wikipedia.org/wiki/Sybil_attack">Sybil attacks</a> by forcing bad actors to gain a large stake in the blockchain first.', + 'single-writer objects': 'Single-writer objects are owned by one address. In IOTA, transactions affecting only single-writer objects owned by the same address may proceed with only a verification of the sender\'s address, greatly speeding transaction times. These are simple transactions. See Single-Writer Apps for example applications of this simple transaction model.', + 'smart contract': 'A <a href="https://en.wikipedia.org/wiki/Smart_contract">smart contract</a> is an agreement based upon the protocol for conducting transactions in a blockchain. In IOTA, smart contracts are written in <a href="../developer/evm-to-move">Solidity/EVM or Move</a>.', + iota: 'IOTA refers to the IOTA blockchain, and the <a href="https://github.com/iotaledger/iota/">IOTA open source project</a> as a whole, or the native token to the IOTA network.', + 'total order': '<a href="https://en.wikipedia.org/wiki/Total_order">Total order</a> refers to the ordered presentation of the history of all transactions processed by a traditional blockchain up to a given time. This is maintained by many blockchain systems, as the only way to process transactions. In contrast, IOTA uses a causal (partial) order wherever possible and safe.', + transaction: ` + A transaction in IOTA is a change to the blockchain. This may be a <i>simple transaction</i> affecting only single-writer, single-address objects, such as minting an NFT or transferring an NFT or another token. These transactions may bypass the consensus protocol in IOTA.<br/> + More <i>complex transactions</i> affecting objects that are shared or owned by multiple addresses, such as asset management and other DeFi use cases, go through the<a href = "https://github.com/iotaledger/iota/tree/develop/narwhal">Narwhal and Bullshark</a> DAG - based mempool and efficient Byzantine Fault Tolerant(BFT) consensus. + `, + transfer: 'A transfer is switching the owner address of a token to a new one via command in IOTA. This is accomplished via the IOTA CLI client command line interface. It is one of the more common of many commands available in the CLI client.', + validator: 'A validator in IOTA plays a passive role analogous to the more active role of validators and minors in other blockchains. In IOTA, validators do not continuously participate in the consensus protocol but are called into action only when receiving a transaction or certificate.'}; diff --git a/docs/site/docusaurus.config.js b/docs/site/docusaurus.config.js index bdb717867cb..42fc2d4a79a 100644 --- a/docs/site/docusaurus.config.js +++ b/docs/site/docusaurus.config.js @@ -10,6 +10,8 @@ import codeImport from "remark-code-import"; require("dotenv").config(); +const jargonConfig = require('./config/jargon.js'); + /** @type {import('@docusaurus/types').Config} */ const config = { title: "IOTA Documentation", @@ -158,7 +160,10 @@ const config = { ], [codeImport, { rootDir: path.resolve(__dirname, `../../`) }], ], - rehypePlugins: [katex], + rehypePlugins: [ + katex, + [require('rehype-jargon'), { jargon: jargonConfig}] + ], }, theme: { customCss: [ diff --git a/docs/site/package.json b/docs/site/package.json index 5f0f7503310..3962ebe7ef2 100644 --- a/docs/site/package.json +++ b/docs/site/package.json @@ -20,6 +20,7 @@ }, "dependencies": { "@amplitude/analytics-browser": "^1.10.3", + "@artsy/to-title-case": "^1.1.0", "@docsearch/react": "^3.6.0", "@docusaurus/core": "3.5.2", "@docusaurus/preset-classic": "3.5.2", @@ -48,6 +49,7 @@ "graphql-config": "^5.0.3", "gray-matter": "^4.0.3", "hast-util-is-element": "^1.1.0", + "html-react-parser": "^5.1.18", "lodash": "^4.17.21", "markdown-to-jsx": "^7.4.7", "plugin-image-zoom": "github:flexanalytics/plugin-image-zoom", @@ -59,6 +61,7 @@ "react-scrollspy-navigation": "^1.0.3", "react-syntax-highlighter": "^15.5.0", "react-ui-scrollspy": "^2.3.0", + "rehype-jargon": "^3.1.0", "rehype-katex": "^7.0.0", "remark-math": "^6.0.0", "tailwindcss": "^3.3.3", diff --git a/docs/site/src/components/Glossary/index.tsx b/docs/site/src/components/Glossary/index.tsx new file mode 100644 index 00000000000..1a495afe0a3 --- /dev/null +++ b/docs/site/src/components/Glossary/index.tsx @@ -0,0 +1,53 @@ +import React from 'react'; +import Heading from '@theme/Heading'; +import { toTitleCase } from '@artsy/to-title-case'; +import { clsx } from 'clsx'; +import parse from 'html-react-parser'; + +export default function Glossary() { + const glossary = require('@site/config/jargon.js'); + + const sortedGlossary = Object.keys(glossary) + .sort(function (a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()); + }) + .reduce((acc, key) => { + acc[key] = glossary[key]; + return acc; + }, {}); + + let char = ''; + return ( + <> + {Object.entries(sortedGlossary).map(([key, value]) => { + let heading = null; + if (key.charAt(0).toLowerCase() !== char.toLowerCase()) { + char = key.charAt(0); + heading = char; + } + + return ( + <> + {heading && ( + <Heading + as='h2' + id={char} + title={char} + > + {char.toUpperCase()} + </Heading> + )} + <Heading + as='h3' + id={key} + title={key} + > + {toTitleCase(key)} + </Heading> + <p>{parse(value)}</p> + </> + ); + })} + </> + ); +} \ No newline at end of file diff --git a/docs/site/src/css/custom.css b/docs/site/src/css/custom.css index 59c5136435d..85816995775 100644 --- a/docs/site/src/css/custom.css +++ b/docs/site/src/css/custom.css @@ -29,6 +29,7 @@ --ifm-font-family-base: "Inter", sans-serif; --ifm-menu-color: #011829; --ifm-menu-color-background-active: transparent; + --ifm-hover-overlay: var(--ifm-color-emphasis-100); --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); --iota-black: #111111; --iota-blue: #6fbcf0; @@ -89,7 +90,7 @@ } /* For readability concerns, you should choose a lighter palette in dark mode. */ -[data-theme="dark"] { +html[data-theme="dark"] { --ifm-color-primary: #4ca2ff; --ifm-color-primary-dark: #2b91ff; --ifm-color-primary-darker: #1a88ff; @@ -102,6 +103,7 @@ --ifm-menu-color-background-active: transparent; --ifm-navbar-sidebar-link-color: #f7f7f8; --ifm-navbar-sidebar-background-color: black; + --ifm-hover-overlay: var(--ifm-color-emphasis-100); } .active-scroll-spy { @@ -112,16 +114,20 @@ [data-theme="dark"] img.balance-coin-token { filter: invert(1); } + .table-of-contents__link--active { color: #525860; font-weight: 600; } +/* Hide ToC from imported READMEs */ .hidden-text{ display: none; } + [data-theme="dark"] .table-of-contents__link--active { color: white; } + /** navbar overrides */ [data-theme="light"] .clean-btn:hover { background-color: #525860; @@ -172,17 +178,21 @@ color: white; font-weight: 500; } + .pagination-nav__label--blue, .pagination-nav__sublabel--blue { color: white; } + .pagination-nav { display: flex; justify-content: space-between; } + [data-theme="light"] .pagination-nav__link { border: 1px solid #d8e1f4; } + .pagination-nav__link { background-color: transparent; border-radius: 0px; @@ -193,6 +203,7 @@ width: fit-content; min-width: 240px; } + .pagination-nav__label { color: white; } @@ -204,6 +215,7 @@ flex-direction: column; justify-content: space-between !important; } + .page-nav-content-light { display: flex; align-items: center; @@ -212,6 +224,7 @@ color: white !important; flex-direction: row-reverse; } + .page-nav-content-blue { display: flex; align-items: center; @@ -219,31 +232,38 @@ width: 100%; color: white !important; } + .page-nav-arrow--light, .pagination-nav__sublabel--light { color: white; } + .pagination-nav__label--light { color: black; } + [data-theme="dark"] .page-nav-arrow--light, .pagination-nav__sublabel--light, .pagination-nav__label--light { color: white; } + [data-theme="light"] .page-nav-arrow--light, .pagination-nav__label--light { color: black; } + [data-theme="light"] .pagination-nav__sublabel--light { color: #909fbe; } + [data-theme="dark"] .pagination-nav__label--light { color: white; } html[data-theme="dark"] { background-color: var(--iota-black); } + /** setup global style overrides */ body { font-family: var(--primaryFont); @@ -256,6 +276,7 @@ h1 { font-weight: 500; letter-spacing: -0.04em; } + .h1 { letter-spacing: -2.88px; margin-top: 0; @@ -273,6 +294,7 @@ h2 { line-height: 2.125rem; letter-spacing: -0.04em; } + .h2 { letter-spacing: -1.62px; margin-top: 0; @@ -316,24 +338,30 @@ h4 { line-height: 1.75rem; letter-spacing: -2%; } + @media screen and (max-width: 767px) { + h1, .h1 { font-size: 3.5rem; } + h2, .h2 { font-size: 2rem; } + h3, .h3 { font-size: 1.5rem; } + h4, .h4 { font-size: 1.2rem; } } + @media screen and (max-width: 599px) { .pagination-nav{ display: flex; @@ -350,10 +378,12 @@ h4 { .h2 { font-size: 1.7rem; } + h3, .h3 { font-size: 1.2rem; } + h4, .h4 { font-size: 1rem; @@ -365,19 +395,24 @@ h4 { border-bottom: 1px solid var(--iota-line); background-color: black; } + .navbar__title { width: 10px; } + .navbar__toggle path { stroke: var(--iota-white); } + .navbar__items { color: rgba(255, 255, 255, 0.7); } + .navbar__items .navbar__brand { width: 17%; color: rgba(255, 255, 255, 0.7); } + .navbar__items .navbar__item.navbar__link { /* font-family: var(--headerFont); */ font-size: 0.9375rem; @@ -408,10 +443,12 @@ h4 { [data-theme='light'] .DocSearch { --docsearch-searchbox-background: var(--ifm-background-color-dark); } + .DocSearch-Button-Container { width: 100%; justify-content: space-between; } + .DocSearch-Button { width: 12.5rem; height: 2.625rem !important; @@ -423,18 +460,22 @@ h4 { font-family: var(--primaryFont); letter-spacing: -0.01em; } + @media screen and (max-width: 599px) { .DocSearch-Button { width: initial; } } + .DocSearch-Search-Icon { order: 2; margin-left: auto; } + .DocSearch-Search-Icon path { stroke: var(--iota-white); } + .DocSearch-Button-Keys { display: none !important; } @@ -443,6 +484,7 @@ h4 { row-gap: 1rem; column-gap: 1rem; } + .markdown h1:first-child { margin-top: 1rem; } @@ -453,12 +495,15 @@ h4 { color: var(--iota-white); background: var(--iota-hero-dark); } -.button--success{ + +.button--success { background: var(--iota-success-dark); } -.button--danger{ + +.button--danger { background: var(--iota-issue-dark); } + .button-cta { letter-spacing: -0.3px; cursor: pointer; @@ -480,22 +525,26 @@ h4 { justify-content: center; gap: 1rem; } + .button-cta:hover { background-color: var(--iota-button-hover); color: var(--iota-white); text-decoration: none; } + .button-cta:after { content: url("data:image/svg+xml,%3Csvg width='18' height='19' viewBox='0 0 18 19' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5 5.5H14V14.5' stroke='%23ABBDCC' stroke-width='2'/%3E%3Cpath d='M14 5.5L3 16.5' stroke='%23ABBDCC' stroke-width='2'/%3E%3C/svg%3E"); width: 18px; height: 18px; padding-bottom: 2px; } + @media (max-width: 1050px) { .navbar .button-cta { display: none; } } + .footer { background-color: black; } @@ -504,10 +553,57 @@ h4 { .text-white { color: var(--iota-white); } + .text-gray { color: var(--iota-gray); } +/*------------Jargon---------------*/ +/* Add a dashed line under jargon terms */ +.jargon-term { + text-decoration: underline var(--ifm-color-primary-light); +} + +/* Add a question mark behind/above jargon terms */ +.jargon-term::after { + content: '?'; + font-weight: bold; + display: inline-block; + transform: translate(0, -0.5em); + font-size: 75%; + color: var(--ifm-color-primary-light); + margin-left: 3px; +} + +/* Hover behavior for the therm itself */ +.jargon-term:hover { + position: relative; + text-decoration: none; + cursor: help; +} + +/* Hide info by default */ +.jargon-term .jargon-info { + display: none; +} + +/* Show info on hover */ +.jargon-term:hover .jargon-info { + display: block; + position: absolute; + top: 1.5em; + left: 0; + background: var(--ifm-hover-overlay); + border: 1px solid var(--ifm-color-primary-light); + padding: 1rem; + border-radius: 4px; + font-size: 90%; + min-width: 250px; + max-width: 450px; + z-index: 1; +} +/*---------------------------------*/ + /* Ensure equations are scrollable on smaller screens */ .katex-display { overflow-x: scroll; @@ -526,4 +622,4 @@ h4 { .katex-display { max-width: 100%; overflow-wrap: break-word; -} \ No newline at end of file +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5233dee99b1..e765a5f6859 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1311,6 +1311,9 @@ importers: '@amplitude/analytics-browser': specifier: ^1.10.3 version: 1.13.6 + '@artsy/to-title-case': + specifier: ^1.1.0 + version: 1.1.0 '@docsearch/react': specifier: ^3.6.0 version: 3.6.1(@algolia/client-search@4.24.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -1395,6 +1398,9 @@ importers: hast-util-is-element: specifier: ^1.1.0 version: 1.1.0 + html-react-parser: + specifier: ^5.1.18 + version: 5.1.18(@types/react@18.3.9)(react@18.3.1) lodash: specifier: ^4.17.21 version: 4.17.21 @@ -1428,6 +1434,9 @@ importers: react-ui-scrollspy: specifier: ^2.3.0 version: 2.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + rehype-jargon: + specifier: ^3.1.0 + version: 3.1.0 rehype-katex: specifier: ^7.0.0 version: 7.0.1 @@ -2224,6 +2233,9 @@ packages: resolution: {integrity: sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==} engines: {node: '>=14'} + '@artsy/to-title-case@1.1.0': + resolution: {integrity: sha512-n2GISILNv3X9xVjkUC1thoOl7rVKPeDskobQJsC5G8poFpF4HNxxSJD97NjvCK3Ai1RplSMsN2MCmMAy7plx9Q==} + '@aw-web-design/x-default-browser@1.4.126': resolution: {integrity: sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==} hasBin: true @@ -10880,6 +10892,9 @@ packages: hast-util-from-html-isomorphic@2.0.0: resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} + hast-util-from-html@2.0.1: + resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==} + hast-util-from-html@2.0.3: resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} @@ -10954,6 +10969,9 @@ packages: hpack.js@2.1.6: resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + html-dom-parser@5.0.10: + resolution: {integrity: sha512-GwArYL3V3V8yU/mLKoFF7HlLBv80BZ2Ey1BzfVNRpAci0cEKhFHI/Qh8o8oyt3qlAMLlK250wsxLdYX4viedvg==} + html-encoding-sniffer@4.0.0: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} @@ -10974,6 +10992,15 @@ packages: engines: {node: ^14.13.1 || >=16.0.0} hasBin: true + html-react-parser@5.1.18: + resolution: {integrity: sha512-65BwC0zzrdeW96jB2FRr5f1ovBhRMpLPJNvwkY5kA8Ay5xdL9t/RH2/uUTM7p+cl5iM88i6dDk4LXtfMnRmaJQ==} + peerDependencies: + '@types/react': 0.14 || 15 || 16 || 17 || 18 + react: 0.14 || 15 || 16 || 17 || 18 + peerDependenciesMeta: + '@types/react': + optional: true + html-tags@3.3.1: resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} engines: {node: '>=8'} @@ -10999,6 +11026,9 @@ packages: htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + htmlparser2@9.1.0: + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} @@ -12042,12 +12072,18 @@ packages: lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + lodash.deburr@4.1.0: + resolution: {integrity: sha512-m/M1U1f3ddMCs6Hq2tAsYThTBDaAKFDX3dwDo97GEYzamXi9SqUpjWi/Rrj/gf3X2n8ktwgZrlP1z6E3v/IExQ==} + lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + lodash.memoize@4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} @@ -12063,6 +12099,9 @@ packages: lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + lodash.upperfirst@4.3.1: + resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -14156,6 +14195,9 @@ packages: react: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-property@2.0.2: + resolution: {integrity: sha512-+PbtI3VuDV0l6CleQMsx2gtK0JZbZKbpdu5ynr+lbsuvtmgbNcS3VM0tuY2QjFNOcWxvXeHjDpy42RO+4U2rug==} + react-redux@8.1.3: resolution: {integrity: sha512-n0ZrutD7DaX/j9VscF+uTALI3oUPa/pO4Z3soOBIjuRn/FzVu6aehhysxZCLi6y7duMf52WNZGMl7CtuK5EnRw==} peerDependencies: @@ -14455,6 +14497,10 @@ packages: resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} hasBin: true + rehype-jargon@3.1.0: + resolution: {integrity: sha512-DTvSVI0MPa9Gen7oiob71ROG+ztagQ2KIDbM/1vUsZvrh0f8G2YyxrNoS4AL0WQHbHwwNzg/wLz301B3u+Tq7Q==} + engines: {node: '>=18', npm: '>=9'} + rehype-katex@7.0.1: resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} @@ -15215,6 +15261,9 @@ packages: resolution: {integrity: sha512-V1LGY4UUo0jgwC+ELQ2BNWfPa17TIuwBLg+j1AA/9RPzKINl1lhxVEu2r+ZTTO8aetIsUzE5Qj6LMSBkoGYKKw==} engines: {node: '>=14.16'} + style-to-js@1.1.16: + resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} + style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} @@ -17120,6 +17169,12 @@ snapshots: transitivePeerDependencies: - encoding + '@artsy/to-title-case@1.1.0': + dependencies: + lodash.deburr: 4.1.0 + lodash.isnumber: 3.0.3 + lodash.upperfirst: 4.3.1 + '@aw-web-design/x-default-browser@1.4.126': dependencies: default-browser-id: 3.0.0 @@ -28892,6 +28947,15 @@ snapshots: hast-util-from-html: 2.0.3 unist-util-remove-position: 5.0.0 + hast-util-from-html@2.0.1: + dependencies: + '@types/hast': 3.0.4 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.1 + parse5: 7.1.2 + vfile: 6.0.3 + vfile-message: 4.0.2 + hast-util-from-html@2.0.3: dependencies: '@types/hast': 3.0.4 @@ -29067,6 +29131,11 @@ snapshots: readable-stream: 2.3.8 wbuf: 1.7.3 + html-dom-parser@5.0.10: + dependencies: + domhandler: 5.0.3 + htmlparser2: 9.1.0 + html-encoding-sniffer@4.0.0: dependencies: whatwg-encoding: 3.1.1 @@ -29095,6 +29164,16 @@ snapshots: relateurl: 0.2.7 terser: 5.34.0 + html-react-parser@5.1.18(@types/react@18.3.9)(react@18.3.1): + dependencies: + domhandler: 5.0.3 + html-dom-parser: 5.0.10 + react: 18.3.1 + react-property: 2.0.2 + style-to-js: 1.1.16 + optionalDependencies: + '@types/react': 18.3.9 + html-tags@3.3.1: {} html-void-elements@3.0.0: {} @@ -29133,6 +29212,13 @@ snapshots: domutils: 3.1.0 entities: 4.5.0 + htmlparser2@9.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + entities: 4.5.0 + http-cache-semantics@4.1.1: {} http-call@5.3.0: @@ -30384,10 +30470,14 @@ snapshots: lodash.debounce@4.0.8: {} + lodash.deburr@4.1.0: {} + lodash.get@4.4.2: {} lodash.isequal@4.5.0: {} + lodash.isnumber@3.0.3: {} + lodash.memoize@4.1.2: {} lodash.merge@4.6.2: {} @@ -30398,6 +30488,8 @@ snapshots: lodash.uniq@4.5.0: {} + lodash.upperfirst@4.3.1: {} + lodash@4.17.21: {} log-chopper@1.0.2: @@ -32935,6 +33027,8 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + react-property@2.0.2: {} + react-redux@8.1.3(@types/react-dom@18.3.0)(@types/react@18.3.9)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(redux@4.2.1): dependencies: '@babel/runtime': 7.25.6 @@ -33287,6 +33381,11 @@ snapshots: dependencies: jsesc: 0.5.0 + rehype-jargon@3.1.0: + dependencies: + hast-util-from-html: 2.0.1 + unist-util-visit: 5.0.0 + rehype-katex@7.0.1: dependencies: '@types/hast': 3.0.4 @@ -34241,6 +34340,10 @@ snapshots: strip-json-comments@5.0.0: {} + style-to-js@1.1.16: + dependencies: + style-to-object: 1.0.8 + style-to-object@0.4.4: dependencies: inline-style-parser: 0.1.1 From 17a73b1ce5bd4f23651828cd160b3229cfa2fe05 Mon Sep 17 00:00:00 2001 From: Dr-Electron <dr-electr0n@protonmail.com> Date: Fri, 13 Dec 2024 14:58:36 +0100 Subject: [PATCH 22/28] fix[docs]: Swizzle CodeBlock to allow multiple CodeBlocks to coexist (#4404) --- docs/site/docusaurus.config.js | 4 ++-- docs/site/src/theme/CodeBlock/index.tsx | 29 +++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 docs/site/src/theme/CodeBlock/index.tsx diff --git a/docs/site/docusaurus.config.js b/docs/site/docusaurus.config.js index 42fc2d4a79a..feb04ab538a 100644 --- a/docs/site/docusaurus.config.js +++ b/docs/site/docusaurus.config.js @@ -191,8 +191,8 @@ const config = { type: "text/css", }, ], - themes: ["@docusaurus/theme-live-codeblock", "@docusaurus/theme-mermaid", 'docusaurus-theme-search-typesense', - '@saucelabs/theme-github-codeblock'], + themes: ["@docusaurus/theme-mermaid", 'docusaurus-theme-search-typesense', + '@saucelabs/theme-github-codeblock', '@docusaurus/theme-live-codeblock'], themeConfig: /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ ({ diff --git a/docs/site/src/theme/CodeBlock/index.tsx b/docs/site/src/theme/CodeBlock/index.tsx new file mode 100644 index 00000000000..11c54f01d83 --- /dev/null +++ b/docs/site/src/theme/CodeBlock/index.tsx @@ -0,0 +1,29 @@ +/** + * SWIZZLED VERSION: 3.5.2 + * REASONS: + * - Add check for reference CodeBlock so it can coexist with the original CodeBlock and the live code block + */ +import React from 'react'; +import CodeBlock from '@theme-original/CodeBlock'; +import ReferenceCodeBlock from '@saucelabs/theme-github-codeblock/build/theme/ReferenceCodeBlock'; +import { ReferenceCodeBlockProps } from '@saucelabs/theme-github-codeblock/build/theme/types'; +import type CodeBlockType from '@theme/CodeBlock'; +import type {WrapperProps} from '@docusaurus/types'; + +type Props = WrapperProps<typeof CodeBlockType>; + +function isReferenceCodeBlockType(props: object): props is ReferenceCodeBlockProps { + return 'reference' in props + || ('metastring' in props && typeof props.metastring === 'string' && props.metastring.split(' ').includes('reference')); +} + +// Wrap CodeBlock to check if it is a reference (saucepans) CodeBlock. +// If it isn't, we just return the live plugin CodeBlock which will check, +// if the CodeBlock is a live CodeBlock or the original CodeBlock +export default function CodeBlockWrapper(props: ReferenceCodeBlockProps | Props): JSX.Element { + return ( + <> + {isReferenceCodeBlockType(props) ? <ReferenceCodeBlock {...props} /> : <CodeBlock {...props} />} + </> + ); +} From d7b4ec1aaf93492742524e0833623ac83c30d023 Mon Sep 17 00:00:00 2001 From: Dr-Electron <dr-electr0n@protonmail.com> Date: Fri, 13 Dec 2024 16:28:45 +0100 Subject: [PATCH 23/28] fix(docs): fix admonitions (#4455) --- docs/content/_snippets/info-high-traffic.mdx | 7 +++++++ docs/content/_snippets/warn-ml-rpcs.mdx | 9 --------- docs/content/references/iota-api.mdx | 2 +- .../references/iota-api/rpc-best-practices.mdx | 4 ++-- .../references/ts-sdk/typescript/index.mdx | 17 ++++------------- 5 files changed, 14 insertions(+), 25 deletions(-) create mode 100644 docs/content/_snippets/info-high-traffic.mdx delete mode 100644 docs/content/_snippets/warn-ml-rpcs.mdx diff --git a/docs/content/_snippets/info-high-traffic.mdx b/docs/content/_snippets/info-high-traffic.mdx new file mode 100644 index 00000000000..734ea92ab9e --- /dev/null +++ b/docs/content/_snippets/info-high-traffic.mdx @@ -0,0 +1,7 @@ +:::info + +It is suggested to use dedicated nodes/shared services rather than public endpoints for production apps with high traffic volume. + +You can either run your own Full nodes, or outsource this to a professional infrastructure provider (preferred for apps that have high traffic). + +::: \ No newline at end of file diff --git a/docs/content/_snippets/warn-ml-rpcs.mdx b/docs/content/_snippets/warn-ml-rpcs.mdx deleted file mode 100644 index d54a7bd25aa..00000000000 --- a/docs/content/_snippets/warn-ml-rpcs.mdx +++ /dev/null @@ -1,9 +0,0 @@ -:::caution - -Use dedicated nodes/shared services rather than public endpoints for production apps. The public endpoints maintained -by the IOTA Foundation are rate-limited, and support only 100 requests -per 30 seconds. Do not use public endpoints in production applications with high traffic volume. - -You can either run your own Full nodes, or outsource this to a professional infrastructure provider (preferred for apps that have high traffic). - -::: \ No newline at end of file diff --git a/docs/content/references/iota-api.mdx b/docs/content/references/iota-api.mdx index ac1d15e9f42..01a192f4c31 100644 --- a/docs/content/references/iota-api.mdx +++ b/docs/content/references/iota-api.mdx @@ -5,7 +5,7 @@ title: IOTA RPC :::info -The IOTA RPC is upgrading from JSON-RPC to GraphQL. See [GraphQL for IOTA RPC](../developer/graphql-rpc.mdx) for more information. +Checkout our experimental [GraphQL for IOTA RPC](../developer/graphql-rpc.mdx) as an alternative option. ::: diff --git a/docs/content/references/iota-api/rpc-best-practices.mdx b/docs/content/references/iota-api/rpc-best-practices.mdx index f7da7c10835..cae50a7227b 100644 --- a/docs/content/references/iota-api/rpc-best-practices.mdx +++ b/docs/content/references/iota-api/rpc-best-practices.mdx @@ -2,11 +2,11 @@ title: RPC Best Practices --- -import WarnMlRpcs from "../../_snippets/warn-ml-rpcs.mdx"; +import HighTrafficRpcs from "../../_snippets/info-high-traffic.mdx"; This topic provides some best practices for configuring your RPC settings to ensure a reliable infrastructure for your projects and services built on IOTA. -<WarnMlRpcs /> +<HighTrafficRpcs /> ## RPC provisioning guidance diff --git a/docs/content/references/ts-sdk/typescript/index.mdx b/docs/content/references/ts-sdk/typescript/index.mdx index f155c2b3822..f1bc88e8908 100644 --- a/docs/content/references/ts-sdk/typescript/index.mdx +++ b/docs/content/references/ts-sdk/typescript/index.mdx @@ -1,5 +1,6 @@ import NetworkInfo from "@site/src/components/NetworkInfo/index.tsx"; import { Networks } from '@site/src/components/constant.tsx'; +import HighTrafficRpcs from "@site/../content/_snippets/info-high-traffic.mdx"; # IOTA TypeScript SDK Quick Start @@ -16,6 +17,9 @@ npm i @iota/iota-sdk The following table lists the locations for IOTA networks. +{ /* TODO: https://github.com/iotaledger/iota/issues/4497 */ } +<HighTrafficRpcs /> + ## IOTA Testnet <NetworkInfo.Move {...Networks['iota_move_testnet']}/> @@ -30,19 +34,6 @@ To create a local IOTA network, you can refer to [Local Development](/developer/ <NetworkInfo.Move {...Networks['iota_localnet']}/> -:::warning - -Use dedicated nodes/shared services rather than public endpoints for production apps. The public -endpoints maintained by the IOTA Foundation (`api.<NETWORK>.iota.cafe:443`) are rate-limited, and support -only 100 requests per 30 seconds or so. Do not use public endpoints in production applications with -high traffic volume. - -You can either run your own Full nodes, or outsource this to a professional infrastructure provider -(preferred for apps that have high traffic). You can find a list of reliable RPC endpoint providers -for IOTA on the [IOTA Dev Portal](https://iota.io/developers#dev-tools) using the **Node Service** tab. - -::: - ## Migrate to version 0.38.0 The IOTA TypeScript SDK was refactored beginning with version 0.38.0. If you are updating from an From 855f5fd46ee89969e0790146ee735b5f524c5619 Mon Sep 17 00:00:00 2001 From: Dr-Electron <dr-electr0n@protonmail.com> Date: Fri, 13 Dec 2024 16:43:18 +0100 Subject: [PATCH 24/28] fix(docs): Fix architecture diagram and questions (#4451) --- .../getting-started/getting-started.mdx | 2 +- .../getting-started/local-network.mdx | 1 - .../dark/iota-architecture.svg | 2 +- .../iota-architecture.svg | 2 +- .../developer/getting-started/connect.json | 2 +- .../getting-started/create-a-package.json | 39 +++--- .../getting-started/local-network.json | 122 ++++++++++++------ 7 files changed, 113 insertions(+), 57 deletions(-) diff --git a/docs/content/developer/getting-started/getting-started.mdx b/docs/content/developer/getting-started/getting-started.mdx index 76a0fa944ef..ae2bdb4fff8 100644 --- a/docs/content/developer/getting-started/getting-started.mdx +++ b/docs/content/developer/getting-started/getting-started.mdx @@ -10,7 +10,7 @@ tags: # Getting Started IOTA Rebased introduces layer 1 Move smart contracts to the IOTA ecosystem. This valuable addition enhances IOTA by -offering programmability on layer1, complementing [IOTA EVM](../../about-iota/about-iota.mdx#iota-evm-and-shimmer-evm) on layer 2. +offering programmability on layer 1, complementing [IOTA EVM](../../about-iota/about-iota.mdx#iota-evm-and-shimmer-evm) on layer 2. The guides in this section will guide you as you start your IOTA Rebased journey. We recommend that you start by [setting up your development environment](iota-environment.mdx), and then move on diff --git a/docs/content/developer/getting-started/local-network.mdx b/docs/content/developer/getting-started/local-network.mdx index ff670dacf55..8451b219379 100644 --- a/docs/content/developer/getting-started/local-network.mdx +++ b/docs/content/developer/getting-started/local-network.mdx @@ -274,5 +274,4 @@ pnpm add <PATH_TO_YOUR_REPO>/sdk/typescript and the locally compiled version of `@iota/iota-sdk` package will be installed for your application. - <Quiz questions={questions} /> diff --git a/docs/site/static/img/concepts/execution-architecture/dark/iota-architecture.svg b/docs/site/static/img/concepts/execution-architecture/dark/iota-architecture.svg index 7b929d828ab..ab6607556e2 100644 --- a/docs/site/static/img/concepts/execution-architecture/dark/iota-architecture.svg +++ b/docs/site/static/img/concepts/execution-architecture/dark/iota-architecture.svg @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- Do not edit this file with editors other than draw.io --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1157px" height="747px" viewBox="-0.5 -0.5 1157 747" content="<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.17 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.17"> <diagram name="Page-1" id="jhOoJUkd9Zucpb-pnEYY"> <mxGraphModel dx="1623" dy="1938" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="none" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="3kIInuhs_YmBb0iZ2eFI-7" value="&lt;b&gt;Execution layer&lt;/b&gt;" style="verticalAlign=top;align=left;shape=cube;size=10;direction=west;fontStyle=0;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;strokeWidth=1;shadow=1;" parent="1" vertex="1"> <mxGeometry x="495" y="25" width="440" height="450" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-63" value="" style="rounded=1;whiteSpace=wrap;html=1;hachureGap=4;fontFamily=Helvetica;strokeColor=default;fillColor=default;glass=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry x="10.003376623376589" y="39.550041395623865" width="393.8931818181818" height="227.41573033707866" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-8" value="&lt;b&gt;Adapter&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry width="170" height="190" relative="1" as="geometry"> <mxPoint x="30" y="55" as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-43" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="38.86363636363636" y="304.0449438202247" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-9" value="&lt;b&gt;MoveVM&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-43" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-41" value="move-execution/move-vm-runtime" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-43" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-44" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="296.59090909090907" y="306.51685393258424" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-13" value="&lt;b&gt;Framework&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-44" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-42" value="iota-framework crate" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-44" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-56" value="Init" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=45;entryPerimeter=0;curved=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" source="3kIInuhs_YmBb0iZ2eFI-39" target="3kIInuhs_YmBb0iZ2eFI-9" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-58" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="46.16883116883113" y="88.98824364281488" width="378.4090909090909" height="168.0904080425784" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-40" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-58" vertex="1" connectable="0"> <mxGeometry width="128.57142857142858" height="138.42696629213484" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-10" value="&lt;b&gt;Execution-engine&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-40" vertex="1"> <mxGeometry width="128.57142857142856" height="92.63157894736842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-39" value="...execution/&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 13px;&quot;&gt;iota&lt;/span&gt;-adapter/execution-engine" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-58" vertex="1"> <mxGeometry x="5.849999999999999" y="92.6274157303371" width="109.575" height="45.79955056179776" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-61" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=45;exitDy=100;exitPerimeter=0;entryX=1;entryY=0.206;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;curved=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" source="3kIInuhs_YmBb0iZ2eFI-13" target="3kIInuhs_YmBb0iZ2eFI-8" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-62" value="&lt;h4&gt;&lt;font face=&quot;Helvetica&quot;&gt;native fns etc&lt;/font&gt;&lt;/h4&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-61" vertex="1" connectable="0"> <mxGeometry x="-0.1741" y="-1" relative="1" as="geometry"> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-45" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="276.1363636363636" y="98.87640449438204" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-48" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-45" vertex="1" connectable="0"> <mxGeometry width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-46" value="&lt;b&gt;Object runtime&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-48" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-47" value="...execution/&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 13px;&quot;&gt;iota&lt;/span&gt;-move-natives" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-48" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-64" value="&lt;span style=&quot;caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;&quot;&gt;&lt;b style=&quot;&quot;&gt;iota-execution crate&lt;/b&gt;&lt;/span&gt;" style="text;whiteSpace=wrap;html=1;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;rounded=1;fillColor=default;fontColor=default;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry x="268.5363636363636" y="49.43820224719101" width="117.47045454545454" height="29.662921348314605" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-15" value="&lt;b&gt;Nodes network(Iota node)&lt;/b&gt;" style="verticalAlign=top;align=left;shape=cube;size=10;direction=south;fontStyle=0;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;shadow=1;strokeWidth=1;" parent="1" vertex="1"> <mxGeometry x="-210" y="30" width="380" height="430" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-16" value="&lt;b&gt;Node&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry width="330" height="370" relative="1" as="geometry"> <mxPoint x="20" y="40" as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-17" value="&lt;b&gt;API&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="42.2239247311828" y="92.97297297297297" width="85.80645161290323" height="267.2972972972973" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-18" value="&lt;b&gt;Ledger storage&lt;/b&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="253.33129032258068" y="296.9044851994852" width="73.5483870967742" height="92.97297297297297" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-65" value="&lt;b&gt;Indexer&lt;/b&gt;&lt;div&gt;&lt;b&gt;(read/sync db)&lt;/b&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="153.22580645161293" y="296.9044851994852" width="73.5483870967742" height="92.97297297297297" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-19" value="&lt;b&gt;Consensus engine&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="142.5" y="81.91" width="97.5" height="78.09" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-20" value="&lt;b&gt;Network&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="141.25" y="185.91" width="97.5" height="81.43" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-1" value="&lt;b&gt;Core&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="251.77" y="150" width="75.11" height="60" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-34" value="" style="group;rounded=1;" parent="1" vertex="1" connectable="0"> <mxGeometry x="-150" y="500" width="120" height="74.55" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-31" value="&lt;b&gt;iota-json-rpc&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-34" vertex="1"> <mxGeometry width="120" height="50" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-32" value="&lt;div&gt;iota-json-rpc crate&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="3kIInuhs_YmBb0iZ2eFI-34" vertex="1"> <mxGeometry x="20" y="50.00454545454545" width="80" height="24.545454545454547" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-36" value="" style="group;rounded=1;" parent="1" vertex="1" connectable="0"> <mxGeometry x="-150" y="670" width="100" height="70" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-28" value="&lt;b&gt;iota-cli&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-36" vertex="1"> <mxGeometry width="100" height="40" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-35" value="iota-cli crate" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-36" vertex="1"> <mxGeometry y="40" width="90" height="30" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-49" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=45;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;curved=0;strokeWidth=1;shadow=1;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-28" target="3kIInuhs_YmBb0iZ2eFI-32" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-50" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=55;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=1;shadow=1;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-31" target="3kIInuhs_YmBb0iZ2eFI-65" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-6" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;strokeWidth=1;shadow=1;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-7" target="3kIInuhs_YmBb0iZ2eFI-18" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-11" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=32.385;exitDy=0;exitPerimeter=0;entryX=0.407;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;strokeWidth=1;shadow=1;" parent="1" source="C7P2nbfdh_euxFz_vEXo-1" target="3kIInuhs_YmBb0iZ2eFI-7" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> </mxfile> "><defs/><g><g data-cell-id="0"><g data-cell-id="1"><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-7"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 710 31 L 1140 31 L 1150 41 L 1150 481 L 720 481 L 710 471 L 710 31 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(180,930,256)" pointer-events="all"/><path d="M 720 481 L 720 41 L 710 31 M 720 41 L 1150 41" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(180,930,256)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 423px; height: 1px; padding-top: 38px; margin-left: 717px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Execution layer</b></div></div></div></foreignObject><text x="717" y="50" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px">Execution layer</text></switch></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-63"><g><rect x="720" y="70.55" width="393.89" height="227.42" rx="34.11" ry="34.11" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-8"><g><path d="M 730 96 L 910 96 L 920 106 L 920 266 L 740 266 L 730 256 L 730 96 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,825,181)" pointer-events="all"/><path d="M 740 266 L 740 106 L 730 96 M 740 106 L 920 106" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,825,181)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 153px; height: 1px; padding-top: 103px; margin-left: 746px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Adapter</b></div></div></div></foreignObject><text x="823" y="115" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Adapter</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-43"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-9"><g><path d="M 760.45 323.46 L 829.55 323.46 L 839.55 333.46 L 839.55 425.73 L 770.45 425.73 L 760.45 415.73 L 760.45 323.46 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,800,374.6)" pointer-events="all"/><path d="M 770.45 425.73 L 770.45 333.46 L 760.45 323.46 M 770.45 333.46 L 839.55 333.46" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,800,374.6)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 352px; margin-left: 755px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>MoveVM</b></div></div></div></foreignObject><text x="798" y="364" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">MoveVM</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-41"><g><rect x="748.86" y="414.15" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 434px; margin-left: 750px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">move-execution/move-vm-runtime</div></div></div></foreignObject><text x="795" y="438" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">move-execution/...</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-44"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-13"><g><path d="M 1018.18 325.93 L 1087.28 325.93 L 1097.28 335.93 L 1097.28 428.2 L 1028.18 428.2 L 1018.18 418.2 L 1018.18 325.93 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,1057.73,377.07)" pointer-events="all"/><path d="M 1028.18 428.2 L 1028.18 335.93 L 1018.18 325.93 M 1028.18 335.93 L 1097.28 335.93" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,1057.73,377.07)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 355px; margin-left: 1013px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Framework</b></div></div></div></foreignObject><text x="1055" y="367" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Framework</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-42"><g><rect x="1006.59" y="416.62" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 436px; margin-left: 1008px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">iota-framework crate</div></div></div></foreignObject><text x="1053" y="440" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota-framework...</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-56"><g><path d="M 816.81 258.42 L 816.8 286.7 Q 816.8 296.7 811.45 296.7 L 808.78 296.7 Q 806.1 296.7 806.11 306.7 L 806.13 328.68" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 806.14 333.93 L 802.63 326.93 L 806.13 328.68 L 809.63 326.92 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 297px; margin-left: 811px;"><div data-drawio-colors="color: rgb(240, 240, 240); background-color: rgb(24, 20, 29); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; background-color: rgb(24, 20, 29); white-space: nowrap;">Init</div></div></div></foreignObject><text x="811" y="300" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="11px" text-anchor="middle">Init</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-58"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-40"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-10"><g><path d="M 774.14 102.02 L 856.77 102.02 L 866.77 112.02 L 866.77 230.59 L 784.14 230.59 L 774.14 220.59 L 774.14 102.02 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,820.45,166.3)" pointer-events="all"/><path d="M 784.14 230.59 L 784.14 112.02 L 774.14 102.02 M 784.14 112.02 L 866.77 112.02" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,820.45,166.3)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 112px; height: 1px; padding-top: 137px; margin-left: 762px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Execution-engine</b></div></div></div></foreignObject><text x="818" y="149" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Execution-engine</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-39"><g><rect x="762.02" y="212.62" width="109.58" height="45.8" rx="6.87" ry="6.87" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 236px; margin-left: 763px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">...execution/<span style="font-family: "Helvetica Neue"; font-size: 13px;">iota</span>-adapter/execution-engine</div></div></div></foreignObject><text x="817" y="239" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">...execution/iota-...</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-61"><g><path d="M 1008.86 382.52 L 885 382.5 Q 875 382.5 875 372.5 L 874.98 282.37" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 874.98 277.12 L 878.48 284.12 L 874.98 282.37 L 871.48 284.12 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-62"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 382px; margin-left: 910px;"><div data-drawio-colors="color: rgb(240, 240, 240); background-color: rgb(24, 20, 29); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: "Architects Daughter"; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; background-color: rgb(24, 20, 29); white-space: nowrap;"><h4><font face="Helvetica">native fns etc</font></h4></div></div></div></foreignObject><text x="910" y="385" fill="rgb(240, 240, 240)" font-family=""Architects Daughter"" font-size="11px" text-anchor="middle">native fns etc</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-45"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-48"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-46"><g><path d="M 997.72 118.29 L 1066.82 118.29 L 1076.82 128.29 L 1076.82 220.56 L 1007.72 220.56 L 997.72 210.56 L 997.72 118.29 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,1037.27,169.43)" pointer-events="all"/><path d="M 1007.72 220.56 L 1007.72 128.29 L 997.72 118.29 M 1007.72 128.29 L 1076.82 128.29" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,1037.27,169.43)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 147px; margin-left: 992px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Object runtime</b></div></div></div></foreignObject><text x="1035" y="159" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Object runtime</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-47"><g><rect x="986.14" y="208.98" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 229px; margin-left: 987px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">...execution/<span style="font-family: "Helvetica Neue"; font-size: 13px;">iota</span>-move-natives</div></div></div></foreignObject><text x="1032" y="232" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">...execution/io...</text></switch></g></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-64"><g><rect x="978.54" y="80.44" width="117.47" height="29.66" rx="4.45" ry="4.45" fill="rgb(24, 20, 29)" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 115px; height: 1px; padding-top: 87px; margin-left: 981px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: "Architects Daughter"; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;"><b style="">iota-execution crate</b></span></div></div></div></foreignObject><text x="981" y="99" fill="rgb(240, 240, 240)" font-family=""Architects Daughter"" font-size="12px">iota-execution crate</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-15"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M -20 61 L 400 61 L 410 71 L 410 441 L -10 441 L -20 431 L -20 61 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,195,251)" pointer-events="all"/><path d="M -10 441 L -10 71 L -20 61 M -10 71 L 410 71" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,195,251)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 363px; height: 1px; padding-top: 53px; margin-left: 12px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Nodes network(Iota node)</b></div></div></div></foreignObject><text x="12" y="65" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px">Nodes network(Iota node)</text></switch></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-16"><g><path d="M 5 96 L 365 96 L 375 106 L 375 426 L 15 426 L 5 416 L 5 96 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,190,261)" pointer-events="all"/><path d="M 15 426 L 15 106 L 5 96 M 15 106 L 375 106" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,190,261)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 313px; height: 1px; padding-top: 93px; margin-left: 31px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Node</b></div></div></div></foreignObject><text x="188" y="105" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Node</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-17"><g><path d="M -43.52 219.72 L 213.78 219.72 L 223.78 229.72 L 223.78 305.52 L -33.52 305.52 L -43.52 295.52 L -43.52 219.72 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,90.13,262.62)" pointer-events="all"/><path d="M -33.52 305.52 L -33.52 229.72 L -43.52 219.72 M -33.52 229.72 L 223.78 229.72" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,90.13,262.62)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 69px; height: 1px; padding-top: 146px; margin-left: 53px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>API</b></div></div></div></foreignObject><text x="88" y="158" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">API</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-18"><g><path d="M 258.33 347.9 C 258.33 339.62 274.8 332.9 295.11 332.9 C 304.86 332.9 314.21 334.48 321.11 337.3 C 328.01 340.11 331.88 343.93 331.88 347.9 L 331.88 410.88 C 331.88 419.16 315.42 425.88 295.11 425.88 C 274.8 425.88 258.33 419.16 258.33 410.88 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/><path d="M 331.88 347.9 C 331.88 356.19 315.42 362.9 295.11 362.9 C 274.8 362.9 258.33 356.19 258.33 347.9" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 72px; height: 1px; padding-top: 392px; margin-left: 259px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Ledger storage</b></div></div></div></foreignObject><text x="295" y="395" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Ledger stora...</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-65"><g><path d="M 158.23 347.9 C 158.23 339.62 174.69 332.9 195 332.9 C 204.75 332.9 214.11 334.48 221 337.3 C 227.9 340.11 231.77 343.93 231.77 347.9 L 231.77 410.88 C 231.77 419.16 215.31 425.88 195 425.88 C 174.69 425.88 158.23 419.16 158.23 410.88 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/><path d="M 231.77 347.9 C 231.77 356.19 215.31 362.9 195 362.9 C 174.69 362.9 158.23 356.19 158.23 347.9" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 72px; height: 1px; padding-top: 392px; margin-left: 159px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Indexer</b><div><b>(read/sync db)</b></div></div></div></div></foreignObject><text x="195" y="395" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Indexer...</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-19"><g><path d="M 157.2 108.2 L 225.29 108.2 L 235.29 118.2 L 235.29 205.7 L 167.2 205.7 L 157.2 195.7 L 157.2 108.2 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,196.25,156.95)" pointer-events="all"/><path d="M 167.2 205.7 L 167.2 118.2 L 157.2 108.2 M 167.2 118.2 L 235.29 118.2" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,196.25,156.95)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 81px; height: 1px; padding-top: 135px; margin-left: 154px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Consensus engine</b></div></div></div></foreignObject><text x="194" y="147" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Consensus engi...</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-20"><g><path d="M 154.28 213.88 L 225.72 213.88 L 235.72 223.88 L 235.72 311.38 L 164.28 311.38 L 154.28 301.38 L 154.28 213.88 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,195,262.63)" pointer-events="all"/><path d="M 164.28 311.38 L 164.28 223.88 L 154.28 213.88 M 164.28 223.88 L 235.72 223.88" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,195,262.63)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 81px; height: 1px; padding-top: 239px; margin-left: 152px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Network</b></div></div></div></foreignObject><text x="193" y="251" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Network</text></switch></g></g></g><g data-cell-id="C7P2nbfdh_euxFz_vEXo-1"><g><path d="M 264.32 178.44 L 314.32 178.44 L 324.32 188.44 L 324.32 253.56 L 274.32 253.56 L 264.32 243.56 L 264.32 178.44 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,294.33,216)" pointer-events="all"/><path d="M 274.32 253.56 L 274.32 188.44 L 264.32 178.44 M 274.32 188.44 L 324.32 188.44" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,294.33,216)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 203px; margin-left: 263px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Core</b></div></div></div></foreignObject><text x="292" y="215" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Core</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-34"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-31"><g><path d="M 100 471 L 140 471 L 150 481 L 150 591 L 110 591 L 100 581 L 100 471 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,125,531)" pointer-events="all"/><path d="M 110 591 L 110 481 L 100 471 M 110 481 L 150 481" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,125,531)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 103px; height: 1px; padding-top: 523px; margin-left: 71px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>iota-json-rpc</b></div></div></div></foreignObject><text x="123" y="535" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota-json-rpc</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-32"><g><rect x="85" y="556" width="80" height="24.55" rx="3.68" ry="3.68" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 568px; margin-left: 86px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><div>iota-json-rpc crate<br /></div></div></div></div></foreignObject><text x="125" y="572" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota-json-rpc...</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-36"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-28"><g><path d="M 95 646 L 125 646 L 135 656 L 135 746 L 105 746 L 95 736 L 95 646 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,115,696)" pointer-events="all"/><path d="M 105 746 L 105 656 L 95 646 M 105 656 L 135 656" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,115,696)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 83px; height: 1px; padding-top: 693px; margin-left: 71px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>iota-cli</b></div></div></div></foreignObject><text x="113" y="705" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota-cli</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-35"><g><rect x="65" y="716" width="90" height="30" rx="4.5" ry="4.5" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 731px; margin-left: 66px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">iota-cli crate</div></div></div></foreignObject><text x="110" y="735" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota-cli crate</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-49"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 120 676 L 120 638.3 Q 120 628.3 122.5 628.3 L 123.75 628.3 Q 125 628.3 125 618.3 L 125 586.92" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 125 581.67 L 128.5 588.67 L 125 586.92 L 121.5 588.67 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-50"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 130 506 L 130 476 Q 130 466 140 466 L 185 466 Q 195 466 195 456 L 195 432.25" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 195 427 L 198.5 434 L 195 432.25 L 191.5 434 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="C7P2nbfdh_euxFz_vEXo-6"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 710 256 L 530.9 256 Q 520.9 256 520.9 266 L 520.9 369.4 Q 520.9 379.4 510.9 379.4 L 338.25 379.39" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 333 379.39 L 340 375.89 L 338.25 379.39 L 340 382.89 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="C7P2nbfdh_euxFz_vEXo-11"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 331.88 218.38 L 511 218.4 Q 521 218.4 521 208.4 L 521 21 Q 521 11 531 11 L 960.9 11 Q 970.9 11 970.91 17.82 L 970.91 24.63" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 970.92 29.88 L 967.41 22.89 L 970.91 24.63 L 974.41 22.88 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g></g></g></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1157px" height="747px" viewBox="-0.5 -0.5 1157 747" content="<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.17 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.17"> <diagram name="Page-1" id="jhOoJUkd9Zucpb-pnEYY"> <mxGraphModel dx="1623" dy="1938" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="none" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="3kIInuhs_YmBb0iZ2eFI-7" value="&lt;b&gt;Execution layer&lt;/b&gt;" style="verticalAlign=top;align=left;shape=cube;size=10;direction=west;fontStyle=0;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;strokeWidth=1;shadow=1;" parent="1" vertex="1"> <mxGeometry x="495" y="25" width="440" height="450" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-63" value="" style="rounded=1;whiteSpace=wrap;html=1;hachureGap=4;fontFamily=Helvetica;strokeColor=default;fillColor=default;glass=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry x="10.003376623376589" y="39.550041395623865" width="393.8931818181818" height="227.41573033707866" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-8" value="&lt;b&gt;Adapter&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry width="170" height="190" relative="1" as="geometry"> <mxPoint x="30" y="55" as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-43" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="38.86363636363636" y="304.0449438202247" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-9" value="&lt;b&gt;MoveVM&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-43" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-41" value="move-execution/move-vm-runtime" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-43" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-44" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="296.59090909090907" y="306.51685393258424" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-13" value="&lt;b&gt;Framework&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-44" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-42" value="iota-framework crate" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-44" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-56" value="Init" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=45;entryPerimeter=0;curved=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" source="3kIInuhs_YmBb0iZ2eFI-39" target="3kIInuhs_YmBb0iZ2eFI-9" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-58" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="46.16883116883113" y="88.98824364281488" width="378.4090909090909" height="168.0904080425784" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-40" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-58" vertex="1" connectable="0"> <mxGeometry width="128.57142857142858" height="138.42696629213484" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-10" value="&lt;b&gt;Execution-engine&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-40" vertex="1"> <mxGeometry width="128.57142857142856" height="92.63157894736842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-39" value="...execution/&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 13px;&quot;&gt;iota&lt;/span&gt;-adapter/execution-engine" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-58" vertex="1"> <mxGeometry x="5.849999999999999" y="92.6274157303371" width="109.575" height="45.79955056179776" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-61" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=45;exitDy=100;exitPerimeter=0;entryX=1;entryY=0.206;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;curved=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" source="3kIInuhs_YmBb0iZ2eFI-13" target="3kIInuhs_YmBb0iZ2eFI-8" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-62" value="&lt;h4&gt;&lt;font face=&quot;Helvetica&quot;&gt;native fns etc&lt;/font&gt;&lt;/h4&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-61" vertex="1" connectable="0"> <mxGeometry x="-0.1741" y="-1" relative="1" as="geometry"> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-45" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="276.1363636363636" y="98.87640449438204" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-48" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-45" vertex="1" connectable="0"> <mxGeometry width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-46" value="&lt;b&gt;Object runtime&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-48" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-47" value="...execution/&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 13px;&quot;&gt;iota&lt;/span&gt;-move-natives" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-48" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-64" value="&lt;span style=&quot;caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;&quot;&gt;&lt;b style=&quot;&quot;&gt;iota-execution crate&lt;/b&gt;&lt;/span&gt;" style="text;whiteSpace=wrap;html=1;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;rounded=1;fillColor=default;fontColor=default;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry x="268.5363636363636" y="49.43820224719101" width="117.47045454545454" height="29.662921348314605" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-15" value="&lt;b&gt;Nodes network(Iota node)&lt;/b&gt;" style="verticalAlign=top;align=left;shape=cube;size=10;direction=south;fontStyle=0;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;shadow=1;strokeWidth=1;" parent="1" vertex="1"> <mxGeometry x="-210" y="30" width="380" height="430" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-16" value="&lt;b&gt;Node&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry width="330" height="370" relative="1" as="geometry"> <mxPoint x="20" y="40" as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-17" value="&lt;b&gt;API&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="42.2239247311828" y="92.97297297297297" width="85.80645161290323" height="267.2972972972973" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-18" value="&lt;b&gt;Ledger storage&lt;/b&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="253.33129032258068" y="296.9044851994852" width="73.5483870967742" height="92.97297297297297" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-65" value="&lt;b&gt;Indexer&lt;/b&gt;&lt;div&gt;&lt;b&gt;(read/sync db)&lt;/b&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="153.22580645161293" y="296.9044851994852" width="73.5483870967742" height="92.97297297297297" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-19" value="&lt;b&gt;Consensus engine&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="142.5" y="81.91" width="97.5" height="78.09" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-20" value="&lt;b&gt;Network&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="141.25" y="185.91" width="97.5" height="81.43" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-1" value="&lt;b&gt;Core&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="251.77" y="150" width="75.11" height="60" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-34" value="" style="group;rounded=1;" parent="1" vertex="1" connectable="0"> <mxGeometry x="-150" y="500" width="120" height="74.55" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-31" value="&lt;b&gt;iota-json-rpc&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-34" vertex="1"> <mxGeometry width="120" height="50" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-32" value="&lt;div&gt;iota-json-rpc crate&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="3kIInuhs_YmBb0iZ2eFI-34" vertex="1"> <mxGeometry x="20" y="50.00454545454545" width="80" height="24.545454545454547" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-36" value="" style="group;rounded=1;" parent="1" vertex="1" connectable="0"> <mxGeometry x="-150" y="670" width="100" height="70" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-28" value="&lt;b&gt;iota-cli&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-36" vertex="1"> <mxGeometry width="100" height="40" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-35" value="iota crate" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-36" vertex="1"> <mxGeometry y="40" width="90" height="30" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-49" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=45;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;curved=0;strokeWidth=1;shadow=1;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-28" target="3kIInuhs_YmBb0iZ2eFI-32" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-50" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=55;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;strokeWidth=1;shadow=1;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-31" target="3kIInuhs_YmBb0iZ2eFI-65" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-6" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;strokeWidth=1;shadow=1;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-7" target="3kIInuhs_YmBb0iZ2eFI-18" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-11" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=32.385;exitDy=0;exitPerimeter=0;entryX=0.407;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;strokeWidth=1;shadow=1;" parent="1" source="C7P2nbfdh_euxFz_vEXo-1" target="3kIInuhs_YmBb0iZ2eFI-7" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> </mxfile> "><defs/><g><g data-cell-id="0"><g data-cell-id="1"><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-7"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 710 31 L 1140 31 L 1150 41 L 1150 481 L 720 481 L 710 471 L 710 31 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(180,930,256)" pointer-events="all"/><path d="M 720 481 L 720 41 L 710 31 M 720 41 L 1150 41" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(180,930,256)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 423px; height: 1px; padding-top: 38px; margin-left: 717px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Execution layer</b></div></div></div></foreignObject><text x="717" y="50" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px">Execution layer</text></switch></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-63"><g><rect x="720" y="70.55" width="393.89" height="227.42" rx="34.11" ry="34.11" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-8"><g><path d="M 730 96 L 910 96 L 920 106 L 920 266 L 740 266 L 730 256 L 730 96 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,825,181)" pointer-events="all"/><path d="M 740 266 L 740 106 L 730 96 M 740 106 L 920 106" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,825,181)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 153px; height: 1px; padding-top: 103px; margin-left: 746px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Adapter</b></div></div></div></foreignObject><text x="823" y="115" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Adapter</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-43"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-9"><g><path d="M 760.45 323.46 L 829.55 323.46 L 839.55 333.46 L 839.55 425.73 L 770.45 425.73 L 760.45 415.73 L 760.45 323.46 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,800,374.6)" pointer-events="all"/><path d="M 770.45 425.73 L 770.45 333.46 L 760.45 323.46 M 770.45 333.46 L 839.55 333.46" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,800,374.6)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 352px; margin-left: 755px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>MoveVM</b></div></div></div></foreignObject><text x="798" y="364" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">MoveVM</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-41"><g><rect x="748.86" y="414.15" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 434px; margin-left: 750px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">move-execution/move-vm-runtime</div></div></div></foreignObject><text x="795" y="438" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">move-execution/...</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-44"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-13"><g><path d="M 1018.18 325.93 L 1087.28 325.93 L 1097.28 335.93 L 1097.28 428.2 L 1028.18 428.2 L 1018.18 418.2 L 1018.18 325.93 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,1057.73,377.07)" pointer-events="all"/><path d="M 1028.18 428.2 L 1028.18 335.93 L 1018.18 325.93 M 1028.18 335.93 L 1097.28 335.93" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,1057.73,377.07)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 355px; margin-left: 1013px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Framework</b></div></div></div></foreignObject><text x="1055" y="367" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Framework</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-42"><g><rect x="1006.59" y="416.62" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 436px; margin-left: 1008px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">iota-framework crate</div></div></div></foreignObject><text x="1053" y="440" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota-framework...</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-56"><g><path d="M 816.81 258.42 L 816.8 286.7 Q 816.8 296.7 811.45 296.7 L 808.78 296.7 Q 806.1 296.7 806.11 306.7 L 806.13 328.68" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 806.14 333.93 L 802.63 326.93 L 806.13 328.68 L 809.63 326.92 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 297px; margin-left: 811px;"><div data-drawio-colors="color: rgb(240, 240, 240); background-color: rgb(24, 20, 29); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; background-color: rgb(24, 20, 29); white-space: nowrap;">Init</div></div></div></foreignObject><text x="811" y="300" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="11px" text-anchor="middle">Init</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-58"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-40"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-10"><g><path d="M 774.14 102.02 L 856.77 102.02 L 866.77 112.02 L 866.77 230.59 L 784.14 230.59 L 774.14 220.59 L 774.14 102.02 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,820.45,166.3)" pointer-events="all"/><path d="M 784.14 230.59 L 784.14 112.02 L 774.14 102.02 M 784.14 112.02 L 866.77 112.02" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,820.45,166.3)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 112px; height: 1px; padding-top: 137px; margin-left: 762px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Execution-engine</b></div></div></div></foreignObject><text x="818" y="149" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Execution-engine</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-39"><g><rect x="762.02" y="212.62" width="109.58" height="45.8" rx="6.87" ry="6.87" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 236px; margin-left: 763px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">...execution/<span style="font-family: "Helvetica Neue"; font-size: 13px;">iota</span>-adapter/execution-engine</div></div></div></foreignObject><text x="817" y="239" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">...execution/iota-...</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-61"><g><path d="M 1008.86 382.52 L 885 382.5 Q 875 382.5 875 372.5 L 874.98 282.37" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 874.98 277.12 L 878.48 284.12 L 874.98 282.37 L 871.48 284.12 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-62"><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 382px; margin-left: 910px;"><div data-drawio-colors="color: rgb(240, 240, 240); background-color: rgb(24, 20, 29); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: "Architects Daughter"; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; background-color: rgb(24, 20, 29); white-space: nowrap;"><h4><font face="Helvetica">native fns etc</font></h4></div></div></div></foreignObject><text x="910" y="385" fill="rgb(240, 240, 240)" font-family=""Architects Daughter"" font-size="11px" text-anchor="middle">native fns etc</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-45"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-48"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-46"><g><path d="M 997.72 118.29 L 1066.82 118.29 L 1076.82 128.29 L 1076.82 220.56 L 1007.72 220.56 L 997.72 210.56 L 997.72 118.29 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,1037.27,169.43)" pointer-events="all"/><path d="M 1007.72 220.56 L 1007.72 128.29 L 997.72 118.29 M 1007.72 128.29 L 1076.82 128.29" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,1037.27,169.43)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 147px; margin-left: 992px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Object runtime</b></div></div></div></foreignObject><text x="1035" y="159" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Object runtime</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-47"><g><rect x="986.14" y="208.98" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 229px; margin-left: 987px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">...execution/<span style="font-family: "Helvetica Neue"; font-size: 13px;">iota</span>-move-natives</div></div></div></foreignObject><text x="1032" y="232" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">...execution/io...</text></switch></g></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-64"><g><rect x="978.54" y="80.44" width="117.47" height="29.66" rx="4.45" ry="4.45" fill="rgb(24, 20, 29)" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 115px; height: 1px; padding-top: 87px; margin-left: 981px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: "Architects Daughter"; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;"><b style="">iota-execution crate</b></span></div></div></div></foreignObject><text x="981" y="99" fill="rgb(240, 240, 240)" font-family=""Architects Daughter"" font-size="12px">iota-execution crate</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-15"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M -20 61 L 400 61 L 410 71 L 410 441 L -10 441 L -20 431 L -20 61 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,195,251)" pointer-events="all"/><path d="M -10 441 L -10 71 L -20 61 M -10 71 L 410 71" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,195,251)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 363px; height: 1px; padding-top: 53px; margin-left: 12px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Nodes network(Iota node)</b></div></div></div></foreignObject><text x="12" y="65" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px">Nodes network(Iota node)</text></switch></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-16"><g><path d="M 5 96 L 365 96 L 375 106 L 375 426 L 15 426 L 5 416 L 5 96 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,190,261)" pointer-events="all"/><path d="M 15 426 L 15 106 L 5 96 M 15 106 L 375 106" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,190,261)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 313px; height: 1px; padding-top: 93px; margin-left: 31px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Node</b></div></div></div></foreignObject><text x="188" y="105" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Node</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-17"><g><path d="M -43.52 219.72 L 213.78 219.72 L 223.78 229.72 L 223.78 305.52 L -33.52 305.52 L -43.52 295.52 L -43.52 219.72 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,90.13,262.62)" pointer-events="all"/><path d="M -33.52 305.52 L -33.52 229.72 L -43.52 219.72 M -33.52 229.72 L 223.78 229.72" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,90.13,262.62)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 69px; height: 1px; padding-top: 146px; margin-left: 53px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>API</b></div></div></div></foreignObject><text x="88" y="158" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">API</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-18"><g><path d="M 258.33 347.9 C 258.33 339.62 274.8 332.9 295.11 332.9 C 304.86 332.9 314.21 334.48 321.11 337.3 C 328.01 340.11 331.88 343.93 331.88 347.9 L 331.88 410.88 C 331.88 419.16 315.42 425.88 295.11 425.88 C 274.8 425.88 258.33 419.16 258.33 410.88 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/><path d="M 331.88 347.9 C 331.88 356.19 315.42 362.9 295.11 362.9 C 274.8 362.9 258.33 356.19 258.33 347.9" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 72px; height: 1px; padding-top: 392px; margin-left: 259px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Ledger storage</b></div></div></div></foreignObject><text x="295" y="395" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Ledger stora...</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-65"><g><path d="M 158.23 347.9 C 158.23 339.62 174.69 332.9 195 332.9 C 204.75 332.9 214.11 334.48 221 337.3 C 227.9 340.11 231.77 343.93 231.77 347.9 L 231.77 410.88 C 231.77 419.16 215.31 425.88 195 425.88 C 174.69 425.88 158.23 419.16 158.23 410.88 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/><path d="M 231.77 347.9 C 231.77 356.19 215.31 362.9 195 362.9 C 174.69 362.9 158.23 356.19 158.23 347.9" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 72px; height: 1px; padding-top: 392px; margin-left: 159px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Indexer</b><div><b>(read/sync db)</b></div></div></div></div></foreignObject><text x="195" y="395" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Indexer...</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-19"><g><path d="M 157.2 108.2 L 225.29 108.2 L 235.29 118.2 L 235.29 205.7 L 167.2 205.7 L 157.2 195.7 L 157.2 108.2 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,196.25,156.95)" pointer-events="all"/><path d="M 167.2 205.7 L 167.2 118.2 L 157.2 108.2 M 167.2 118.2 L 235.29 118.2" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,196.25,156.95)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 81px; height: 1px; padding-top: 135px; margin-left: 154px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Consensus engine</b></div></div></div></foreignObject><text x="194" y="147" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Consensus engi...</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-20"><g><path d="M 154.28 213.88 L 225.72 213.88 L 235.72 223.88 L 235.72 311.38 L 164.28 311.38 L 154.28 301.38 L 154.28 213.88 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,195,262.63)" pointer-events="all"/><path d="M 164.28 311.38 L 164.28 223.88 L 154.28 213.88 M 164.28 223.88 L 235.72 223.88" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,195,262.63)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 81px; height: 1px; padding-top: 239px; margin-left: 152px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Network</b></div></div></div></foreignObject><text x="193" y="251" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Network</text></switch></g></g></g><g data-cell-id="C7P2nbfdh_euxFz_vEXo-1"><g><path d="M 264.32 178.44 L 314.32 178.44 L 324.32 188.44 L 324.32 253.56 L 274.32 253.56 L 264.32 243.56 L 264.32 178.44 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,294.33,216)" pointer-events="all"/><path d="M 274.32 253.56 L 274.32 188.44 L 264.32 178.44 M 274.32 188.44 L 324.32 188.44" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,294.33,216)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 203px; margin-left: 263px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Core</b></div></div></div></foreignObject><text x="292" y="215" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">Core</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-34"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-31"><g><path d="M 100 471 L 140 471 L 150 481 L 150 591 L 110 591 L 100 581 L 100 471 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,125,531)" pointer-events="all"/><path d="M 110 591 L 110 481 L 100 471 M 110 481 L 150 481" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,125,531)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 103px; height: 1px; padding-top: 523px; margin-left: 71px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>iota-json-rpc</b></div></div></div></foreignObject><text x="123" y="535" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota-json-rpc</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-32"><g><rect x="85" y="556" width="80" height="24.55" rx="3.68" ry="3.68" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 568px; margin-left: 86px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><div>iota-json-rpc crate<br /></div></div></div></div></foreignObject><text x="125" y="572" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota-json-rpc...</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-36"><g/><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-28"><g><path d="M 95 646 L 125 646 L 135 656 L 135 746 L 105 746 L 95 736 L 95 646 Z" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,115,696)" pointer-events="all"/><path d="M 105 746 L 105 656 L 95 646 M 105 656 L 135 656" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" transform="rotate(90,115,696)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 83px; height: 1px; padding-top: 693px; margin-left: 71px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>iota-cli</b></div></div></div></foreignObject><text x="113" y="705" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota-cli</text></switch></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-35"><g><rect x="65" y="716" width="90" height="30" rx="4.5" ry="4.5" fill="rgb(24, 20, 29)" stroke="rgb(240, 240, 240)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 731px; margin-left: 66px;"><div data-drawio-colors="color: rgb(240, 240, 240); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(240, 240, 240); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">iota crate</div></div></div></foreignObject><text x="110" y="735" fill="rgb(240, 240, 240)" font-family=""Helvetica"" font-size="12px" text-anchor="middle">iota crate</text></switch></g></g></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-49"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 120 676 L 120 638.3 Q 120 628.3 122.5 628.3 L 123.75 628.3 Q 125 628.3 125 618.3 L 125 586.92" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 125 581.67 L 128.5 588.67 L 125 586.92 L 121.5 588.67 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="3kIInuhs_YmBb0iZ2eFI-50"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 130 506 L 130 476 Q 130 466 140 466 L 185 466 Q 195 466 195 456 L 195 432.25" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 195 427 L 198.5 434 L 195 432.25 L 191.5 434 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="C7P2nbfdh_euxFz_vEXo-6"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 710 256 L 530.9 256 Q 520.9 256 520.9 266 L 520.9 369.4 Q 520.9 379.4 510.9 379.4 L 338.25 379.39" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 333 379.39 L 340 375.89 L 338.25 379.39 L 340 382.89 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g></g><g data-cell-id="C7P2nbfdh_euxFz_vEXo-11"><g style="filter: drop-shadow(rgba(0, 0, 0, 0.25) 2px 3px 2px);"><path d="M 331.88 218.38 L 511 218.4 Q 521 218.4 521 208.4 L 521 21 Q 521 11 531 11 L 960.9 11 Q 970.9 11 970.91 17.82 L 970.91 24.63" fill="none" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 970.92 29.88 L 967.41 22.89 L 970.91 24.63 L 974.41 22.88 Z" fill="rgb(240, 240, 240)" stroke="rgb(240, 240, 240)" stroke-miterlimit="10" pointer-events="all"/></g></g></g></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file diff --git a/docs/site/static/img/concepts/execution-architecture/iota-architecture.svg b/docs/site/static/img/concepts/execution-architecture/iota-architecture.svg index 90113451977..ba261ecd774 100644 --- a/docs/site/static/img/concepts/execution-architecture/iota-architecture.svg +++ b/docs/site/static/img/concepts/execution-architecture/iota-architecture.svg @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- Do not edit this file with editors other than draw.io --> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1151px" height="711px" viewBox="-0.5 -0.5 1151 711" content="<mxfile host="app.diagrams.net" modified="2024-06-06T13:06:20.290Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15" etag="_bzW2ujPehIvRME25DFx" version="24.4.13" type="device"> <diagram name="Page-1" id="jhOoJUkd9Zucpb-pnEYY"> <mxGraphModel dx="2074" dy="816" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="#ffffff" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="3kIInuhs_YmBb0iZ2eFI-7" value="&lt;b&gt;Execution layer&lt;/b&gt;" style="verticalAlign=top;align=left;shape=cube;size=10;direction=south;fontStyle=0;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="1" vertex="1"> <mxGeometry x="490" y="30" width="450" height="440" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-63" value="" style="rounded=1;whiteSpace=wrap;html=1;hachureGap=4;fontFamily=Helvetica;strokeColor=default;fillColor=default;glass=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry x="10.003376623376589" y="39.550041395623865" width="393.8931818181818" height="227.41573033707866" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-8" value="&lt;b&gt;Adapter&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry width="170" height="190" relative="1" as="geometry"> <mxPoint x="30" y="55" as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-43" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="38.86363636363636" y="304.0449438202247" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-9" value="&lt;b&gt;MoveVM&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-43" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-41" value="move-execution/move-vm-runtime" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-43" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-44" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="296.59090909090907" y="306.51685393258424" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-13" value="&lt;b&gt;Framework&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-44" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-42" value="iota-framework crate" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-44" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-56" value="Init" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=45;entryPerimeter=0;curved=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" source="3kIInuhs_YmBb0iZ2eFI-39" target="3kIInuhs_YmBb0iZ2eFI-9" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-58" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="46.16883116883113" y="88.98824364281488" width="378.4090909090909" height="168.0904080425784" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-40" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-58" vertex="1" connectable="0"> <mxGeometry width="128.57142857142858" height="138.42696629213484" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-10" value="&lt;b&gt;Execution-engine&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-40" vertex="1"> <mxGeometry width="128.57142857142856" height="92.63157894736842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-39" value="...execution/&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 13px;&quot;&gt;iota&lt;/span&gt;-adapter/execution-engine" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-58" vertex="1"> <mxGeometry x="5.849999999999999" y="92.6274157303371" width="109.575" height="45.79955056179776" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-61" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=45;exitDy=100;exitPerimeter=0;entryX=1;entryY=0.206;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;curved=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" source="3kIInuhs_YmBb0iZ2eFI-13" target="3kIInuhs_YmBb0iZ2eFI-8" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-62" value="&lt;h4&gt;&lt;font face=&quot;Helvetica&quot;&gt;native fns etc&lt;/font&gt;&lt;/h4&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-61" vertex="1" connectable="0"> <mxGeometry x="-0.1741" y="-1" relative="1" as="geometry"> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-45" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="276.1363636363636" y="98.87640449438204" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-48" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-45" vertex="1" connectable="0"> <mxGeometry width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-46" value="&lt;b&gt;Object runtime&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-48" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-47" value="...execution/&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 13px;&quot;&gt;iota&lt;/span&gt;-move-natives" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-48" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-64" value="&lt;span style=&quot;caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(251, 251, 251); text-decoration: none; float: none; display: inline !important;&quot;&gt;&lt;b&gt;iota-execution crate&lt;/b&gt;&lt;/span&gt;" style="text;whiteSpace=wrap;html=1;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry x="268.5363636363636" y="49.43820224719101" width="117.47045454545454" height="29.662921348314605" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-15" value="&lt;b&gt;Nodes network(Iota node)&lt;/b&gt;" style="verticalAlign=top;align=left;shape=cube;size=10;direction=south;fontStyle=0;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="1" vertex="1"> <mxGeometry x="-210" y="30" width="380" height="430" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-16" value="&lt;b&gt;Node&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry width="330" height="370" relative="1" as="geometry"> <mxPoint x="20" y="40" as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-17" value="&lt;b&gt;API&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="42.2239247311828" y="92.97297297297297" width="85.80645161290323" height="267.2972972972973" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-18" value="&lt;b&gt;Ledger storage&lt;/b&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="253.33129032258068" y="296.9044851994852" width="73.5483870967742" height="92.97297297297297" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-65" value="&lt;b&gt;Indexer&lt;/b&gt;&lt;div&gt;&lt;b&gt;(read/sync db)&lt;/b&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="153.22580645161293" y="296.9044851994852" width="73.5483870967742" height="92.97297297297297" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-19" value="&lt;b&gt;Consensus engine&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="142.5" y="81.91" width="97.5" height="78.09" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-20" value="&lt;b&gt;Network&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="141.25" y="185.91" width="97.5" height="81.43" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-1" value="&lt;b&gt;Core&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" vertex="1" parent="3kIInuhs_YmBb0iZ2eFI-15"> <mxGeometry x="251.77" y="150" width="75.11" height="60" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-34" value="" style="group;rounded=1;" parent="1" vertex="1" connectable="0"> <mxGeometry x="-150" y="500" width="120" height="74.55" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-31" value="&lt;b&gt;iota-json-rpc&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-34" vertex="1"> <mxGeometry width="120" height="50" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-32" value="&lt;div&gt;iota-json-rpc crate&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="3kIInuhs_YmBb0iZ2eFI-34" vertex="1"> <mxGeometry x="20" y="50.00454545454545" width="80" height="24.545454545454547" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-36" value="" style="group;rounded=1;" parent="1" vertex="1" connectable="0"> <mxGeometry x="-150" y="670" width="100" height="70" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-28" value="&lt;b&gt;iota-cli&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-36" vertex="1"> <mxGeometry width="100" height="40" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-35" value="iota-cli crate" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-36" vertex="1"> <mxGeometry y="40" width="90" height="30" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-49" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=45;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;curved=0;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-28" target="3kIInuhs_YmBb0iZ2eFI-32" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-50" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=55;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-31" target="3kIInuhs_YmBb0iZ2eFI-65" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-6" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;" edge="1" parent="1" source="3kIInuhs_YmBb0iZ2eFI-7" target="3kIInuhs_YmBb0iZ2eFI-18"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-11" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=32.385;exitDy=0;exitPerimeter=0;entryX=0.407;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;" edge="1" parent="1" source="C7P2nbfdh_euxFz_vEXo-1" target="3kIInuhs_YmBb0iZ2eFI-7"> <mxGeometry relative="1" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> </mxfile> " style="background-color: rgb(255, 255, 255);"><defs/><rect fill="#ffffff" width="100%" height="100%" x="0" y="0"/><g><g><path d="M 705 -5 L 1135 -5 L 1145 5 L 1145 445 L 715 445 L 705 435 L 705 -5 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,925,220)" pointer-events="all"/><path d="M 715 445 L 715 5 L 705 -5 M 715 5 L 1145 5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,925,220)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 433px; height: 1px; padding-top: 17px; margin-left: 707px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Execution layer</b></div></div></div></foreignObject><text x="707" y="29" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">Execution layer</text></switch></g></g><g><rect x="710" y="39.55" width="393.89" height="227.42" rx="34.11" ry="34.11" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><path d="M 720 65 L 900 65 L 910 75 L 910 235 L 730 235 L 720 225 L 720 65 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,815,150)" pointer-events="all"/><path d="M 730 235 L 730 75 L 720 65 M 730 75 L 910 75" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,815,150)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 153px; height: 1px; padding-top: 72px; margin-left: 736px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Adapter</b></div></div></div></foreignObject><text x="813" y="84" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Adapter</text></switch></g></g><g/><g><path d="M 750.45 292.46 L 819.55 292.46 L 829.55 302.46 L 829.55 394.73 L 760.45 394.73 L 750.45 384.73 L 750.45 292.46 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,790,343.6)" pointer-events="all"/><path d="M 760.45 394.73 L 760.45 302.46 L 750.45 292.46 M 760.45 302.46 L 829.55 302.46" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,790,343.6)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 321px; margin-left: 745px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>MoveVM</b></div></div></div></foreignObject><text x="788" y="333" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">MoveVM</text></switch></g></g><g><rect x="738.86" y="383.15" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 403px; margin-left: 740px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">move-execution/move-vm-runtime</div></div></div></foreignObject><text x="785" y="407" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">move-execution/...</text></switch></g></g><g/><g><path d="M 1008.18 294.93 L 1077.28 294.93 L 1087.28 304.93 L 1087.28 397.2 L 1018.18 397.2 L 1008.18 387.2 L 1008.18 294.93 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,1047.73,346.07)" pointer-events="all"/><path d="M 1018.18 397.2 L 1018.18 304.93 L 1008.18 294.93 M 1018.18 304.93 L 1087.28 304.93" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,1047.73,346.07)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 324px; margin-left: 1003px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Framework</b></div></div></div></foreignObject><text x="1045" y="336" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Framework</text></switch></g></g><g><rect x="996.59" y="385.62" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 405px; margin-left: 998px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">iota-framework crate</div></div></div></foreignObject><text x="1043" y="409" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota-framework...</text></switch></g></g><g><path d="M 806.81 227.42 L 806.8 255.7 Q 806.8 265.7 801.45 265.7 L 798.77 265.7 Q 796.1 265.7 796.11 275.7 L 796.13 297.68" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 796.14 302.93 L 792.63 295.93 L 796.13 297.68 L 799.63 295.92 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 266px; margin-left: 801px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">Init</div></div></div></foreignObject><text x="801" y="269" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">Init</text></switch></g></g><g/><g/><g><path d="M 764.14 71.02 L 846.77 71.02 L 856.77 81.02 L 856.77 199.59 L 774.14 199.59 L 764.14 189.59 L 764.14 71.02 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,810.45,135.3)" pointer-events="all"/><path d="M 774.14 199.59 L 774.14 81.02 L 764.14 71.02 M 774.14 81.02 L 856.77 81.02" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,810.45,135.3)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 112px; height: 1px; padding-top: 106px; margin-left: 752px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Execution-engine</b></div></div></div></foreignObject><text x="808" y="118" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Execution-engine</text></switch></g></g><g><rect x="752.02" y="181.62" width="109.58" height="45.8" rx="6.87" ry="6.87" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 205px; margin-left: 753px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">...execution/<span style="font-family: "Helvetica Neue"; font-size: 13px;">iota</span>-adapter/execution-engine</div></div></div></foreignObject><text x="807" y="208" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">...execution/iota-...</text></switch></g></g><g><path d="M 998.86 351.52 L 875 351.5 Q 865 351.5 865 341.5 L 864.98 251.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 864.98 246.12 L 868.48 253.12 L 864.98 251.37 L 861.48 253.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 351px; margin-left: 900px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: "Architects Daughter"; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"><h4><font face="Helvetica">native fns etc</font></h4></div></div></div></foreignObject><text x="900" y="354" fill="rgb(0, 0, 0)" font-family="Architects Daughter" font-size="11px" text-anchor="middle">native fns etc</text></switch></g></g><g/><g/><g><path d="M 987.72 87.29 L 1056.82 87.29 L 1066.82 97.29 L 1066.82 189.56 L 997.72 189.56 L 987.72 179.56 L 987.72 87.29 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,1027.27,138.43)" pointer-events="all"/><path d="M 997.72 189.56 L 997.72 97.29 L 987.72 87.29 M 997.72 97.29 L 1066.82 97.29" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,1027.27,138.43)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 116px; margin-left: 982px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Object runtime</b></div></div></div></foreignObject><text x="1025" y="128" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Object runtime</text></switch></g></g><g><rect x="976.14" y="177.98" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 198px; margin-left: 977px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">...execution/<span style="font-family: "Helvetica Neue"; font-size: 13px;">iota</span>-move-natives</div></div></div></foreignObject><text x="1022" y="201" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">...execution/io...</text></switch></g></g><g><rect x="968.54" y="49.44" width="117.47" height="29.66" rx="4.45" ry="4.45" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 115px; height: 1px; padding-top: 56px; margin-left: 971px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: "Architects Daughter"; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(251, 251, 251); text-decoration: none; float: none; display: inline !important;"><b>iota-execution crate</b></span></div></div></div></foreignObject><text x="971" y="68" fill="rgb(0, 0, 0)" font-family="Architects Daughter" font-size="12px">iota-execution crate</text></switch></g></g><g><path d="M -25 25 L 395 25 L 405 35 L 405 405 L -15 405 L -25 395 L -25 25 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,190,215)" pointer-events="all"/><path d="M -15 405 L -15 35 L -25 25 M -15 35 L 405 35" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,190,215)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 363px; height: 1px; padding-top: 17px; margin-left: 7px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Nodes network(Iota node)</b></div></div></div></foreignObject><text x="7" y="29" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">Nodes network(Iota node)</text></switch></g></g><g><path d="M 0 60 L 360 60 L 370 70 L 370 390 L 10 390 L 0 380 L 0 60 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,185,225)" pointer-events="all"/><path d="M 10 390 L 10 70 L 0 60 M 10 70 L 370 70" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,185,225)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 313px; height: 1px; padding-top: 57px; margin-left: 26px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Node</b></div></div></div></foreignObject><text x="183" y="69" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Node</text></switch></g></g><g><path d="M -48.52 183.72 L 208.78 183.72 L 218.78 193.72 L 218.78 269.52 L -38.52 269.52 L -48.52 259.52 L -48.52 183.72 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,85.13,226.62)" pointer-events="all"/><path d="M -38.52 269.52 L -38.52 193.72 L -48.52 183.72 M -38.52 193.72 L 218.78 193.72" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,85.13,226.62)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 69px; height: 1px; padding-top: 110px; margin-left: 48px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>API</b></div></div></div></foreignObject><text x="83" y="122" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">API</text></switch></g></g><g><path d="M 253.33 311.9 C 253.33 303.62 269.8 296.9 290.11 296.9 C 299.86 296.9 309.21 298.48 316.11 301.3 C 323.01 304.11 326.88 307.93 326.88 311.9 L 326.88 374.88 C 326.88 383.16 310.42 389.88 290.11 389.88 C 269.8 389.88 253.33 383.16 253.33 374.88 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 326.88 311.9 C 326.88 320.19 310.42 326.9 290.11 326.9 C 269.8 326.9 253.33 320.19 253.33 311.9" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 72px; height: 1px; padding-top: 356px; margin-left: 254px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Ledger storage</b></div></div></div></foreignObject><text x="290" y="359" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Ledger stora...</text></switch></g></g><g><path d="M 153.23 311.9 C 153.23 303.62 169.69 296.9 190 296.9 C 199.75 296.9 209.11 298.48 216 301.3 C 222.9 304.11 226.77 307.93 226.77 311.9 L 226.77 374.88 C 226.77 383.16 210.31 389.88 190 389.88 C 169.69 389.88 153.23 383.16 153.23 374.88 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 226.77 311.9 C 226.77 320.19 210.31 326.9 190 326.9 C 169.69 326.9 153.23 320.19 153.23 311.9" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 72px; height: 1px; padding-top: 356px; margin-left: 154px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Indexer</b><div><b>(read/sync db)</b></div></div></div></div></foreignObject><text x="190" y="359" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Indexer...</text></switch></g></g><g><path d="M 152.2 72.2 L 220.29 72.2 L 230.29 82.2 L 230.29 169.7 L 162.2 169.7 L 152.2 159.7 L 152.2 72.2 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,191.25,120.95)" pointer-events="all"/><path d="M 162.2 169.7 L 162.2 82.2 L 152.2 72.2 M 162.2 82.2 L 230.29 82.2" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,191.25,120.95)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 81px; height: 1px; padding-top: 99px; margin-left: 149px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Consensus engine</b></div></div></div></foreignObject><text x="189" y="111" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Consensus engi...</text></switch></g></g><g><path d="M 149.29 177.88 L 220.72 177.88 L 230.72 187.88 L 230.72 275.38 L 159.29 275.38 L 149.29 265.38 L 149.29 177.88 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,190,226.63)" pointer-events="all"/><path d="M 159.29 275.38 L 159.29 187.88 L 149.29 177.88 M 159.29 187.88 L 230.72 187.88" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,190,226.63)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 81px; height: 1px; padding-top: 203px; margin-left: 147px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Network</b></div></div></div></foreignObject><text x="188" y="215" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Network</text></switch></g></g><g><path d="M 259.32 142.45 L 309.32 142.45 L 319.32 152.45 L 319.32 217.56 L 269.32 217.56 L 259.32 207.56 L 259.32 142.45 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,289.32,180)" pointer-events="all"/><path d="M 269.32 217.56 L 269.32 152.45 L 259.32 142.45 M 269.32 152.45 L 319.32 152.45" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,289.32,180)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 167px; margin-left: 258px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Core</b></div></div></div></foreignObject><text x="287" y="179" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Core</text></switch></g></g><g/><g><path d="M 95 435 L 135 435 L 145 445 L 145 555 L 105 555 L 95 545 L 95 435 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,120,495)" pointer-events="all"/><path d="M 105 555 L 105 445 L 95 435 M 105 445 L 145 445" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,120,495)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 103px; height: 1px; padding-top: 487px; margin-left: 66px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>iota-json-rpc</b></div></div></div></foreignObject><text x="118" y="499" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota-json-rpc</text></switch></g></g><g><rect x="80" y="520" width="80" height="24.55" rx="3.68" ry="3.68" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 532px; margin-left: 81px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><div>iota-json-rpc crate<br /></div></div></div></div></foreignObject><text x="120" y="536" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota-json-rpc...</text></switch></g></g><g/><g><path d="M 90 610 L 120 610 L 130 620 L 130 710 L 100 710 L 90 700 L 90 610 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,110,660)" pointer-events="all"/><path d="M 100 710 L 100 620 L 90 610 M 100 620 L 130 620" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,110,660)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 83px; height: 1px; padding-top: 657px; margin-left: 66px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>iota-cli</b></div></div></div></foreignObject><text x="108" y="669" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota-cli</text></switch></g></g><g><rect x="60" y="680" width="90" height="30" rx="4.5" ry="4.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 695px; margin-left: 61px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">iota-cli crate</div></div></div></foreignObject><text x="105" y="699" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota-cli crate</text></switch></g></g><g><path d="M 115 640 L 115 602.3 Q 115 592.3 117.5 592.3 L 118.75 592.3 Q 120 592.3 120 582.3 L 120 550.92" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 120 545.67 L 123.5 552.67 L 120 550.92 L 116.5 552.67 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><path d="M 125 470 L 125 440 Q 125 430 135 430 L 180 430 Q 190 430 190 420 L 190 396.25" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 190 391 L 193.5 398 L 190 396.25 L 186.5 398 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><path d="M 700 220 L 523.4 220 Q 513.4 220 513.4 230 L 513.4 333.4 Q 513.4 343.4 503.4 343.4 L 333.25 343.39" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 328 343.39 L 335 339.89 L 333.25 343.39 L 335 346.89 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><path d="M 326.88 182.39 L 503.5 182.4 Q 513.5 182.4 513.5 180.75 L 513.5 179.92 Q 513.5 179.1 523.5 179.1 L 693.63 179.08" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 698.88 179.08 L 691.88 182.58 L 693.63 179.08 L 691.88 175.58 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1151px" height="711px" viewBox="-0.5 -0.5 1151 711" content="<mxfile host="app.diagrams.net" modified="2024-06-06T13:06:20.290Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15" etag="_bzW2ujPehIvRME25DFx" version="24.4.13" type="device"> <diagram name="Page-1" id="jhOoJUkd9Zucpb-pnEYY"> <mxGraphModel dx="2074" dy="816" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" background="#ffffff" math="0" shadow="0"> <root> <mxCell id="0" /> <mxCell id="1" parent="0" /> <mxCell id="3kIInuhs_YmBb0iZ2eFI-7" value="&lt;b&gt;Execution layer&lt;/b&gt;" style="verticalAlign=top;align=left;shape=cube;size=10;direction=south;fontStyle=0;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="1" vertex="1"> <mxGeometry x="490" y="30" width="450" height="440" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-63" value="" style="rounded=1;whiteSpace=wrap;html=1;hachureGap=4;fontFamily=Helvetica;strokeColor=default;fillColor=default;glass=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry x="10.003376623376589" y="39.550041395623865" width="393.8931818181818" height="227.41573033707866" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-8" value="&lt;b&gt;Adapter&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry width="170" height="190" relative="1" as="geometry"> <mxPoint x="30" y="55" as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-43" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="38.86363636363636" y="304.0449438202247" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-9" value="&lt;b&gt;MoveVM&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-43" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-41" value="move-execution/move-vm-runtime" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-43" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-44" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="296.59090909090907" y="306.51685393258424" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-13" value="&lt;b&gt;Framework&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-44" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-42" value="iota-framework crate" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-44" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-56" value="Init" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=45;entryPerimeter=0;curved=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" source="3kIInuhs_YmBb0iZ2eFI-39" target="3kIInuhs_YmBb0iZ2eFI-9" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-58" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="46.16883116883113" y="88.98824364281488" width="378.4090909090909" height="168.0904080425784" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-40" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-58" vertex="1" connectable="0"> <mxGeometry width="128.57142857142858" height="138.42696629213484" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-10" value="&lt;b&gt;Execution-engine&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-40" vertex="1"> <mxGeometry width="128.57142857142856" height="92.63157894736842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-39" value="...execution/&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 13px;&quot;&gt;iota&lt;/span&gt;-adapter/execution-engine" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-58" vertex="1"> <mxGeometry x="5.849999999999999" y="92.6274157303371" width="109.575" height="45.79955056179776" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-61" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=45;exitDy=100;exitPerimeter=0;entryX=1;entryY=0.206;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;curved=0;" parent="3kIInuhs_YmBb0iZ2eFI-7" source="3kIInuhs_YmBb0iZ2eFI-13" target="3kIInuhs_YmBb0iZ2eFI-8" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-62" value="&lt;h4&gt;&lt;font face=&quot;Helvetica&quot;&gt;native fns etc&lt;/font&gt;&lt;/h4&gt;" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];sketch=1;hachureGap=4;jiggle=2;curveFitting=1;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-61" vertex="1" connectable="0"> <mxGeometry x="-0.1741" y="-1" relative="1" as="geometry"> <mxPoint as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-45" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1" connectable="0"> <mxGeometry x="276.1363636363636" y="98.87640449438204" width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-48" value="" style="group;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-45" vertex="1" connectable="0"> <mxGeometry width="102.27272727272727" height="118.65168539325842" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-46" value="&lt;b&gt;Object runtime&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-48" vertex="1"> <mxGeometry width="102.27272727272727" height="79.10112359550561" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-47" value="...execution/&lt;span style=&quot;font-family: &amp;quot;Helvetica Neue&amp;quot;; font-size: 13px;&quot;&gt;iota&lt;/span&gt;-move-natives" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-48" vertex="1"> <mxGeometry y="79.10112359550561" width="92.04545454545455" height="39.550561797752806" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-64" value="&lt;span style=&quot;caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(251, 251, 251); text-decoration: none; float: none; display: inline !important;&quot;&gt;&lt;b&gt;iota-execution crate&lt;/b&gt;&lt;/span&gt;" style="text;whiteSpace=wrap;html=1;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-7" vertex="1"> <mxGeometry x="268.5363636363636" y="49.43820224719101" width="117.47045454545454" height="29.662921348314605" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-15" value="&lt;b&gt;Nodes network(Iota node)&lt;/b&gt;" style="verticalAlign=top;align=left;shape=cube;size=10;direction=south;fontStyle=0;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="1" vertex="1"> <mxGeometry x="-210" y="30" width="380" height="430" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-16" value="&lt;b&gt;Node&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry width="330" height="370" relative="1" as="geometry"> <mxPoint x="20" y="40" as="offset" /> </mxGeometry> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-17" value="&lt;b&gt;API&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="42.2239247311828" y="92.97297297297297" width="85.80645161290323" height="267.2972972972973" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-18" value="&lt;b&gt;Ledger storage&lt;/b&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="253.33129032258068" y="296.9044851994852" width="73.5483870967742" height="92.97297297297297" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-65" value="&lt;b&gt;Indexer&lt;/b&gt;&lt;div&gt;&lt;b&gt;(read/sync db)&lt;/b&gt;&lt;/div&gt;" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="153.22580645161293" y="296.9044851994852" width="73.5483870967742" height="92.97297297297297" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-19" value="&lt;b&gt;Consensus engine&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="142.5" y="81.91" width="97.5" height="78.09" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-20" value="&lt;b&gt;Network&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-15" vertex="1"> <mxGeometry x="141.25" y="185.91" width="97.5" height="81.43" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-1" value="&lt;b&gt;Core&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" vertex="1" parent="3kIInuhs_YmBb0iZ2eFI-15"> <mxGeometry x="251.77" y="150" width="75.11" height="60" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-34" value="" style="group;rounded=1;" parent="1" vertex="1" connectable="0"> <mxGeometry x="-150" y="500" width="120" height="74.55" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-31" value="&lt;b&gt;iota-json-rpc&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-34" vertex="1"> <mxGeometry width="120" height="50" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-32" value="&lt;div&gt;iota-json-rpc crate&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;" parent="3kIInuhs_YmBb0iZ2eFI-34" vertex="1"> <mxGeometry x="20" y="50.00454545454545" width="80" height="24.545454545454547" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-36" value="" style="group;rounded=1;" parent="1" vertex="1" connectable="0"> <mxGeometry x="-150" y="670" width="100" height="70" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-28" value="&lt;b&gt;iota-cli&lt;/b&gt;" style="verticalAlign=top;align=center;shape=cube;size=10;direction=south;html=1;boundedLbl=1;spacingLeft=5;whiteSpace=wrap;rounded=1;" parent="3kIInuhs_YmBb0iZ2eFI-36" vertex="1"> <mxGeometry width="100" height="40" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-35" value="iota crate" style="rounded=1;whiteSpace=wrap;html=1;" parent="3kIInuhs_YmBb0iZ2eFI-36" vertex="1"> <mxGeometry y="40" width="90" height="30" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-49" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=45;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;curved=0;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-28" target="3kIInuhs_YmBb0iZ2eFI-32" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="3kIInuhs_YmBb0iZ2eFI-50" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=55;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="3kIInuhs_YmBb0iZ2eFI-31" target="3kIInuhs_YmBb0iZ2eFI-65" edge="1"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-6" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;" edge="1" parent="1" source="3kIInuhs_YmBb0iZ2eFI-7" target="3kIInuhs_YmBb0iZ2eFI-18"> <mxGeometry relative="1" as="geometry" /> </mxCell> <mxCell id="C7P2nbfdh_euxFz_vEXo-11" style="edgeStyle=orthogonalEdgeStyle;rounded=1;hachureGap=4;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=32.385;exitDy=0;exitPerimeter=0;entryX=0.407;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;fontFamily=Architects Daughter;fontSource=https%3A%2F%2Ffonts.googleapis.com%2Fcss%3Ffamily%3DArchitects%2BDaughter;" edge="1" parent="1" source="C7P2nbfdh_euxFz_vEXo-1" target="3kIInuhs_YmBb0iZ2eFI-7"> <mxGeometry relative="1" as="geometry" /> </mxCell> </root> </mxGraphModel> </diagram> </mxfile> " style="background-color: rgb(255, 255, 255);"><defs/><rect fill="#ffffff" width="100%" height="100%" x="0" y="0"/><g><g><path d="M 705 -5 L 1135 -5 L 1145 5 L 1145 445 L 715 445 L 705 435 L 705 -5 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,925,220)" pointer-events="all"/><path d="M 715 445 L 715 5 L 705 -5 M 715 5 L 1145 5" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,925,220)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 433px; height: 1px; padding-top: 17px; margin-left: 707px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Execution layer</b></div></div></div></foreignObject><text x="707" y="29" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">Execution layer</text></switch></g></g><g><rect x="710" y="39.55" width="393.89" height="227.42" rx="34.11" ry="34.11" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><path d="M 720 65 L 900 65 L 910 75 L 910 235 L 730 235 L 720 225 L 720 65 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,815,150)" pointer-events="all"/><path d="M 730 235 L 730 75 L 720 65 M 730 75 L 910 75" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,815,150)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 153px; height: 1px; padding-top: 72px; margin-left: 736px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Adapter</b></div></div></div></foreignObject><text x="813" y="84" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Adapter</text></switch></g></g><g/><g><path d="M 750.45 292.46 L 819.55 292.46 L 829.55 302.46 L 829.55 394.73 L 760.45 394.73 L 750.45 384.73 L 750.45 292.46 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,790,343.6)" pointer-events="all"/><path d="M 760.45 394.73 L 760.45 302.46 L 750.45 292.46 M 760.45 302.46 L 829.55 302.46" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,790,343.6)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 321px; margin-left: 745px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>MoveVM</b></div></div></div></foreignObject><text x="788" y="333" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">MoveVM</text></switch></g></g><g><rect x="738.86" y="383.15" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 403px; margin-left: 740px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">move-execution/move-vm-runtime</div></div></div></foreignObject><text x="785" y="407" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">move-execution/...</text></switch></g></g><g/><g><path d="M 1008.18 294.93 L 1077.28 294.93 L 1087.28 304.93 L 1087.28 397.2 L 1018.18 397.2 L 1008.18 387.2 L 1008.18 294.93 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,1047.73,346.07)" pointer-events="all"/><path d="M 1018.18 397.2 L 1018.18 304.93 L 1008.18 294.93 M 1018.18 304.93 L 1087.28 304.93" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,1047.73,346.07)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 324px; margin-left: 1003px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Framework</b></div></div></div></foreignObject><text x="1045" y="336" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Framework</text></switch></g></g><g><rect x="996.59" y="385.62" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 405px; margin-left: 998px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">iota-framework crate</div></div></div></foreignObject><text x="1043" y="409" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota-framework...</text></switch></g></g><g><path d="M 806.81 227.42 L 806.8 255.7 Q 806.8 265.7 801.45 265.7 L 798.77 265.7 Q 796.1 265.7 796.11 275.7 L 796.13 297.68" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 796.14 302.93 L 792.63 295.93 L 796.13 297.68 L 799.63 295.92 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 266px; margin-left: 801px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;">Init</div></div></div></foreignObject><text x="801" y="269" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="11px" text-anchor="middle">Init</text></switch></g></g><g/><g/><g><path d="M 764.14 71.02 L 846.77 71.02 L 856.77 81.02 L 856.77 199.59 L 774.14 199.59 L 764.14 189.59 L 764.14 71.02 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,810.45,135.3)" pointer-events="all"/><path d="M 774.14 199.59 L 774.14 81.02 L 764.14 71.02 M 774.14 81.02 L 856.77 81.02" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,810.45,135.3)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 112px; height: 1px; padding-top: 106px; margin-left: 752px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Execution-engine</b></div></div></div></foreignObject><text x="808" y="118" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Execution-engine</text></switch></g></g><g><rect x="752.02" y="181.62" width="109.58" height="45.8" rx="6.87" ry="6.87" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 205px; margin-left: 753px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">...execution/<span style="font-family: "Helvetica Neue"; font-size: 13px;">iota</span>-adapter/execution-engine</div></div></div></foreignObject><text x="807" y="208" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">...execution/iota-...</text></switch></g></g><g><path d="M 998.86 351.52 L 875 351.5 Q 865 351.5 865 341.5 L 864.98 251.37" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 864.98 246.12 L 868.48 253.12 L 864.98 251.37 L 861.48 253.12 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 351px; margin-left: 900px;"><div data-drawio-colors="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 11px; font-family: "Architects Daughter"; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; background-color: rgb(255, 255, 255); white-space: nowrap;"><h4><font face="Helvetica">native fns etc</font></h4></div></div></div></foreignObject><text x="900" y="354" fill="rgb(0, 0, 0)" font-family="Architects Daughter" font-size="11px" text-anchor="middle">native fns etc</text></switch></g></g><g/><g/><g><path d="M 987.72 87.29 L 1056.82 87.29 L 1066.82 97.29 L 1066.82 189.56 L 997.72 189.56 L 987.72 179.56 L 987.72 87.29 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,1027.27,138.43)" pointer-events="all"/><path d="M 997.72 189.56 L 997.72 97.29 L 987.72 87.29 M 997.72 97.29 L 1066.82 97.29" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,1027.27,138.43)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 85px; height: 1px; padding-top: 116px; margin-left: 982px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Object runtime</b></div></div></div></foreignObject><text x="1025" y="128" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Object runtime</text></switch></g></g><g><rect x="976.14" y="177.98" width="92.05" height="39.55" rx="5.93" ry="5.93" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 90px; height: 1px; padding-top: 198px; margin-left: 977px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">...execution/<span style="font-family: "Helvetica Neue"; font-size: 13px;">iota</span>-move-natives</div></div></div></foreignObject><text x="1022" y="201" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">...execution/io...</text></switch></g></g><g><rect x="968.54" y="49.44" width="117.47" height="29.66" rx="4.45" ry="4.45" fill="none" stroke="none" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 115px; height: 1px; padding-top: 56px; margin-left: 971px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: "Architects Daughter"; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><span style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; letter-spacing: normal; text-align: center; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(251, 251, 251); text-decoration: none; float: none; display: inline !important;"><b>iota-execution crate</b></span></div></div></div></foreignObject><text x="971" y="68" fill="rgb(0, 0, 0)" font-family="Architects Daughter" font-size="12px">iota-execution crate</text></switch></g></g><g><path d="M -25 25 L 395 25 L 405 35 L 405 405 L -15 405 L -25 395 L -25 25 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,190,215)" pointer-events="all"/><path d="M -15 405 L -15 35 L -25 25 M -15 35 L 405 35" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,190,215)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe flex-start; width: 363px; height: 1px; padding-top: 17px; margin-left: 7px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: left;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Nodes network(Iota node)</b></div></div></div></foreignObject><text x="7" y="29" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px">Nodes network(Iota node)</text></switch></g></g><g><path d="M 0 60 L 360 60 L 370 70 L 370 390 L 10 390 L 0 380 L 0 60 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,185,225)" pointer-events="all"/><path d="M 10 390 L 10 70 L 0 60 M 10 70 L 370 70" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,185,225)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 313px; height: 1px; padding-top: 57px; margin-left: 26px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Node</b></div></div></div></foreignObject><text x="183" y="69" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Node</text></switch></g></g><g><path d="M -48.52 183.72 L 208.78 183.72 L 218.78 193.72 L 218.78 269.52 L -38.52 269.52 L -48.52 259.52 L -48.52 183.72 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,85.13,226.62)" pointer-events="all"/><path d="M -38.52 269.52 L -38.52 193.72 L -48.52 183.72 M -38.52 193.72 L 218.78 193.72" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,85.13,226.62)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 69px; height: 1px; padding-top: 110px; margin-left: 48px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>API</b></div></div></div></foreignObject><text x="83" y="122" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">API</text></switch></g></g><g><path d="M 253.33 311.9 C 253.33 303.62 269.8 296.9 290.11 296.9 C 299.86 296.9 309.21 298.48 316.11 301.3 C 323.01 304.11 326.88 307.93 326.88 311.9 L 326.88 374.88 C 326.88 383.16 310.42 389.88 290.11 389.88 C 269.8 389.88 253.33 383.16 253.33 374.88 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 326.88 311.9 C 326.88 320.19 310.42 326.9 290.11 326.9 C 269.8 326.9 253.33 320.19 253.33 311.9" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 72px; height: 1px; padding-top: 356px; margin-left: 254px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Ledger storage</b></div></div></div></foreignObject><text x="290" y="359" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Ledger stora...</text></switch></g></g><g><path d="M 153.23 311.9 C 153.23 303.62 169.69 296.9 190 296.9 C 199.75 296.9 209.11 298.48 216 301.3 C 222.9 304.11 226.77 307.93 226.77 311.9 L 226.77 374.88 C 226.77 383.16 210.31 389.88 190 389.88 C 169.69 389.88 153.23 383.16 153.23 374.88 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/><path d="M 226.77 311.9 C 226.77 320.19 210.31 326.9 190 326.9 C 169.69 326.9 153.23 320.19 153.23 311.9" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 72px; height: 1px; padding-top: 356px; margin-left: 154px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Indexer</b><div><b>(read/sync db)</b></div></div></div></div></foreignObject><text x="190" y="359" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Indexer...</text></switch></g></g><g><path d="M 152.2 72.2 L 220.29 72.2 L 230.29 82.2 L 230.29 169.7 L 162.2 169.7 L 152.2 159.7 L 152.2 72.2 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,191.25,120.95)" pointer-events="all"/><path d="M 162.2 169.7 L 162.2 82.2 L 152.2 72.2 M 162.2 82.2 L 230.29 82.2" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,191.25,120.95)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 81px; height: 1px; padding-top: 99px; margin-left: 149px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Consensus engine</b></div></div></div></foreignObject><text x="189" y="111" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Consensus engi...</text></switch></g></g><g><path d="M 149.29 177.88 L 220.72 177.88 L 230.72 187.88 L 230.72 275.38 L 159.29 275.38 L 149.29 265.38 L 149.29 177.88 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,190,226.63)" pointer-events="all"/><path d="M 159.29 275.38 L 159.29 187.88 L 149.29 177.88 M 159.29 187.88 L 230.72 187.88" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,190,226.63)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 81px; height: 1px; padding-top: 203px; margin-left: 147px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Network</b></div></div></div></foreignObject><text x="188" y="215" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Network</text></switch></g></g><g><path d="M 259.32 142.45 L 309.32 142.45 L 319.32 152.45 L 319.32 217.56 L 269.32 217.56 L 259.32 207.56 L 259.32 142.45 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,289.32,180)" pointer-events="all"/><path d="M 269.32 217.56 L 269.32 152.45 L 259.32 142.45 M 269.32 152.45 L 319.32 152.45" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,289.32,180)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 58px; height: 1px; padding-top: 167px; margin-left: 258px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>Core</b></div></div></div></foreignObject><text x="287" y="179" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">Core</text></switch></g></g><g/><g><path d="M 95 435 L 135 435 L 145 445 L 145 555 L 105 555 L 95 545 L 95 435 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,120,495)" pointer-events="all"/><path d="M 105 555 L 105 445 L 95 435 M 105 445 L 145 445" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,120,495)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 103px; height: 1px; padding-top: 487px; margin-left: 66px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>iota-json-rpc</b></div></div></div></foreignObject><text x="118" y="499" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota-json-rpc</text></switch></g></g><g><rect x="80" y="520" width="80" height="24.55" rx="3.68" ry="3.68" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 532px; margin-left: 81px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><div>iota-json-rpc crate<br /></div></div></div></div></foreignObject><text x="120" y="536" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota-json-rpc...</text></switch></g></g><g/><g><path d="M 90 610 L 120 610 L 130 620 L 130 710 L 100 710 L 90 700 L 90 610 Z" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,110,660)" pointer-events="all"/><path d="M 100 710 L 100 620 L 90 610 M 100 620 L 130 620" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" transform="rotate(90,110,660)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 83px; height: 1px; padding-top: 657px; margin-left: 66px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;"><b>iota-cli</b></div></div></div></foreignObject><text x="108" y="669" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota-cli</text></switch></g></g><g><rect x="60" y="680" width="90" height="30" rx="4.5" ry="4.5" fill="rgb(255, 255, 255)" stroke="rgb(0, 0, 0)" pointer-events="all"/></g><g><g transform="translate(-0.5 -0.5)"><switch><foreignObject pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility" style="overflow: visible; text-align: left;"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 695px; margin-left: 61px;"><div data-drawio-colors="color: rgb(0, 0, 0); " style="box-sizing: border-box; font-size: 0px; text-align: center;"><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">iota crate</div></div></div></foreignObject><text x="105" y="699" fill="rgb(0, 0, 0)" font-family="Helvetica" font-size="12px" text-anchor="middle">iota crate</text></switch></g></g><g><path d="M 115 640 L 115 602.3 Q 115 592.3 117.5 592.3 L 118.75 592.3 Q 120 592.3 120 582.3 L 120 550.92" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 120 545.67 L 123.5 552.67 L 120 550.92 L 116.5 552.67 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><path d="M 125 470 L 125 440 Q 125 430 135 430 L 180 430 Q 190 430 190 420 L 190 396.25" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 190 391 L 193.5 398 L 190 396.25 L 186.5 398 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><path d="M 700 220 L 523.4 220 Q 513.4 220 513.4 230 L 513.4 333.4 Q 513.4 343.4 503.4 343.4 L 333.25 343.39" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 328 343.39 L 335 339.89 L 333.25 343.39 L 335 346.89 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g><g><path d="M 326.88 182.39 L 503.5 182.4 Q 513.5 182.4 513.5 180.75 L 513.5 179.92 Q 513.5 179.1 523.5 179.1 L 693.63 179.08" fill="none" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 698.88 179.08 L 691.88 182.58 L 693.63 179.08 L 691.88 175.58 Z" fill="rgb(0, 0, 0)" stroke="rgb(0, 0, 0)" stroke-miterlimit="10" pointer-events="all"/></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://www.drawio.com/doc/faq/svg-export-text-problems" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Text is not SVG - cannot display</text></a></switch></svg> \ No newline at end of file diff --git a/docs/site/static/json/developer/getting-started/connect.json b/docs/site/static/json/developer/getting-started/connect.json index 9f62706071a..7e155759c20 100644 --- a/docs/site/static/json/developer/getting-started/connect.json +++ b/docs/site/static/json/developer/getting-started/connect.json @@ -11,7 +11,7 @@ { "questionText": "When first running the 'iota client' command, what happens if you press Enter without specifying a node URL?", "answerOptions": [ - { "answerText": "It connects to the Devnet", "isCorrect": true }, + { "answerText": "It connects to the Testnet", "isCorrect": true }, { "answerText": "It exits the program", "isCorrect": false }, { "answerText": "It connects to the Mainnet", "isCorrect": false }, { "answerText": "It shows an error message", "isCorrect": false } diff --git a/docs/site/static/json/developer/getting-started/create-a-package.json b/docs/site/static/json/developer/getting-started/create-a-package.json index d2411c38815..23a5799d24d 100644 --- a/docs/site/static/json/developer/getting-started/create-a-package.json +++ b/docs/site/static/json/developer/getting-started/create-a-package.json @@ -1,29 +1,38 @@ [ { - "questionText": "What is the purpose of the `key` ability in a struct declaration in Move?", + "questionText": "What is the command to create a new IOTA Move package called 'my_first_package'?", "answerOptions": [ - { "answerText": "It allows a struct to be stored and transferred.", "isCorrect": true }, - { "answerText": "It allows a struct to be copied.", "isCorrect": false }, - { "answerText": "It allows a struct to be dropped or discarded.", "isCorrect": false }, - { "answerText": "It allows a struct to be stored within structs with the `key` ability.", "isCorrect": false } + { "answerText": "iota move new my_first_package", "isCorrect": true }, + { "answerText": "iota create package my_first_package", "isCorrect": false }, + { "answerText": "iota new package my_first_package", "isCorrect": false }, + { "answerText": "iota init my_first_package", "isCorrect": false } ] }, { - "questionText": "Which ability allows a struct to be discarded in Move?", + "questionText": "What is the purpose of the Move.toml file in an IOTA Move package?", "answerOptions": [ - { "answerText": "`copy`", "isCorrect": false }, - { "answerText": "`drop`", "isCorrect": true }, - { "answerText": "`key`", "isCorrect": false }, - { "answerText": "`store`", "isCorrect": false } + { "answerText": "It is the package's manifest that describes the package and its dependencies.", "isCorrect": true }, + { "answerText": "It contains the source code of the modules.", "isCorrect": false }, + { "answerText": "It stores compiled bytecode.", "isCorrect": false }, + { "answerText": "It is used to manage version control.", "isCorrect": false } ] }, { - "questionText": "How do you denote a comment in a `.move` file?", + "questionText": "In .toml files, which character is used to denote a comment?", "answerOptions": [ - { "answerText": "Using double slashes `//`", "isCorrect": true }, - { "answerText": "Using `/* ... */`", "isCorrect": false }, - { "answerText": "Using `#`", "isCorrect": false }, - { "answerText": "Using `--`", "isCorrect": false } + { "answerText": "Hash mark (#)", "isCorrect": true }, + { "answerText": "Double slash (//)", "isCorrect": false }, + { "answerText": "Semicolon (;)", "isCorrect": false }, + { "answerText": "Percent sign (%)", "isCorrect": false } + ] + }, + { + "questionText": "How can you resolve version conflicts in dependencies in the [dependencies] section?", + "answerOptions": [ + { "answerText": "By adding the 'override' field to the dependency", "isCorrect": true }, + { "answerText": "By removing the conflicting dependency", "isCorrect": false }, + { "answerText": "By renaming the dependency", "isCorrect": false }, + { "answerText": "By using a different package manager", "isCorrect": false } ] } ] diff --git a/docs/site/static/json/developer/getting-started/local-network.json b/docs/site/static/json/developer/getting-started/local-network.json index 23a5799d24d..4396fab85bb 100644 --- a/docs/site/static/json/developer/getting-started/local-network.json +++ b/docs/site/static/json/developer/getting-started/local-network.json @@ -1,38 +1,86 @@ [ - { - "questionText": "What is the command to create a new IOTA Move package called 'my_first_package'?", - "answerOptions": [ - { "answerText": "iota move new my_first_package", "isCorrect": true }, - { "answerText": "iota create package my_first_package", "isCorrect": false }, - { "answerText": "iota new package my_first_package", "isCorrect": false }, - { "answerText": "iota init my_first_package", "isCorrect": false } - ] - }, - { - "questionText": "What is the purpose of the Move.toml file in an IOTA Move package?", - "answerOptions": [ - { "answerText": "It is the package's manifest that describes the package and its dependencies.", "isCorrect": true }, - { "answerText": "It contains the source code of the modules.", "isCorrect": false }, - { "answerText": "It stores compiled bytecode.", "isCorrect": false }, - { "answerText": "It is used to manage version control.", "isCorrect": false } - ] - }, - { - "questionText": "In .toml files, which character is used to denote a comment?", - "answerOptions": [ - { "answerText": "Hash mark (#)", "isCorrect": true }, - { "answerText": "Double slash (//)", "isCorrect": false }, - { "answerText": "Semicolon (;)", "isCorrect": false }, - { "answerText": "Percent sign (%)", "isCorrect": false } - ] - }, - { - "questionText": "How can you resolve version conflicts in dependencies in the [dependencies] section?", - "answerOptions": [ - { "answerText": "By adding the 'override' field to the dependency", "isCorrect": true }, - { "answerText": "By removing the conflicting dependency", "isCorrect": false }, - { "answerText": "By renaming the dependency", "isCorrect": false }, - { "answerText": "By using a different package manager", "isCorrect": false } - ] - } -] + { + "questionText": "What command is used to start a local IOTA network with a test token faucet?", + "answerOptions": [ + { + "answerText": "RUST_LOG=\"off,iota_node=info\" cargo run --bin iota iota", + "isCorrect": false + }, + { + "answerText": "RUST_LOG=\"off,iota_node=info\" cargo run --bin iota start --force-regenesis --with-faucet", + "isCorrect": true + }, + { + "answerText": "RUST_LOG=\"off,iota_node=info\" cargo run --bin iota client", + "isCorrect": false + }, + { + "answerText": "cargo run --bin iota stop", + "isCorrect": false + } + ] + }, + { + "questionText": "Which flag should be used to persist data on the local network instead of using --force-regenesis?", + "answerOptions": [ + { + "answerText": "--config-dir", + "isCorrect": true + }, + { + "answerText": "--persist-data", + "isCorrect": false + }, + { + "answerText": "--save-state", + "isCorrect": false + }, + { + "answerText": "--data-dir", + "isCorrect": false + } + ] + }, + { + "questionText": "How can you retrieve the total transaction count from your local network using cURL?", + "answerOptions": [ + { + "answerText": "curl --location --request GET 'http://127.0.0.1:9000' --header 'Content-Type: application/json' --data-raw '{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"iota_getTotalTransactionBlocks\", \"params\": []}'", + "isCorrect": false + }, + { + "answerText": "curl --location --request POST 'http://127.0.0.1:9000' --header 'Content-Type: application/json' --data-raw '{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"iota_getTotalTransactionBlocks\", \"params\": []}'", + "isCorrect": true + }, + { + "answerText": "curl --location --request POST 'http://127.0.0.1:9000' --header 'Content-Type: application/json' --data-raw '{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"iota_getTransactionCount\", \"params\": []}'", + "isCorrect": false + }, + { + "answerText": "curl --location --request GET 'http://127.0.0.1:9000' --header 'Content-Type: application/json' --data-raw '{\"jsonrpc\": \"2.0\", \"id\": 1, \"method\": \"iota_getTransactionCount\", \"params\": []}'", + "isCorrect": false + } + ] + }, + { + "questionText": "What command is used to create a new environment for the IOTA Client CLI with an alias local and RPC URL http://127.0.0.1:9000?", + "answerOptions": [ + { + "answerText": "iota client new-env --alias local --rpc http://127.0.0.1:9000", + "isCorrect": true + }, + { + "answerText": "iota client create-env --alias local --rpc http://127.0.0.1:9000", + "isCorrect": false + }, + { + "answerText": "iota client setup-env --alias local --rpc http://127.0.0.1:9000", + "isCorrect": false + }, + { + "answerText": "iota client init-env --alias local --rpc http://127.0.0.1:9000", + "isCorrect": false + } + ] + } +] \ No newline at end of file From 857d515b5c8fc2a9c46a799632fb1094e03567ea Mon Sep 17 00:00:00 2001 From: Lucas Tortora <85233773+lucas-tortora@users.noreply.github.com> Date: Fri, 13 Dec 2024 12:44:03 -0300 Subject: [PATCH 25/28] fix(devx): add / before references urls (#4466) --- docs/content/references/references.mdx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/content/references/references.mdx b/docs/content/references/references.mdx index 27a91e3f343..9af3db0656b 100644 --- a/docs/content/references/references.mdx +++ b/docs/content/references/references.mdx @@ -11,7 +11,7 @@ Reference the IOTA framework and IOTA RPC documentation for details of the code <Cards> -<Card title="JSON-RPC" href="references/iota-api"> +<Card title="JSON-RPC" href="/references/iota-api"> A public service that enables interacting with the IOTA network. </Card> </Cards> @@ -21,7 +21,7 @@ A public service that enables interacting with the IOTA network. Move powers smart contract logic for the IOTA blockchain. Use these resources to learn Move or refresh your memory. <Cards> -<Card title="IOTA framework" href="references/framework"/> +<Card title="IOTA framework" href="/references/framework"/> <Card title="Move language" href="https://github.com/move-language/move/blob/main/language/documentation/book/src/introduction.md"> Documentation for the Move programming language on GitHub. </Card> @@ -32,13 +32,13 @@ Documentation for the Move programming language on GitHub. Interact directly with IOTA networks and its features using the IOTA command line interface (CLI). The CLI is divided into separate base commands that target a specific set of features. <Cards> -<Card title="IOTA Client CLI" href="references/cli/client"> +<Card title="IOTA Client CLI" href="/references/cli/client"> Create a client on a IOTA network to generate addresses, access networks, and more with the IOTA Client CLI. </Card> -<Card title="IOTA Client PTB CLI" href="references/cli/ptb"> +<Card title="IOTA Client PTB CLI" href="/references/cli/ptb"> Build, preview, and execute programmable transaction blocks directly from your terminal with the IOTA Client PTB CLI. </Card> -<Card title="IOTA Move CLI" href="references/cli/move"> +<Card title="IOTA Move CLI" href="/references/cli/move"> Access IOTA Move functions on chain using the IOTA Move CLI. </Card> </Cards> @@ -48,8 +48,8 @@ Access IOTA Move functions on chain using the IOTA Move CLI. Official software development kits (SDKs) available for IOTA include the TypeScript SDK and Rust SDK. <Cards> -<Card title="IOTA TypeScript SDK" href="references/ts-sdk/typescript"> +<Card title="IOTA TypeScript SDK" href="/references/ts-sdk/typescript"> The IOTA TypeScript SDK has its own microsite. Click this box to go there. </Card> -<Card title="IOTA Rust SDK" href="references/rust-sdk"/> +<Card title="IOTA Rust SDK" href="/references/rust-sdk"/> </Cards> From 599ad39fd55c5dd3d273e7189a19ca1e042b560b Mon Sep 17 00:00:00 2001 From: Konstantinos Demartinos <konstantinos.demartinos@iota.org> Date: Fri, 13 Dec 2024 18:00:49 +0200 Subject: [PATCH 26/28] fix(ci): iota-rosetta validation (#4496) * refactor(ci): skip on condition genesis creation for rosetta setup Since there is no cleanup in the setup and we use a self-hosted runner, the genesis persists between runs. * fix(iota-rosetta): disable historical balance checks We don't support account-balances lookups at specific heights (at least in a trivial matter). So the following applies ``` $ ./bin/rosetta-cli check:data --help By default, account balances are looked up at specific heights (instead of only at the current block). If your node does not support this functionality set historical balance disabled to true. This will make reconciliation much less efficient but it will still work. ``` * fixup! refactor(ci): skip on condition genesis creation for rosetta setup * fixup! fixup! refactor(ci): skip on condition genesis creation for rosetta setup --- .github/scripts/rosetta/setup.sh | 9 ++++----- crates/iota-rosetta/resources/rosetta_cli.json | 4 ++-- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/scripts/rosetta/setup.sh b/.github/scripts/rosetta/setup.sh index 308006ca289..b85acf125eb 100755 --- a/.github/scripts/rosetta/setup.sh +++ b/.github/scripts/rosetta/setup.sh @@ -7,12 +7,11 @@ echo "Install binaries" cargo install --locked --bin iota --path crates/iota cargo install --locked --bin iota-rosetta --path crates/iota-rosetta -echo "create dedicated config dir for IOTA genesis" -CONFIG_DIR="~/.iota/rosetta_config" -mkdir -p $CONFIG_DIR - echo "run IOTA genesis" -iota genesis -f --working-dir $CONFIG_DIR +CONFIG_DIR=~/.iota/iota_config +if ! [ -d "$CONFIG_DIR" ]; then + iota genesis +fi echo "generate rosetta configuration" iota-rosetta generate-rosetta-cli-config --online-url http://127.0.0.1:9002 --offline-url http://127.0.0.1:9003 diff --git a/crates/iota-rosetta/resources/rosetta_cli.json b/crates/iota-rosetta/resources/rosetta_cli.json index 142f39a68e9..9c65a1d32d3 100644 --- a/crates/iota-rosetta/resources/rosetta_cli.json +++ b/crates/iota-rosetta/resources/rosetta_cli.json @@ -34,7 +34,7 @@ "log_balance_changes": false, "log_reconciliations": false, "ignore_reconciliation_error": false, - "historical_balance_disabled": false, + "historical_balance_disabled": true, "exempt_accounts": "", "bootstrap_balances": "", "interesting_accounts": "", @@ -55,4 +55,4 @@ } }, "perf": null -} \ No newline at end of file +} From ce3b7f0d4201416135c318bfe3b8764510504466 Mon Sep 17 00:00:00 2001 From: DaughterOfMars <chloedaughterofmars@gmail.com> Date: Mon, 16 Dec 2024 03:47:58 -0500 Subject: [PATCH 27/28] chore(lints): Use expect over allow (#4402) * chore(clippy): Use expect over allow * add comment * fix release warning * revert type complexity allow * review * revert trait config * another revert --------- Co-authored-by: Thibault Martinez <thibault@iota.org> --- consensus/core/src/authority_node.rs | 6 +- consensus/core/src/base_committer.rs | 12 +-- consensus/core/src/block_verifier.rs | 3 +- consensus/core/src/commit.rs | 1 - consensus/core/src/core.rs | 2 +- consensus/core/src/leader_schedule.rs | 2 +- consensus/core/src/leader_scoring_strategy.rs | 2 +- consensus/core/src/network/metrics_layer.rs | 2 +- consensus/core/src/stake_aggregator.rs | 3 +- consensus/core/src/storage/mem_store.rs | 3 - consensus/core/src/storage/mod.rs | 6 +- consensus/core/src/storage/rocksdb_store.rs | 8 +- consensus/core/src/synchronizer.rs | 13 +-- consensus/core/src/test_dag_builder.rs | 21 ++-- consensus/core/src/transaction.rs | 3 +- consensus/core/src/universal_committer.rs | 2 +- .../src/analytics_processor.rs | 4 +- crates/iota-archival/src/lib.rs | 2 +- crates/iota-aws-orchestrator/src/benchmark.rs | 1 - crates/iota-aws-orchestrator/src/monitor.rs | 3 +- crates/iota-benchmark/src/drivers/mod.rs | 1 - crates/iota-benchmark/src/lib.rs | 2 +- crates/iota-bridge/src/action_executor.rs | 97 ++++++++----------- .../iota-bridge/src/e2e_tests/test_utils.rs | 1 - crates/iota-bridge/src/eth_syncer.rs | 1 - crates/iota-bridge/src/iota_mock_client.rs | 2 +- crates/iota-bridge/src/monitor.rs | 2 +- crates/iota-bridge/src/orchestrator.rs | 2 +- crates/iota-bridge/src/server/mock_handler.rs | 2 +- crates/iota-cluster-test/src/lib.rs | 1 - .../iota-common/src/sync/async_once_cell.rs | 2 +- crates/iota-common/src/sync/notify_once.rs | 2 +- crates/iota-config/src/genesis.rs | 2 +- crates/iota-core/src/authority.rs | 7 +- .../authority/authority_per_epoch_store.rs | 15 ++- .../src/authority/authority_store.rs | 2 +- .../src/authority/authority_store_types.rs | 16 +-- .../authority/epoch_start_configuration.rs | 2 +- crates/iota-core/src/authority_aggregator.rs | 4 +- .../checkpoints/checkpoint_executor/mod.rs | 2 +- crates/iota-core/src/checkpoints/mod.rs | 4 +- crates/iota-core/src/connection_monitor.rs | 4 +- crates/iota-core/src/consensus_adapter.rs | 3 +- crates/iota-core/src/epoch/randomness.rs | 5 +- crates/iota-core/src/overload_monitor.rs | 2 +- crates/iota-core/src/stake_aggregator.rs | 2 +- crates/iota-core/src/test_utils.rs | 7 +- crates/iota-core/src/transaction_manager.rs | 3 +- .../iota-core/src/transaction_orchestrator.rs | 2 +- .../unit_tests/authority_aggregator_tests.rs | 4 +- .../src/unit_tests/execution_driver_tests.rs | 2 +- .../unit_tests/transaction_manager_tests.rs | 2 +- .../unit_tests/transfer_to_object_tests.rs | 2 +- .../tests/dynamic_committee_tests.rs | 6 +- .../tests/shared_objects_tests.rs | 1 - .../iota-faucet/src/faucet/simple_faucet.rs | 2 +- crates/iota-genesis-builder/src/lib.rs | 2 +- .../src/stardust/migration/mod.rs | 2 +- crates/iota-graphql-config/src/lib.rs | 2 +- .../iota-graphql-rpc-client/src/response.rs | 4 +- .../src/simple_client.rs | 2 +- crates/iota-graphql-rpc/src/raw_query.rs | 1 - crates/iota-graphql-rpc/src/server/version.rs | 2 +- crates/iota-graphql-rpc/src/types/epoch.rs | 1 - .../iota-graphql-rpc/src/types/move_object.rs | 2 +- crates/iota-graphql-rpc/src/types/object.rs | 4 +- crates/iota-graphql-rpc/src/types/owner.rs | 2 +- .../src/apis/transaction_builder_api.rs | 2 +- crates/iota-indexer/src/models/tx_indices.rs | 2 +- .../iota-indexer/src/store/indexer_store.rs | 2 +- .../src/store/pg_indexer_store.rs | 2 +- crates/iota-indexer/tests/ingestion_tests.rs | 2 +- crates/iota-indexer/tests/rpc-tests/main.rs | 2 +- crates/iota-json-rpc/src/authority_state.rs | 1 - crates/iota-json-rpc/src/axum_router.rs | 1 - .../src/transaction_execution_api.rs | 2 +- .../iota-light-client/src/bin/light_client.rs | 2 +- crates/iota-macros/src/lib.rs | 2 - crates/iota-metrics/src/metrics_network.rs | 2 +- crates/iota-metrics/src/monitored_mpsc.rs | 2 +- crates/iota-network/src/discovery/builder.rs | 1 - crates/iota-network/src/randomness/mod.rs | 4 +- crates/iota-network/src/state_sync/builder.rs | 2 +- crates/iota-network/src/state_sync/server.rs | 2 +- crates/iota-node/src/lib.rs | 2 +- crates/iota-proc-macros/src/lib.rs | 2 +- crates/iota-protocol-config-macros/src/lib.rs | 4 +- crates/iota-protocol-config/src/lib.rs | 2 +- crates/iota-replay/src/fuzz.rs | 2 +- crates/iota-replay/src/replay.rs | 6 +- crates/iota-replay/src/types.rs | 1 - crates/iota-rest-api/src/reader.rs | 2 +- crates/iota-rosetta/src/errors.rs | 1 - crates/iota-rosetta/src/types.rs | 3 - crates/iota-rosetta/tests/gas_budget_tests.rs | 4 +- crates/iota-rpc-loadgen/src/payload/mod.rs | 1 - crates/iota-sdk/examples/utils.rs | 2 +- .../tests/tests.rs | 2 +- crates/iota-swarm/src/memory/swarm.rs | 2 +- crates/iota-tool/src/commands.rs | 1 - crates/iota-tool/src/lib.rs | 3 +- .../iota-transactional-test-runner/src/lib.rs | 1 - crates/iota-types/src/authenticator_state.rs | 3 +- crates/iota-types/src/crypto.rs | 2 +- crates/iota-types/src/effects/effects_v1.rs | 1 - crates/iota-types/src/effects/mod.rs | 1 - crates/iota-types/src/error.rs | 4 +- crates/iota-types/src/gas.rs | 2 +- crates/iota-types/src/gas_model/gas_v1.rs | 3 +- crates/iota-types/src/gas_model/tables.rs | 3 +- crates/iota-types/src/messages_checkpoint.rs | 3 +- crates/iota-types/src/messages_consensus.rs | 1 - crates/iota-types/src/object.rs | 3 - crates/iota-types/src/timelock/mod.rs | 2 +- crates/iota-util-mem-derive/lib.rs | 2 +- crates/iota/src/client_ptb/builder.rs | 2 +- crates/iota/src/genesis_inspector.rs | 5 +- crates/iota/src/iota_commands.rs | 1 - crates/iota/src/keytool.rs | 1 - crates/simulacrum/src/lib.rs | 4 +- crates/simulacrum/src/store/in_mem_store.rs | 1 - crates/telemetry-subscribers/src/lib.rs | 3 +- crates/typed-store-derive/src/lib.rs | 8 +- crates/typed-store/src/rocks/mod.rs | 8 +- examples/tic-tac-toe/cli/src/turn_cap.rs | 7 +- .../latest/iota-adapter/src/gas_charger.rs | 6 +- .../programmable_transactions/execution.rs | 2 +- .../src/object_runtime/object_store.rs | 1 - 128 files changed, 213 insertions(+), 279 deletions(-) diff --git a/consensus/core/src/authority_node.rs b/consensus/core/src/authority_node.rs index b07c487bfac..70f81c271fb 100644 --- a/consensus/core/src/authority_node.rs +++ b/consensus/core/src/authority_node.rs @@ -36,8 +36,8 @@ use crate::{ /// ConsensusAuthority is used by Iota to manage the lifetime of AuthorityNode. /// It hides the details of the implementation from the caller, /// MysticetiManager. -#[allow(private_interfaces)] pub enum ConsensusAuthority { + #[expect(private_interfaces)] WithTonic(AuthorityNode<TonicManager>), } @@ -100,7 +100,7 @@ impl ConsensusAuthority { } } - #[allow(unused)] + #[cfg(test)] fn sync_last_known_own_block_enabled(&self) -> bool { match self { Self::WithTonic(authority) => authority.sync_last_known_own_block, @@ -124,6 +124,7 @@ where broadcaster: Option<Broadcaster>, subscriber: Option<Subscriber<N::Client, AuthorityService<ChannelCoreThreadDispatcher>>>, network_manager: N, + #[cfg(test)] sync_last_known_own_block: bool, } @@ -306,6 +307,7 @@ where broadcaster, subscriber, network_manager, + #[cfg(test)] sync_last_known_own_block, } } diff --git a/consensus/core/src/base_committer.rs b/consensus/core/src/base_committer.rs index 2440f2c513a..bdc9188d1b1 100644 --- a/consensus/core/src/base_committer.rs +++ b/consensus/core/src/base_committer.rs @@ -427,19 +427,19 @@ mod base_committer_builder { } } - #[allow(unused)] + #[expect(unused)] pub(crate) fn with_wave_length(mut self, wave_length: u32) -> Self { self.wave_length = wave_length; self } - #[allow(unused)] + #[expect(unused)] pub(crate) fn with_leader_offset(mut self, leader_offset: u32) -> Self { self.leader_offset = leader_offset; self } - #[allow(unused)] + #[expect(unused)] pub(crate) fn with_round_offset(mut self, round_offset: u32) -> Self { self.round_offset = round_offset; self @@ -447,9 +447,9 @@ mod base_committer_builder { pub(crate) fn build(self) -> BaseCommitter { let options = BaseCommitterOptions { - wave_length: DEFAULT_WAVE_LENGTH, - leader_offset: 0, - round_offset: 0, + wave_length: self.wave_length, + leader_offset: self.leader_offset, + round_offset: self.round_offset, }; BaseCommitter::new( self.context.clone(), diff --git a/consensus/core/src/block_verifier.rs b/consensus/core/src/block_verifier.rs index 74b7a8e4583..843a495fe4d 100644 --- a/consensus/core/src/block_verifier.rs +++ b/consensus/core/src/block_verifier.rs @@ -206,9 +206,10 @@ impl BlockVerifier for SignedBlockVerifier { } } -#[allow(unused)] +#[cfg(test)] pub(crate) struct NoopBlockVerifier; +#[cfg(test)] impl BlockVerifier for NoopBlockVerifier { fn verify(&self, _block: &SignedBlock) -> ConsensusResult<()> { Ok(()) diff --git a/consensus/core/src/commit.rs b/consensus/core/src/commit.rs index 9135fd342e1..fc2221a84b0 100644 --- a/consensus/core/src/commit.rs +++ b/consensus/core/src/commit.rs @@ -91,7 +91,6 @@ impl Commit { pub(crate) trait CommitAPI { fn round(&self) -> Round; fn index(&self) -> CommitIndex; - #[allow(dead_code)] fn previous_digest(&self) -> CommitDigest; fn timestamp_ms(&self) -> BlockTimestampMs; fn leader(&self) -> BlockRef; diff --git a/consensus/core/src/core.rs b/consensus/core/src/core.rs index 8031ddd064a..1446fb656e4 100644 --- a/consensus/core/src/core.rs +++ b/consensus/core/src/core.rs @@ -849,7 +849,7 @@ pub(crate) struct CoreTextFixture { pub core: Core, pub signal_receivers: CoreSignalsReceivers, pub block_receiver: broadcast::Receiver<VerifiedBlock>, - #[allow(unused)] + #[expect(unused)] pub commit_receiver: UnboundedReceiver<CommittedSubDag>, pub store: Arc<MemStore>, } diff --git a/consensus/core/src/leader_schedule.rs b/consensus/core/src/leader_schedule.rs index 62b9e522b98..871f9f5c1ea 100644 --- a/consensus/core/src/leader_schedule.rs +++ b/consensus/core/src/leader_schedule.rs @@ -298,7 +298,7 @@ impl LeaderSwapTable { context: Arc<Context>, // Ignore linter warning in simtests. // TODO: maybe override protocol configs in tests for swap_stake_threshold, and call new(). - #[allow(unused_variables)] swap_stake_threshold: u64, + #[cfg_attr(msim, expect(unused_variables))] swap_stake_threshold: u64, commit_index: CommitIndex, reputation_scores: ReputationScores, ) -> Self { diff --git a/consensus/core/src/leader_scoring_strategy.rs b/consensus/core/src/leader_scoring_strategy.rs index 72b54eb4e9a..366ad857bdf 100644 --- a/consensus/core/src/leader_scoring_strategy.rs +++ b/consensus/core/src/leader_scoring_strategy.rs @@ -11,13 +11,13 @@ use crate::{ stake_aggregator::{QuorumThreshold, StakeAggregator}, }; -#[allow(unused)] pub(crate) trait ScoringStrategy: Send + Sync { fn calculate_scores_for_leader(&self, subdag: &UnscoredSubdag, leader_slot: Slot) -> Vec<u64>; // Based on the scoring strategy there is a minimum number of rounds required // for the scores to be calculated. This method allows that to be set by the // scoring strategy. + #[expect(unused)] fn leader_scoring_round_range(&self, min_round: u32, max_round: u32) -> Range<u32>; } diff --git a/consensus/core/src/network/metrics_layer.rs b/consensus/core/src/network/metrics_layer.rs index c9949830dcf..01c35cc31c5 100644 --- a/consensus/core/src/network/metrics_layer.rs +++ b/consensus/core/src/network/metrics_layer.rs @@ -79,7 +79,7 @@ impl MetricsCallbackMaker { pub(crate) struct MetricsResponseCallback { metrics: Arc<NetworkRouteMetrics>, // The timer is held on to and "observed" once dropped - #[allow(unused)] + #[expect(unused)] timer: HistogramTimer, route: String, excessive_message_size: usize, diff --git a/consensus/core/src/stake_aggregator.rs b/consensus/core/src/stake_aggregator.rs index 4c2a1c8c06a..330939c2873 100644 --- a/consensus/core/src/stake_aggregator.rs +++ b/consensus/core/src/stake_aggregator.rs @@ -12,7 +12,7 @@ pub(crate) trait CommitteeThreshold { pub(crate) struct QuorumThreshold; -#[allow(unused)] +#[cfg(test)] pub(crate) struct ValidityThreshold; impl CommitteeThreshold for QuorumThreshold { @@ -21,6 +21,7 @@ impl CommitteeThreshold for QuorumThreshold { } } +#[cfg(test)] impl CommitteeThreshold for ValidityThreshold { fn is_threshold(committee: &Committee, amount: Stake) -> bool { committee.reached_validity(amount) diff --git a/consensus/core/src/storage/mem_store.rs b/consensus/core/src/storage/mem_store.rs index 656837433f7..602fd2ba4f9 100644 --- a/consensus/core/src/storage/mem_store.rs +++ b/consensus/core/src/storage/mem_store.rs @@ -21,12 +21,10 @@ use crate::{ }; /// In-memory storage for testing. -#[allow(unused)] pub(crate) struct MemStore { inner: RwLock<Inner>, } -#[allow(unused)] struct Inner { blocks: BTreeMap<(Round, AuthorityIndex, BlockDigest), VerifiedBlock>, digests_by_authorities: BTreeSet<(AuthorityIndex, Round, BlockDigest)>, @@ -36,7 +34,6 @@ struct Inner { } impl MemStore { - #[cfg(test)] pub(crate) fn new() -> Self { MemStore { inner: RwLock::new(Inner { diff --git a/consensus/core/src/storage/mod.rs b/consensus/core/src/storage/mod.rs index d83d49cb89e..925ed467fbb 100644 --- a/consensus/core/src/storage/mod.rs +++ b/consensus/core/src/storage/mod.rs @@ -2,6 +2,7 @@ // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 +#[cfg(test)] pub(crate) mod mem_store; pub(crate) mod rocksdb_store; @@ -12,13 +13,12 @@ use consensus_config::AuthorityIndex; use crate::{ CommitIndex, - block::{BlockRef, Round, Slot, VerifiedBlock}, + block::{BlockRef, Round, VerifiedBlock}, commit::{CommitInfo, CommitRange, CommitRef, TrustedCommit}, error::ConsensusResult, }; /// A common interface for consensus storage. -#[allow(unused)] pub(crate) trait Store: Send + Sync { /// Writes blocks, consensus commits and other data to store atomically. fn write(&self, write_batch: WriteBatch) -> ConsensusResult<()>; @@ -31,7 +31,7 @@ pub(crate) trait Store: Send + Sync { /// Checks whether there is any block at the given slot #[allow(dead_code)] - fn contains_block_at_slot(&self, slot: Slot) -> ConsensusResult<bool>; + fn contains_block_at_slot(&self, slot: crate::block::Slot) -> ConsensusResult<bool>; /// Reads blocks for an authority, from start_round. fn scan_blocks_by_author( diff --git a/consensus/core/src/storage/rocksdb_store.rs b/consensus/core/src/storage/rocksdb_store.rs index 39f18a906b7..aa06216318a 100644 --- a/consensus/core/src/storage/rocksdb_store.rs +++ b/consensus/core/src/storage/rocksdb_store.rs @@ -2,7 +2,7 @@ // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use std::{collections::VecDeque, ops::Bound::Included, time::Duration}; +use std::{ops::Bound::Included, time::Duration}; use bytes::Bytes; use consensus_config::AuthorityIndex; @@ -16,7 +16,7 @@ use typed_store::{ use super::{CommitInfo, Store, WriteBatch}; use crate::{ - block::{BlockAPI as _, BlockDigest, BlockRef, Round, SignedBlock, Slot, VerifiedBlock}, + block::{BlockAPI as _, BlockDigest, BlockRef, Round, SignedBlock, VerifiedBlock}, commit::{CommitAPI as _, CommitDigest, CommitIndex, CommitRange, CommitRef, TrustedCommit}, error::{ConsensusError, ConsensusResult}, }; @@ -176,7 +176,7 @@ impl Store for RocksDBStore { Ok(exist) } - fn contains_block_at_slot(&self, slot: Slot) -> ConsensusResult<bool> { + fn contains_block_at_slot(&self, slot: crate::block::Slot) -> ConsensusResult<bool> { let found = self .digests_by_authorities .safe_range_iter(( @@ -222,7 +222,7 @@ impl Store for RocksDBStore { before_round: Option<Round>, ) -> ConsensusResult<Vec<VerifiedBlock>> { let before_round = before_round.unwrap_or(Round::MAX); - let mut refs = VecDeque::new(); + let mut refs = std::collections::VecDeque::new(); for kv in self .digests_by_authorities .safe_range_iter(( diff --git a/consensus/core/src/synchronizer.rs b/consensus/core/src/synchronizer.rs index e928dd246c7..de1c0568960 100644 --- a/consensus/core/src/synchronizer.rs +++ b/consensus/core/src/synchronizer.rs @@ -975,21 +975,16 @@ impl<C: NetworkClient, V: BlockVerifier, D: CoreThreadDispatcher> Synchronizer<C .take(MAX_PEERS * context.parameters.max_blocks_per_fetch) .collect::<Vec<_>>(); - #[allow(unused_mut)] + #[cfg_attr(test, expect(unused_mut))] let mut peers = context .committee .authorities() .filter_map(|(peer_index, _)| (peer_index != context.own_index).then_some(peer_index)) .collect::<Vec<_>>(); - // TODO: probably inject the RNG to allow unit testing - this is a work around - // for now. - cfg_if::cfg_if! { - if #[cfg(not(test))] { - // Shuffle the peers - peers.shuffle(&mut ThreadRng::default()); - } - } + // In test, the order is not randomized + #[cfg(not(test))] + peers.shuffle(&mut ThreadRng::default()); let mut peers = peers.into_iter(); let mut request_futures = FuturesUnordered::new(); diff --git a/consensus/core/src/test_dag_builder.rs b/consensus/core/src/test_dag_builder.rs index 20e4ebe8d79..607c5d65dc8 100644 --- a/consensus/core/src/test_dag_builder.rs +++ b/consensus/core/src/test_dag_builder.rs @@ -76,7 +76,6 @@ use crate::{ /// dag_builder.layer(1).build(); /// dag_builder.print(); // pretty print the entire DAG /// ``` -#[allow(unused)] pub(crate) struct DagBuilder { pub(crate) context: Arc<Context>, pub(crate) leader_schedule: LeaderSchedule, @@ -93,7 +92,6 @@ pub(crate) struct DagBuilder { pipeline: bool, } -#[allow(unused)] impl DagBuilder { pub(crate) fn new(context: Arc<Context>) -> Self { let leader_schedule = LeaderSchedule::new(context.clone(), LeaderSwapTable::default()); @@ -206,25 +204,26 @@ impl DagBuilder { !self.blocks.is_empty(), "No blocks have been created, please make sure that you have called build method" ); - self.blocks - .iter() - .find(|(block_ref, block)| { - block_ref.round == round - && block_ref.author == self.leader_schedule.elect_leader(round, 0) - }) - .map(|(_block_ref, block)| block.clone()) + self.blocks.iter().find_map(|(block_ref, block)| { + (block_ref.round == round + && block_ref.author == self.leader_schedule.elect_leader(round, 0)) + .then_some(block.clone()) + }) } + #[expect(unused)] pub(crate) fn with_wave_length(mut self, wave_length: Round) -> Self { self.wave_length = wave_length; self } + #[expect(unused)] pub(crate) fn with_number_of_leaders(mut self, number_of_leaders: u32) -> Self { self.number_of_leaders = number_of_leaders; self } + #[expect(unused)] pub(crate) fn with_pipeline(mut self, pipeline: bool) -> Self { self.pipeline = pipeline; self @@ -290,7 +289,7 @@ impl DagBuilder { /// Gets all uncommitted blocks in a slot. pub(crate) fn get_uncommitted_blocks_at_slot(&self, slot: Slot) -> Vec<VerifiedBlock> { let mut blocks = vec![]; - for (block_ref, block) in self.blocks.range(( + for (_block_ref, block) in self.blocks.range(( Included(BlockRef::new(slot.round, slot.authority, BlockDigest::MIN)), Included(BlockRef::new(slot.round, slot.authority, BlockDigest::MAX)), )) { @@ -366,7 +365,7 @@ pub struct LayerBuilder<'a> { blocks: Vec<VerifiedBlock>, } -#[allow(unused)] +#[expect(unused)] impl<'a> LayerBuilder<'a> { fn new(dag_builder: &'a mut DagBuilder, start_round: Round) -> Self { assert!(start_round > 0, "genesis round is created by default"); diff --git a/consensus/core/src/transaction.rs b/consensus/core/src/transaction.rs index d2df8a87fe9..f22eeeba635 100644 --- a/consensus/core/src/transaction.rs +++ b/consensus/core/src/transaction.rs @@ -240,9 +240,10 @@ pub enum ValidationError { } /// `NoopTransactionVerifier` accepts all transactions. -#[allow(unused)] +#[cfg(test)] pub(crate) struct NoopTransactionVerifier; +#[cfg(test)] impl TransactionVerifier for NoopTransactionVerifier { fn verify_batch(&self, _batch: &[&[u8]]) -> Result<(), ValidationError> { Ok(()) diff --git a/consensus/core/src/universal_committer.rs b/consensus/core/src/universal_committer.rs index bee37eef92e..970638e868d 100644 --- a/consensus/core/src/universal_committer.rs +++ b/consensus/core/src/universal_committer.rs @@ -182,7 +182,7 @@ pub(crate) mod universal_committer_builder { } } - #[allow(unused)] + #[expect(unused)] pub(crate) fn with_wave_length(mut self, wave_length: Round) -> Self { self.wave_length = wave_length; self diff --git a/crates/iota-analytics-indexer/src/analytics_processor.rs b/crates/iota-analytics-indexer/src/analytics_processor.rs index 7203f5dfe5c..036b25ad188 100644 --- a/crates/iota-analytics-indexer/src/analytics_processor.rs +++ b/crates/iota-analytics-indexer/src/analytics_processor.rs @@ -41,9 +41,9 @@ pub struct AnalyticsProcessor<S: Serialize + ParquetSchema> { metrics: AnalyticsMetrics, config: AnalyticsIndexerConfig, sender: mpsc::Sender<FileMetadata>, - #[allow(dead_code)] + #[expect(dead_code)] kill_sender: oneshot::Sender<()>, - #[allow(dead_code)] + #[expect(dead_code)] max_checkpoint_sender: oneshot::Sender<()>, } diff --git a/crates/iota-archival/src/lib.rs b/crates/iota-archival/src/lib.rs index e4a783b5b25..21938964cc6 100644 --- a/crates/iota-archival/src/lib.rs +++ b/crates/iota-archival/src/lib.rs @@ -52,7 +52,7 @@ use tracing::{error, info}; use crate::reader::{ArchiveReader, ArchiveReaderMetrics}; -#[allow(rustdoc::invalid_html_tags)] +#[expect(rustdoc::invalid_html_tags)] /// Checkpoints and summaries are persisted as blob files. Files are committed /// to local store by duration or file size. Committed files are synced with the /// remote store continuously. Files are optionally compressed with the zstd diff --git a/crates/iota-aws-orchestrator/src/benchmark.rs b/crates/iota-aws-orchestrator/src/benchmark.rs index d53d42e225d..733537adfe7 100644 --- a/crates/iota-aws-orchestrator/src/benchmark.rs +++ b/crates/iota-aws-orchestrator/src/benchmark.rs @@ -103,7 +103,6 @@ pub enum LoadType { /// Search for the breaking point of the L-graph. // TODO: Doesn't work very well, use tps regression as additional signal. - #[allow(dead_code)] Search { /// The initial load to test (and use a baseline). starting_load: usize, diff --git a/crates/iota-aws-orchestrator/src/monitor.rs b/crates/iota-aws-orchestrator/src/monitor.rs index 3a3da4f7a43..335960f8b96 100644 --- a/crates/iota-aws-orchestrator/src/monitor.rs +++ b/crates/iota-aws-orchestrator/src/monitor.rs @@ -220,7 +220,6 @@ impl Grafana { } } -#[allow(dead_code)] /// Bootstrap the grafana with datasource to connect to the given instances. /// NOTE: Only for macOS. Grafana must be installed through homebrew (and not /// from source). Deeper grafana configuration can be done through the @@ -228,7 +227,7 @@ impl Grafana { /// (~/Library/LaunchAgents/homebrew.mxcl.grafana.plist). pub struct LocalGrafana; -#[allow(dead_code)] +#[expect(dead_code)] impl LocalGrafana { /// The default grafana home directory (macOS, homebrew install). const DEFAULT_GRAFANA_HOME: &'static str = "/opt/homebrew/opt/grafana/share/grafana/"; diff --git a/crates/iota-benchmark/src/drivers/mod.rs b/crates/iota-benchmark/src/drivers/mod.rs index d242d6723a3..f442d30a3b8 100644 --- a/crates/iota-benchmark/src/drivers/mod.rs +++ b/crates/iota-benchmark/src/drivers/mod.rs @@ -55,7 +55,6 @@ impl std::fmt::Display for Interval { } // wrapper which implements serde -#[allow(dead_code)] #[derive(Debug)] pub struct HistogramWrapper { histogram: Histogram<u64>, diff --git a/crates/iota-benchmark/src/lib.rs b/crates/iota-benchmark/src/lib.rs index 2b807952799..f715a56f18f 100644 --- a/crates/iota-benchmark/src/lib.rs +++ b/crates/iota-benchmark/src/lib.rs @@ -72,7 +72,7 @@ use tracing::{error, info}; #[derive(Debug)] /// A wrapper on execution results to accommodate different types of /// responses from LocalValidatorAggregatorProxy and FullNodeProxy -#[allow(clippy::large_enum_variant)] +#[expect(clippy::large_enum_variant)] pub enum ExecutionEffects { CertifiedTransactionEffects(CertifiedTransactionEffects, TransactionEvents), IotaTransactionBlockEffects(IotaTransactionBlockEffects), diff --git a/crates/iota-bridge/src/action_executor.rs b/crates/iota-bridge/src/action_executor.rs index be81c44ed10..a1070ae3aab 100644 --- a/crates/iota-bridge/src/action_executor.rs +++ b/crates/iota-bridge/src/action_executor.rs @@ -695,9 +695,8 @@ mod tests { #[tokio::test] #[ignore = "https://github.com/iotaledger/iota/issues/3224"] async fn test_onchain_execution_loop() { - let ( + let SetupData { signing_tx, - _execution_tx, iota_client_mock, mut tx_subscription, store, @@ -707,12 +706,11 @@ mod tests { mock1, mock2, mock3, - _handles, gas_object_ref, iota_address, iota_token_type_tags, - _bridge_pause_tx, - ) = setup().await; + .. + } = setup().await; let (action_certificate, _, _) = get_bridge_authority_approved_action( vec![&mock0, &mock1, &mock2, &mock3], vec![&secrets[0], &secrets[1], &secrets[2], &secrets[3]], @@ -903,9 +901,8 @@ mod tests { #[tokio::test] #[ignore = "https://github.com/iotaledger/iota/issues/3224"] async fn test_signature_aggregation_loop() { - let ( + let SetupData { signing_tx, - _execution_tx, iota_client_mock, mut tx_subscription, store, @@ -915,12 +912,11 @@ mod tests { mock1, mock2, mock3, - _handles, gas_object_ref, iota_address, iota_token_type_tags, - _bridge_pause_tx, - ) = setup().await; + .. + } = setup().await; let id_token_map = (*iota_token_type_tags.load().clone()).clone(); let (action_certificate, iota_tx_digest, iota_tx_event_index) = get_bridge_authority_approved_action( @@ -1030,24 +1026,17 @@ mod tests { #[tokio::test] #[ignore = "https://github.com/iotaledger/iota/issues/3224"] async fn test_skip_request_signature_if_already_processed_on_chain() { - let ( + let SetupData { signing_tx, - _execution_tx, iota_client_mock, mut tx_subscription, store, - _secrets, - _dummy_iota_key, mock0, mock1, mock2, mock3, - _handles, - _gas_object_ref, - _iota_address, - _iota_token_type_tags, - _bridge_pause_tx, - ) = setup().await; + .. + } = setup().await; let iota_tx_digest = TransactionDigest::random(); let iota_tx_event_index = 0; @@ -1101,8 +1090,7 @@ mod tests { #[tokio::test] #[ignore = "https://github.com/iotaledger/iota/issues/3224"] async fn test_skip_tx_submission_if_already_processed_on_chain() { - let ( - _signing_tx, + let SetupData { execution_tx, iota_client_mock, mut tx_subscription, @@ -1113,12 +1101,11 @@ mod tests { mock1, mock2, mock3, - _handles, gas_object_ref, iota_address, iota_token_type_tags, - _bridge_pause_tx, - ) = setup().await; + .. + } = setup().await; let id_token_map = (*iota_token_type_tags.load().clone()).clone(); let (action_certificate, _, _) = get_bridge_authority_approved_action( vec![&mock0, &mock1, &mock2, &mock3], @@ -1188,8 +1175,7 @@ mod tests { #[tokio::test] #[ignore = "https://github.com/iotaledger/iota/issues/3224"] async fn test_skip_tx_submission_if_bridge_is_paused() { - let ( - _signing_tx, + let SetupData { execution_tx, iota_client_mock, mut tx_subscription, @@ -1200,12 +1186,12 @@ mod tests { mock1, mock2, mock3, - _handles, gas_object_ref, iota_address, iota_token_type_tags, bridge_pause_tx, - ) = setup().await; + .. + } = setup().await; let id_token_map: HashMap<u8, TypeTag> = (*iota_token_type_tags.load().clone()).clone(); let (action_certificate, _, _) = get_bridge_authority_approved_action( vec![&mock0, &mock1, &mock2, &mock3], @@ -1290,24 +1276,21 @@ mod tests { async fn test_action_executor_handle_new_token() { let new_token_id = 255u8; // token id that does not exist let new_type_tag = TypeTag::from_str("0xbeef::beef::BEEF").unwrap(); - let ( - _signing_tx, + let SetupData { execution_tx, iota_client_mock, mut tx_subscription, - _store, secrets, dummy_iota_key, mock0, mock1, mock2, mock3, - _handles, gas_object_ref, iota_address, iota_token_type_tags, - _bridge_pause_tx, - ) = setup().await; + .. + } = setup().await; let mut id_token_map: HashMap<u8, TypeTag> = (*iota_token_type_tags.load().clone()).clone(); let (action_certificate, _, _) = get_bridge_authority_approved_action( vec![&mock0, &mock1, &mock2, &mock3], @@ -1501,25 +1484,27 @@ mod tests { } } - #[allow(clippy::type_complexity)] - async fn setup() -> ( - iota_metrics::metered_channel::Sender<BridgeActionExecutionWrapper>, - iota_metrics::metered_channel::Sender<CertifiedBridgeActionExecutionWrapper>, - IotaMockClient, - tokio::sync::broadcast::Receiver<TransactionDigest>, - Arc<BridgeOrchestratorTables>, - Vec<BridgeAuthorityKeyPair>, - IotaKeyPair, - BridgeRequestMockHandler, - BridgeRequestMockHandler, - BridgeRequestMockHandler, - BridgeRequestMockHandler, - Vec<tokio::task::JoinHandle<()>>, - ObjectRef, - IotaAddress, - Arc<ArcSwap<HashMap<u8, TypeTag>>>, - tokio::sync::watch::Sender<IsBridgePaused>, - ) { + struct SetupData { + signing_tx: iota_metrics::metered_channel::Sender<BridgeActionExecutionWrapper>, + execution_tx: iota_metrics::metered_channel::Sender<CertifiedBridgeActionExecutionWrapper>, + iota_client_mock: IotaMockClient, + tx_subscription: tokio::sync::broadcast::Receiver<TransactionDigest>, + store: Arc<BridgeOrchestratorTables>, + secrets: Vec<BridgeAuthorityKeyPair>, + dummy_iota_key: IotaKeyPair, + mock0: BridgeRequestMockHandler, + mock1: BridgeRequestMockHandler, + mock2: BridgeRequestMockHandler, + mock3: BridgeRequestMockHandler, + #[expect(unused)] + handles: Vec<tokio::task::JoinHandle<()>>, + gas_object_ref: ObjectRef, + iota_address: IotaAddress, + iota_token_type_tags: Arc<ArcSwap<HashMap<u8, TypeTag>>>, + bridge_pause_tx: tokio::sync::watch::Sender<IsBridgePaused>, + } + + async fn setup() -> SetupData { telemetry_subscribers::init_for_testing(); let registry = Registry::new(); iota_metrics::init_metrics(®istry); @@ -1578,7 +1563,7 @@ mod tests { let (executor_handle, signing_tx, execution_tx) = executor.run_inner(); handles.extend(executor_handle); - ( + SetupData { signing_tx, execution_tx, iota_client_mock, @@ -1595,6 +1580,6 @@ mod tests { iota_address, iota_token_type_tags, bridge_pause_tx, - ) + } } } diff --git a/crates/iota-bridge/src/e2e_tests/test_utils.rs b/crates/iota-bridge/src/e2e_tests/test_utils.rs index 35195b89d22..a836ae9888f 100644 --- a/crates/iota-bridge/src/e2e_tests/test_utils.rs +++ b/crates/iota-bridge/src/e2e_tests/test_utils.rs @@ -434,7 +434,6 @@ pub async fn get_eth_signer_client_e2e_test_only( Ok((signer_0, private_key_0.to_string())) } -#[allow(dead_code)] #[derive(Debug, Clone)] pub struct DeployedSolContracts { pub iota_bridge: EthAddress, diff --git a/crates/iota-bridge/src/eth_syncer.rs b/crates/iota-bridge/src/eth_syncer.rs index cdbd7bf59a6..2fb109dd0da 100644 --- a/crates/iota-bridge/src/eth_syncer.rs +++ b/crates/iota-bridge/src/eth_syncer.rs @@ -36,7 +36,6 @@ pub struct EthSyncer<P> { /// Map from contract address to their start block. pub type EthTargetAddresses = HashMap<EthAddress, u64>; -#[allow(clippy::new_without_default)] impl<P> EthSyncer<P> where P: ethers::providers::JsonRpcClient + 'static, diff --git a/crates/iota-bridge/src/iota_mock_client.rs b/crates/iota-bridge/src/iota_mock_client.rs index 178e631de03..acf4fa4fd27 100644 --- a/crates/iota-bridge/src/iota_mock_client.rs +++ b/crates/iota-bridge/src/iota_mock_client.rs @@ -30,7 +30,7 @@ use crate::{ }; /// Mock client used in test environments. -#[allow(clippy::type_complexity)] +#[expect(clippy::type_complexity)] #[derive(Clone, Debug)] pub struct IotaMockClient { // the top two fields do not change during tests so we don't need them to be Arc<Mutex>> diff --git a/crates/iota-bridge/src/monitor.rs b/crates/iota-bridge/src/monitor.rs index f2b0a551e51..3d483d216be 100644 --- a/crates/iota-bridge/src/monitor.rs +++ b/crates/iota-bridge/src/monitor.rs @@ -906,7 +906,7 @@ mod tests { .unwrap(); } - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] fn setup() -> ( iota_metrics::metered_channel::Sender<IotaBridgeEvent>, iota_metrics::metered_channel::Receiver<IotaBridgeEvent>, diff --git a/crates/iota-bridge/src/orchestrator.rs b/crates/iota-bridge/src/orchestrator.rs index e0193d15230..8604d0fe28d 100644 --- a/crates/iota-bridge/src/orchestrator.rs +++ b/crates/iota-bridge/src/orchestrator.rs @@ -485,7 +485,7 @@ mod tests { assert_eq!(digests.len(), 2); } - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] fn setup() -> ( iota_metrics::metered_channel::Sender<(Identifier, Vec<IotaEvent>)>, iota_metrics::metered_channel::Receiver<(Identifier, Vec<IotaEvent>)>, diff --git a/crates/iota-bridge/src/server/mock_handler.rs b/crates/iota-bridge/src/server/mock_handler.rs index c986cf4e143..39505eba88f 100644 --- a/crates/iota-bridge/src/server/mock_handler.rs +++ b/crates/iota-bridge/src/server/mock_handler.rs @@ -26,7 +26,7 @@ use crate::{ types::SignedBridgeAction, }; -#[allow(clippy::type_complexity)] +#[expect(clippy::type_complexity)] #[derive(Clone)] pub struct BridgeRequestMockHandler { signer: Arc<ArcSwap<Option<BridgeAuthorityKeyPair>>>, diff --git a/crates/iota-cluster-test/src/lib.rs b/crates/iota-cluster-test/src/lib.rs index b107bc08f3f..855ab846157 100644 --- a/crates/iota-cluster-test/src/lib.rs +++ b/crates/iota-cluster-test/src/lib.rs @@ -50,7 +50,6 @@ pub mod wallet_client; pub use iota_genesis_builder::SnapshotUrl as MigrationSnapshotUrl; -#[allow(unused)] pub struct TestContext { /// Cluster handle that allows access to various components in a cluster cluster: Box<dyn Cluster + Sync + Send>, diff --git a/crates/iota-common/src/sync/async_once_cell.rs b/crates/iota-common/src/sync/async_once_cell.rs index b2759e4ba62..68cf5583271 100644 --- a/crates/iota-common/src/sync/async_once_cell.rs +++ b/crates/iota-common/src/sync/async_once_cell.rs @@ -42,7 +42,7 @@ impl<T: Send + Clone> AsyncOnceCell<T> { } /// Sets the value and notifies waiters. Return error if called twice - #[allow(clippy::result_unit_err)] + #[expect(clippy::result_unit_err)] pub fn set(&self, value: T) -> Result<(), ()> { let mut writer = self.writer.lock(); match writer.take() { diff --git a/crates/iota-common/src/sync/notify_once.rs b/crates/iota-common/src/sync/notify_once.rs index dfeb264ab4b..2c6b2b5eac8 100644 --- a/crates/iota-common/src/sync/notify_once.rs +++ b/crates/iota-common/src/sync/notify_once.rs @@ -35,7 +35,7 @@ impl NotifyOnce { /// After this method all pending and future calls to .wait() will return /// /// This method returns errors if called more then once - #[allow(clippy::result_unit_err)] + #[expect(clippy::result_unit_err)] pub fn notify(&self) -> Result<(), ()> { let Some(notify) = self.notify.lock().take() else { return Err(()); diff --git a/crates/iota-config/src/genesis.rs b/crates/iota-config/src/genesis.rs index 3cb724e34b6..d7c850ca148 100644 --- a/crates/iota-config/src/genesis.rs +++ b/crates/iota-config/src/genesis.rs @@ -586,7 +586,7 @@ pub struct TokenDistributionScheduleBuilder { } impl TokenDistributionScheduleBuilder { - #[allow(clippy::new_without_default)] + #[expect(clippy::new_without_default)] pub fn new() -> Self { Self { pre_minted_supply: 0, diff --git a/crates/iota-core/src/authority.rs b/crates/iota-core/src/authority.rs index bd968065e99..d85c217974f 100644 --- a/crates/iota-core/src/authority.rs +++ b/crates/iota-core/src/authority.rs @@ -784,7 +784,7 @@ pub struct AuthorityState { transaction_manager: Arc<TransactionManager>, /// Shuts down the execution task. Used only in testing. - #[allow(unused)] + #[cfg_attr(not(test), expect(unused))] tx_execution_shutdown: Mutex<Option<oneshot::Sender<()>>>, pub metrics: Arc<AuthorityMetrics>, @@ -1593,7 +1593,7 @@ impl AuthorityState { let transaction_data = &certificate.data().intent_message().value; let (kind, signer, gas) = transaction_data.execution_parts(); - #[allow(unused_mut)] + #[expect(unused_mut)] let (inner_temp_store, _, mut effects, execution_error_opt) = epoch_store.executor().execute_transaction_to_effects( self.get_backing_store().as_ref(), @@ -1860,7 +1860,6 @@ impl AuthorityState { } /// The object ID for gas can be any object ID, even for an uncreated object - #[allow(clippy::collapsible_else_if)] pub async fn dev_inspect_transaction_block( &self, sender: IotaAddress, @@ -2610,7 +2609,7 @@ impl AuthorityState { } } - #[allow(clippy::disallowed_methods)] // allow unbounded_channel() + #[expect(clippy::disallowed_methods)] // allow unbounded_channel() pub async fn new( name: AuthorityName, secret: StableSyncAuthoritySigner, diff --git a/crates/iota-core/src/authority/authority_per_epoch_store.rs b/crates/iota-core/src/authority/authority_per_epoch_store.rs index cc6340a840e..cf080a649d9 100644 --- a/crates/iota-core/src/authority/authority_per_epoch_store.rs +++ b/crates/iota-core/src/authority/authority_per_epoch_store.rs @@ -131,8 +131,8 @@ pub(crate) type EncG = bls12381::G2Element; // retain a distinction anyway. If we need to support distributed object // storage, having this distinction will be useful, as we will most likely have // to re-implement a retry / write-ahead-log at that point. -pub struct CertLockGuard(#[allow(unused)] MutexGuard); -pub struct CertTxGuard(#[allow(unused)] CertLockGuard); +pub struct CertLockGuard(#[expect(unused)] MutexGuard); +pub struct CertTxGuard(#[expect(unused)] CertLockGuard); impl CertTxGuard { pub fn release(self) {} @@ -2273,7 +2273,6 @@ impl AuthorityPerEpochStore { /// /// In addition to the early termination guarantee, this function also /// prevents epoch_terminated() if future is being executed. - #[allow(clippy::result_unit_err)] pub async fn within_alive_epoch<F: Future + Send>(&self, f: F) -> Result<F::Output, ()> { // This guard is kept in the future until it resolves, preventing // `epoch_terminated` to acquire a write lock @@ -2911,7 +2910,7 @@ impl AuthorityPerEpochStore { /// VerifiedCertificates for each executable certificate /// - Or update the state for checkpoint or epoch change protocol. #[instrument(level = "debug", skip_all)] - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] pub(crate) async fn process_consensus_transactions<C: CheckpointServiceNotify>( &self, output: &mut ConsensusCommitOutput, @@ -4103,8 +4102,8 @@ impl LockDetailsWrapper { match self { Self::V1(v1) => v1, - // can remove #[allow] when there are multiple versions - #[allow(unreachable_patterns)] + // can remove #[expect] when there are multiple versions + #[expect(unreachable_patterns)] _ => panic!("lock details should have been migrated to latest version at read time"), } } @@ -4112,8 +4111,8 @@ impl LockDetailsWrapper { match self { Self::V1(v1) => v1, - // can remove #[allow] when there are multiple versions - #[allow(unreachable_patterns)] + // can remove #[expect] when there are multiple versions + #[expect(unreachable_patterns)] _ => panic!("lock details should have been migrated to latest version at read time"), } } diff --git a/crates/iota-core/src/authority/authority_store.rs b/crates/iota-core/src/authority/authority_store.rs index 98d68d84ae1..2ae0de3fb71 100644 --- a/crates/iota-core/src/authority/authority_store.rs +++ b/crates/iota-core/src/authority/authority_store.rs @@ -163,7 +163,7 @@ impl AuthorityStore { let epoch_start_configuration = if perpetual_tables.database_is_empty()? { info!("Creating new epoch start config from genesis"); - #[allow(unused_mut)] + #[expect(unused_mut)] let mut initial_epoch_flags = EpochFlag::default_flags_for_new_epoch(config); fail_point_arg!("initial_epoch_flags", |flags: Vec<EpochFlag>| { info!("Setting initial epoch flags to {:?}", flags); diff --git a/crates/iota-core/src/authority/authority_store_types.rs b/crates/iota-core/src/authority/authority_store_types.rs index b50904ea5c6..d46bd084eca 100644 --- a/crates/iota-core/src/authority/authority_store_types.rs +++ b/crates/iota-core/src/authority/authority_store_types.rs @@ -65,8 +65,8 @@ impl StoreObjectWrapper { match self { Self::V1(v1) => v1, - // can remove #[allow] when there are multiple versions - #[allow(unreachable_patterns)] + // can remove #[expect] when there are multiple versions + #[expect(unreachable_patterns)] _ => panic!("object should have been migrated to latest version at read time"), } } @@ -74,8 +74,8 @@ impl StoreObjectWrapper { match self { Self::V1(v1) => v1, - // can remove #[allow] when there are multiple versions - #[allow(unreachable_patterns)] + // can remove #[expect] when there are multiple versions + #[expect(unreachable_patterns)] _ => panic!("object should have been migrated to latest version at read time"), } } @@ -145,8 +145,8 @@ impl StoreMoveObjectWrapper { match self { Self::V1(v1) => v1, - // can remove #[allow] when there are multiple versions - #[allow(unreachable_patterns)] + // can remove #[expect] when there are multiple versions + #[expect(unreachable_patterns)] _ => panic!("object should have been migrated to latest version at read time"), } } @@ -154,8 +154,8 @@ impl StoreMoveObjectWrapper { match self { Self::V1(v1) => v1, - // can remove #[allow] when there are multiple versions - #[allow(unreachable_patterns)] + // can remove #[expect] when there are multiple versions + #[expect(unreachable_patterns)] _ => panic!("object should have been migrated to latest version at read time"), } } diff --git a/crates/iota-core/src/authority/epoch_start_configuration.rs b/crates/iota-core/src/authority/epoch_start_configuration.rs index 7ae6446577a..26df7d243ae 100644 --- a/crates/iota-core/src/authority/epoch_start_configuration.rs +++ b/crates/iota-core/src/authority/epoch_start_configuration.rs @@ -127,7 +127,7 @@ impl EpochStartConfiguration { })) } - #[allow(unreachable_patterns)] + #[expect(unreachable_patterns)] pub fn new_at_next_epoch_for_testing(&self) -> Self { // We only need to implement this function for the latest version. // When a new version is introduced, this function should be updated. diff --git a/crates/iota-core/src/authority_aggregator.rs b/crates/iota-core/src/authority_aggregator.rs index d7a3f8b6251..f42945e4990 100644 --- a/crates/iota-core/src/authority_aggregator.rs +++ b/crates/iota-core/src/authority_aggregator.rs @@ -287,7 +287,7 @@ pub enum AggregatorProcessCertificateError { /// Groups the errors by error type and stake. pub fn group_errors(errors: Vec<(IotaError, Vec<AuthorityName>, StakeUnit)>) -> GroupedErrors { - #[allow(clippy::mutable_key_type)] + #[expect(clippy::mutable_key_type)] let mut grouped_errors = HashMap::new(); for (error, names, stake) in errors { let entry = grouped_errors.entry(error).or_insert((0, vec![])); @@ -382,7 +382,7 @@ struct ProcessTransactionState { impl ProcessTransactionState { /// Returns the conflicting transaction digest and its validators with the /// most stake. - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] pub fn conflicting_tx_digest_with_most_stake( &self, ) -> Option<( diff --git a/crates/iota-core/src/checkpoints/checkpoint_executor/mod.rs b/crates/iota-core/src/checkpoints/checkpoint_executor/mod.rs index bac30e2396c..d1266c66400 100644 --- a/crates/iota-core/src/checkpoints/checkpoint_executor/mod.rs +++ b/crates/iota-core/src/checkpoints/checkpoint_executor/mod.rs @@ -1002,7 +1002,7 @@ fn extract_end_of_epoch_tx( // Given a checkpoint, filter out any already executed transactions, then return // the remaining execution digests, transaction digests, transactions to be // executed, and randomness rounds (if any) included in the checkpoint. -#[allow(clippy::type_complexity)] +#[expect(clippy::type_complexity)] fn get_unexecuted_transactions( checkpoint: VerifiedCheckpoint, cache_reader: &dyn TransactionCacheRead, diff --git a/crates/iota-core/src/checkpoints/mod.rs b/crates/iota-core/src/checkpoints/mod.rs index 3c819e3c8c6..9ab63227779 100644 --- a/crates/iota-core/src/checkpoints/mod.rs +++ b/crates/iota-core/src/checkpoints/mod.rs @@ -1238,7 +1238,7 @@ impl CheckpointBuilder { Ok(()) } - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] fn split_checkpoint_chunks( &self, effects_and_transaction_sizes: Vec<(TransactionEffects, usize)>, @@ -1924,7 +1924,7 @@ impl CheckpointAggregator { } impl CheckpointSignatureAggregator { - #[allow(clippy::result_unit_err)] + #[expect(clippy::result_unit_err)] pub fn try_aggregate( &mut self, data: CheckpointSignatureMessage, diff --git a/crates/iota-core/src/connection_monitor.rs b/crates/iota-core/src/connection_monitor.rs index a15afd715c4..33224315332 100644 --- a/crates/iota-core/src/connection_monitor.rs +++ b/crates/iota-core/src/connection_monitor.rs @@ -109,9 +109,7 @@ impl ConnectionMonitor { rx.receiver.recv().await } else { // If no shutdown receiver is provided, wait forever. - let future = future::pending(); - #[allow(clippy::let_unit_value)] - let () = future.await; + future::pending::<()>().await; Ok(()) } } diff --git a/crates/iota-core/src/consensus_adapter.rs b/crates/iota-core/src/consensus_adapter.rs index 46e8e9b6875..eb25d7b5137 100644 --- a/crates/iota-core/src/consensus_adapter.rs +++ b/crates/iota-core/src/consensus_adapter.rs @@ -280,7 +280,7 @@ impl ConsensusAdapter { // be a big deal but can be optimized let mut recovered = epoch_store.get_all_pending_consensus_transactions(); - #[allow(clippy::collapsible_if)] // This if can be collapsed but it will be ugly + #[expect(clippy::collapsible_if)] // This if can be collapsed but it will be ugly if epoch_store .get_reconfig_state_read_lock_guard() .is_reject_user_certs() @@ -592,7 +592,6 @@ impl ConsensusAdapter { // care about it } - #[allow(clippy::option_map_unit_fn)] async fn submit_and_wait_inner( self: Arc<Self>, transactions: Vec<ConsensusTransaction>, diff --git a/crates/iota-core/src/epoch/randomness.rs b/crates/iota-core/src/epoch/randomness.rs index e63f4f2a4e8..be323fa4747 100644 --- a/crates/iota-core/src/epoch/randomness.rs +++ b/crates/iota-core/src/epoch/randomness.rs @@ -57,7 +57,6 @@ pub const SINGLETON_KEY: u64 = 0; // Wrappers for DKG messages (to simplify upgrades). #[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)] -#[allow(clippy::large_enum_variant)] pub enum VersionedProcessedMessage { V1(dkg_v1::ProcessedMessage<PkG, EncG>), } @@ -427,7 +426,7 @@ impl RandomnessManager { info!("random beacon: created {msg:?} with dkg version {dkg_version}"); let transaction = ConsensusTransaction::new_randomness_dkg_message(epoch_store.name, &msg); - #[allow(unused_mut)] + #[expect(unused_mut)] let mut fail_point_skip_sending = false; fail_point_if!("rb-dkg", || { // maybe skip sending in simtests @@ -499,7 +498,7 @@ impl RandomnessManager { &conf, ); - #[allow(unused_mut)] + #[expect(unused_mut)] let mut fail_point_skip_sending = false; fail_point_if!("rb-dkg", || { // maybe skip sending in simtests diff --git a/crates/iota-core/src/overload_monitor.rs b/crates/iota-core/src/overload_monitor.rs index 3f155117282..c4e921d15cf 100644 --- a/crates/iota-core/src/overload_monitor.rs +++ b/crates/iota-core/src/overload_monitor.rs @@ -271,7 +271,7 @@ pub fn overload_monitor_accept_tx( } #[cfg(test)] -#[allow(clippy::disallowed_methods)] // allow unbounded_channel() since tests are simulating txn manager execution +#[expect(clippy::disallowed_methods)] // allow unbounded_channel() since tests are simulating txn manager execution // driver interaction. mod tests { use std::sync::Arc; diff --git a/crates/iota-core/src/stake_aggregator.rs b/crates/iota-core/src/stake_aggregator.rs index b8d8907fca0..3269ba384ac 100644 --- a/crates/iota-core/src/stake_aggregator.rs +++ b/crates/iota-core/src/stake_aggregator.rs @@ -301,7 +301,7 @@ impl<K, V, const STRENGTH: bool> MultiStakeAggregator<K, V, STRENGTH> where K: Hash + Eq, { - #[allow(dead_code)] + #[expect(dead_code)] pub fn authorities_for_key(&self, k: &K) -> Option<impl Iterator<Item = &AuthorityName>> { self.stake_maps.get(k).map(|(_, agg)| agg.keys()) } diff --git a/crates/iota-core/src/test_utils.rs b/crates/iota-core/src/test_utils.rs index 809ca04d8c5..4a215adf02a 100644 --- a/crates/iota-core/src/test_utils.rs +++ b/crates/iota-core/src/test_utils.rs @@ -11,7 +11,6 @@ use iota_framework::BuiltInFramework; use iota_genesis_builder::{ genesis_build_effects::GenesisBuildEffects, validator_info::ValidatorInfo, }; -use iota_macros::nondeterministic; use iota_move_build::{BuildConfig, CompiledPackage, IotaPackageHooks}; use iota_protocol_config::ProtocolConfig; use iota_types::{ @@ -94,14 +93,12 @@ pub async fn send_and_confirm_transaction( Ok((certificate.into_inner(), result.into_inner())) } -// note: clippy is confused about this being dead - it appears to only be used -// in cfg(test), but adding #[cfg(test)] causes other targets to fail -#[allow(dead_code)] +#[cfg(test)] pub(crate) fn init_state_parameters_from_rng<R>(rng: &mut R) -> (Genesis, AuthorityKeyPair) where R: rand::CryptoRng + rand::RngCore, { - let dir = nondeterministic!(tempfile::TempDir::new().unwrap()); + let dir = iota_macros::nondeterministic!(tempfile::TempDir::new().unwrap()); let network_config = iota_swarm_config::network_config_builder::ConfigBuilder::new(&dir) .rng(rng) .build(); diff --git a/crates/iota-core/src/transaction_manager.rs b/crates/iota-core/src/transaction_manager.rs index 527897c08e1..0192e28bc37 100644 --- a/crates/iota-core/src/transaction_manager.rs +++ b/crates/iota-core/src/transaction_manager.rs @@ -64,7 +64,7 @@ pub struct TransactionManager { #[derive(Clone, Debug)] pub struct PendingCertificateStats { // The time this certificate enters transaction manager. - #[allow(unused)] + #[cfg(test)] pub enqueue_time: Instant, // The time this certificate becomes ready for execution. pub ready_time: Option<Instant>, @@ -556,6 +556,7 @@ impl TransactionManager { expected_effects_digest, waiting_input_objects: input_object_keys, stats: PendingCertificateStats { + #[cfg(test)] enqueue_time: pending_cert_enqueue_time, ready_time: None, }, diff --git a/crates/iota-core/src/transaction_orchestrator.rs b/crates/iota-core/src/transaction_orchestrator.rs index 5dc3ae32188..9aee380abea 100644 --- a/crates/iota-core/src/transaction_orchestrator.rs +++ b/crates/iota-core/src/transaction_orchestrator.rs @@ -347,7 +347,6 @@ where let digests = [tx_digest]; let effects_await = cache_reader.notify_read_executed_effects(&digests); // let-and-return necessary to satisfy borrow checker. - #[allow(clippy::let_and_return)] let res = match select(ticket, effects_await.boxed()).await { Either::Left((quorum_driver_response, _)) => Ok(quorum_driver_response), Either::Right((_, unfinished_quorum_driver_task)) => { @@ -360,6 +359,7 @@ where Ok(unfinished_quorum_driver_task.await) } }; + #[expect(clippy::let_and_return)] res }) } diff --git a/crates/iota-core/src/unit_tests/authority_aggregator_tests.rs b/crates/iota-core/src/unit_tests/authority_aggregator_tests.rs index bfb2e944747..f0ec7181006 100644 --- a/crates/iota-core/src/unit_tests/authority_aggregator_tests.rs +++ b/crates/iota-core/src/unit_tests/authority_aggregator_tests.rs @@ -661,7 +661,7 @@ async fn test_quorum_once_with_timeout() { ); } -#[allow(clippy::type_complexity)] +#[expect(clippy::type_complexity)] fn get_authorities( count: Arc<Mutex<u32>>, committee_size: u64, @@ -2243,7 +2243,7 @@ async fn test_process_transaction_again() { } } -#[allow(clippy::type_complexity)] +#[expect(clippy::type_complexity)] fn make_fake_authorities() -> ( BTreeMap<AuthorityName, StakeUnit>, BTreeMap<AuthorityName, HandleTransactionTestAuthorityClient>, diff --git a/crates/iota-core/src/unit_tests/execution_driver_tests.rs b/crates/iota-core/src/unit_tests/execution_driver_tests.rs index a2a51628601..50363e411c1 100644 --- a/crates/iota-core/src/unit_tests/execution_driver_tests.rs +++ b/crates/iota-core/src/unit_tests/execution_driver_tests.rs @@ -51,7 +51,7 @@ use crate::{ }, }; -#[allow(dead_code)] +#[expect(dead_code)] async fn wait_for_certs( stream: &mut UnboundedReceiver<VerifiedCertificate>, certs: &[VerifiedCertificate], diff --git a/crates/iota-core/src/unit_tests/transaction_manager_tests.rs b/crates/iota-core/src/unit_tests/transaction_manager_tests.rs index 7868b8d4335..2f6abcaac31 100644 --- a/crates/iota-core/src/unit_tests/transaction_manager_tests.rs +++ b/crates/iota-core/src/unit_tests/transaction_manager_tests.rs @@ -24,7 +24,7 @@ use crate::{ transaction_manager::{PendingCertificate, TransactionManager}, }; -#[allow(clippy::disallowed_methods)] // allow unbounded_channel() +#[expect(clippy::disallowed_methods)] // allow unbounded_channel() fn make_transaction_manager( state: &AuthorityState, ) -> (TransactionManager, UnboundedReceiver<PendingCertificate>) { diff --git a/crates/iota-core/src/unit_tests/transfer_to_object_tests.rs b/crates/iota-core/src/unit_tests/transfer_to_object_tests.rs index 9fab1b9a0ee..61795f7bbf5 100644 --- a/crates/iota-core/src/unit_tests/transfer_to_object_tests.rs +++ b/crates/iota-core/src/unit_tests/transfer_to_object_tests.rs @@ -425,7 +425,7 @@ async fn test_tto_invalid_receiving_arguments() { .find(|(_, owner)| matches!(owner, Owner::ObjectOwner(_))) .unwrap(); - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] let mutations: Vec<( Box<dyn FnOnce(ObjectRef) -> ObjectRef>, Box<dyn FnOnce(UserInputError) -> bool>, diff --git a/crates/iota-e2e-tests/tests/dynamic_committee_tests.rs b/crates/iota-e2e-tests/tests/dynamic_committee_tests.rs index 0558a0e0e7e..c76e4922dbe 100644 --- a/crates/iota-e2e-tests/tests/dynamic_committee_tests.rs +++ b/crates/iota-e2e-tests/tests/dynamic_committee_tests.rs @@ -59,7 +59,7 @@ trait StatePredicate { runner: &StressTestRunner, effects: &TransactionEffects, ); - #[allow(unused)] + #[expect(unused)] async fn post_epoch_post_condition( &mut self, runner: &StressTestRunner, @@ -67,7 +67,7 @@ trait StatePredicate { ); } -#[allow(dead_code)] +#[expect(dead_code)] struct StressTestRunner { pub post_epoch_predicates: Vec<Box<dyn StatePredicate + Send + Sync>>, pub test_cluster: TestCluster, @@ -234,7 +234,7 @@ impl StressTestRunner { self.get_from_effects(&effects.created(), name).await } - #[allow(dead_code)] + #[expect(dead_code)] pub async fn get_mutated_object_of_type_name( &self, effects: &TransactionEffects, diff --git a/crates/iota-e2e-tests/tests/shared_objects_tests.rs b/crates/iota-e2e-tests/tests/shared_objects_tests.rs index 8525b378580..cbabd65cf64 100644 --- a/crates/iota-e2e-tests/tests/shared_objects_tests.rs +++ b/crates/iota-e2e-tests/tests/shared_objects_tests.rs @@ -512,7 +512,6 @@ async fn access_clock_object_test() { assert!(event.timestamp_ms <= finish.as_millis() as u64); let mut attempt = 0; - #[allow(clippy::never_loop)] // seem to be a bug in clippy with let else statement loop { let checkpoint = test_cluster .fullnode_handle diff --git a/crates/iota-faucet/src/faucet/simple_faucet.rs b/crates/iota-faucet/src/faucet/simple_faucet.rs index eafb50d4a4a..b130b529e9d 100644 --- a/crates/iota-faucet/src/faucet/simple_faucet.rs +++ b/crates/iota-faucet/src/faucet/simple_faucet.rs @@ -65,7 +65,7 @@ pub struct SimpleFaucet { ttl_expiration: u64, coin_amount: u64, /// Shuts down the batch transfer task. Used only in testing. - #[allow(unused)] + #[cfg_attr(not(test), expect(unused))] batch_transfer_shutdown: parking_lot::Mutex<Option<oneshot::Sender<()>>>, } diff --git a/crates/iota-genesis-builder/src/lib.rs b/crates/iota-genesis-builder/src/lib.rs index b3725eded9b..ac464c309ce 100644 --- a/crates/iota-genesis-builder/src/lib.rs +++ b/crates/iota-genesis-builder/src/lib.rs @@ -470,7 +470,7 @@ impl Builder { } = self.parameters.to_genesis_chain_parameters(); // In non-testing code, genesis type must always be V1. - #[allow(clippy::infallible_destructuring_match)] + #[expect(clippy::infallible_destructuring_match)] let system_state = match unsigned_genesis.iota_system_object() { IotaSystemState::V1(inner) => inner, #[cfg(msim)] diff --git a/crates/iota-genesis-builder/src/stardust/migration/mod.rs b/crates/iota-genesis-builder/src/stardust/migration/mod.rs index d9a04628723..198da0e1561 100644 --- a/crates/iota-genesis-builder/src/stardust/migration/mod.rs +++ b/crates/iota-genesis-builder/src/stardust/migration/mod.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 mod executor; -#[allow(clippy::module_inception)] +#[expect(clippy::module_inception)] mod migration; mod migration_target_network; #[cfg(test)] diff --git a/crates/iota-graphql-config/src/lib.rs b/crates/iota-graphql-config/src/lib.rs index dac6e6ac1b2..236ef925b8f 100644 --- a/crates/iota-graphql-config/src/lib.rs +++ b/crates/iota-graphql-config/src/lib.rs @@ -17,7 +17,7 @@ use syn::{ /// field that ensures that if the field is not present during deserialization, /// it is replaced with its default value, from the `Default` implementation for /// the config struct. -#[allow(non_snake_case)] +#[expect(non_snake_case)] #[proc_macro_attribute] pub fn GraphQLConfig(_attr: TokenStream, input: TokenStream) -> TokenStream { let DeriveInput { diff --git a/crates/iota-graphql-rpc-client/src/response.rs b/crates/iota-graphql-rpc-client/src/response.rs index 40c24e93cf8..d26cab75d80 100644 --- a/crates/iota-graphql-rpc-client/src/response.rs +++ b/crates/iota-graphql-rpc-client/src/response.rs @@ -40,7 +40,7 @@ impl GraphqlResponse { }) } - #[allow(clippy::result_large_err)] + #[expect(clippy::result_large_err)] pub fn graphql_version(&self) -> Result<String, ClientError> { Ok(self .headers @@ -91,7 +91,7 @@ impl GraphqlResponse { self.full_response.errors.clone() } - #[allow(clippy::result_large_err)] + #[expect(clippy::result_large_err)] pub fn usage(&self) -> Result<Option<BTreeMap<String, u64>>, ClientError> { Ok(match self.full_response.extensions.get("usage").cloned() { Some(Value::Object(obj)) => Some( diff --git a/crates/iota-graphql-rpc-client/src/simple_client.rs b/crates/iota-graphql-rpc-client/src/simple_client.rs index f78f8ca3753..2b5dfac4649 100644 --- a/crates/iota-graphql-rpc-client/src/simple_client.rs +++ b/crates/iota-graphql-rpc-client/src/simple_client.rs @@ -117,7 +117,7 @@ impl SimpleClient { } } -#[allow(clippy::type_complexity, clippy::result_large_err)] +#[expect(clippy::type_complexity, clippy::result_large_err)] pub fn resolve_variables( vars: &[GraphqlQueryVariable], ) -> Result<(BTreeMap<String, String>, BTreeMap<String, Value>), ClientError> { diff --git a/crates/iota-graphql-rpc/src/raw_query.rs b/crates/iota-graphql-rpc/src/raw_query.rs index e6ed4a89b14..ce7bd23b2f6 100644 --- a/crates/iota-graphql-rpc/src/raw_query.rs +++ b/crates/iota-graphql-rpc/src/raw_query.rs @@ -66,7 +66,6 @@ impl RawQuery { /// Adds a `WHERE` condition to the query, combining it with existing /// conditions using `OR`. - #[allow(dead_code)] pub(crate) fn or_filter<T: std::fmt::Display>(mut self, condition: T) -> Self { self.where_ = match self.where_ { Some(where_) => Some(format!("({}) OR {}", where_, condition)), diff --git a/crates/iota-graphql-rpc/src/server/version.rs b/crates/iota-graphql-rpc/src/server/version.rs index ff65114fb7b..b1c58ddcb1d 100644 --- a/crates/iota-graphql-rpc/src/server/version.rs +++ b/crates/iota-graphql-rpc/src/server/version.rs @@ -17,7 +17,7 @@ use crate::{ pub(crate) static VERSION_HEADER: HeaderName = HeaderName::from_static("x-iota-rpc-version"); -#[allow(unused)] +#[expect(unused)] pub(crate) struct IotaRpcVersion(Vec<u8>, Vec<Vec<u8>>); const NAMED_VERSIONS: [&str; 3] = ["beta", "legacy", "stable"]; diff --git a/crates/iota-graphql-rpc/src/types/epoch.rs b/crates/iota-graphql-rpc/src/types/epoch.rs index 20a16d582c8..bbb9607c294 100644 --- a/crates/iota-graphql-rpc/src/types/epoch.rs +++ b/crates/iota-graphql-rpc/src/types/epoch.rs @@ -264,7 +264,6 @@ impl Epoch { ) -> Result<ScanConnection<String, TransactionBlock>> { let page = Page::from_params(ctx.data_unchecked(), first, after, last, before)?; - #[allow(clippy::unnecessary_lazy_evaluations)] // rust-lang/rust-clippy#9422 let Some(filter) = filter .unwrap_or_default() .intersect(TransactionBlockFilter { diff --git a/crates/iota-graphql-rpc/src/types/move_object.rs b/crates/iota-graphql-rpc/src/types/move_object.rs index 8f74494b841..405d9804be7 100644 --- a/crates/iota-graphql-rpc/src/types/move_object.rs +++ b/crates/iota-graphql-rpc/src/types/move_object.rs @@ -52,7 +52,7 @@ pub(crate) enum MoveObjectDowncastError { /// This interface is implemented by types that represent a Move object on-chain /// (A Move value whose type has `key`). -#[allow(clippy::duplicated_attributes)] +#[expect(clippy::duplicated_attributes)] #[derive(Interface)] #[graphql( name = "IMoveObject", diff --git a/crates/iota-graphql-rpc/src/types/object.rs b/crates/iota-graphql-rpc/src/types/object.rs index 4a57b49c764..ae2d53767f3 100644 --- a/crates/iota-graphql-rpc/src/types/object.rs +++ b/crates/iota-graphql-rpc/src/types/object.rs @@ -88,7 +88,7 @@ pub(crate) struct Object { pub(crate) struct ObjectImpl<'o>(pub &'o Object); #[derive(Clone, Debug)] -#[allow(clippy::large_enum_variant)] +#[expect(clippy::large_enum_variant)] pub(crate) enum ObjectKind { /// An object loaded from serialized data, such as the contents of a /// transaction that hasn't been indexed yet. @@ -243,7 +243,7 @@ pub(crate) struct HistoricalObjectCursor { /// Interface implemented by on-chain values that are addressable by an ID (also /// referred to as its address). This includes Move objects and packages. -#[allow(clippy::duplicated_attributes)] +#[expect(clippy::duplicated_attributes)] #[derive(Interface)] #[graphql( name = "IObject", diff --git a/crates/iota-graphql-rpc/src/types/owner.rs b/crates/iota-graphql-rpc/src/types/owner.rs index 8f06599e691..d40b51e39bc 100644 --- a/crates/iota-graphql-rpc/src/types/owner.rs +++ b/crates/iota-graphql-rpc/src/types/owner.rs @@ -56,7 +56,7 @@ pub(crate) struct OwnerImpl { /// either the public key of an account or another object. The same address can /// only refer to an account or an object, never both, but it is not possible to /// know which up-front. -#[allow(clippy::duplicated_attributes)] +#[expect(clippy::duplicated_attributes)] #[derive(Interface)] #[graphql( name = "IOwner", diff --git a/crates/iota-indexer/src/apis/transaction_builder_api.rs b/crates/iota-indexer/src/apis/transaction_builder_api.rs index 274a57a64dc..c72ce245d12 100644 --- a/crates/iota-indexer/src/apis/transaction_builder_api.rs +++ b/crates/iota-indexer/src/apis/transaction_builder_api.rs @@ -21,7 +21,7 @@ pub(crate) struct TransactionBuilderApi<T: R2D2Connection + 'static> { } impl<T: R2D2Connection> TransactionBuilderApi<T> { - #[allow(clippy::new_ret_no_self)] + #[expect(clippy::new_ret_no_self)] pub fn new(inner: IndexerReader<T>) -> IotaTransactionBuilderApi { IotaTransactionBuilderApi::new_with_data_reader(std::sync::Arc::new(Self { inner })) } diff --git a/crates/iota-indexer/src/models/tx_indices.rs b/crates/iota-indexer/src/models/tx_indices.rs index 7ca593b6218..3bc562d01f8 100644 --- a/crates/iota-indexer/src/models/tx_indices.rs +++ b/crates/iota-indexer/src/models/tx_indices.rs @@ -96,7 +96,7 @@ pub struct StoredTxKind { pub tx_sequence_number: i64, } -#[allow(clippy::type_complexity)] +#[expect(clippy::type_complexity)] impl TxIndex { pub fn split( self: TxIndex, diff --git a/crates/iota-indexer/src/store/indexer_store.rs b/crates/iota-indexer/src/store/indexer_store.rs index 00281bc11cf..b41b250f28e 100644 --- a/crates/iota-indexer/src/store/indexer_store.rs +++ b/crates/iota-indexer/src/store/indexer_store.rs @@ -18,7 +18,7 @@ use crate::{ }, }; -#[allow(clippy::large_enum_variant)] +#[expect(clippy::large_enum_variant)] pub enum ObjectChangeToCommit { MutatedObject(StoredObject), DeletedObject(StoredDeletedObject), diff --git a/crates/iota-indexer/src/store/pg_indexer_store.rs b/crates/iota-indexer/src/store/pg_indexer_store.rs index d721a5e95e4..007fa538120 100644 --- a/crates/iota-indexer/src/store/pg_indexer_store.rs +++ b/crates/iota-indexer/src/store/pg_indexer_store.rs @@ -135,7 +135,7 @@ SET object_version = EXCLUDED.object_version, pub struct PgIndexerStoreConfig { pub parallel_chunk_size: usize, pub parallel_objects_chunk_size: usize, - #[allow(unused)] + #[expect(unused)] pub epochs_to_keep: Option<u64>, } diff --git a/crates/iota-indexer/tests/ingestion_tests.rs b/crates/iota-indexer/tests/ingestion_tests.rs index 4ed48a2c0f2..9082703db4c 100644 --- a/crates/iota-indexer/tests/ingestion_tests.rs +++ b/crates/iota-indexer/tests/ingestion_tests.rs @@ -2,7 +2,7 @@ // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -#[allow(dead_code)] +#[expect(dead_code)] #[cfg(feature = "pg_integration")] mod common; #[cfg(feature = "pg_integration")] diff --git a/crates/iota-indexer/tests/rpc-tests/main.rs b/crates/iota-indexer/tests/rpc-tests/main.rs index 0479b12703e..2b6e61a280d 100644 --- a/crates/iota-indexer/tests/rpc-tests/main.rs +++ b/crates/iota-indexer/tests/rpc-tests/main.rs @@ -4,7 +4,7 @@ #[cfg(feature = "shared_test_runtime")] mod coin_api; -#[allow(dead_code)] +#[expect(dead_code)] #[path = "../common/mod.rs"] mod common; #[cfg(feature = "shared_test_runtime")] diff --git a/crates/iota-json-rpc/src/authority_state.rs b/crates/iota-json-rpc/src/authority_state.rs index ef03f6576dd..e2b7df71d96 100644 --- a/crates/iota-json-rpc/src/authority_state.rs +++ b/crates/iota-json-rpc/src/authority_state.rs @@ -354,7 +354,6 @@ impl StateRead for AuthorityState { .await?) } - #[allow(clippy::type_complexity)] async fn dry_exec_transaction( &self, transaction: TransactionData, diff --git a/crates/iota-json-rpc/src/axum_router.rs b/crates/iota-json-rpc/src/axum_router.rs index 5957efdcb0d..8037cda0c3f 100644 --- a/crates/iota-json-rpc/src/axum_router.rs +++ b/crates/iota-json-rpc/src/axum_router.rs @@ -446,7 +446,6 @@ pub mod ws { } async fn ws_json_rpc_handler<L: Logger>(mut socket: WebSocket, service: JsonRpcService<L>) { - #[allow(clippy::disallowed_methods)] let (tx, mut rx) = mpsc::channel::<String>(MAX_WS_MESSAGE_BUFFER); let sink = MethodSink::new_with_limit(tx, MAX_RESPONSE_SIZE); let bounded_subscriptions = BoundedSubscriptions::new(100); diff --git a/crates/iota-json-rpc/src/transaction_execution_api.rs b/crates/iota-json-rpc/src/transaction_execution_api.rs index 0d128dd1914..32c865b5281 100644 --- a/crates/iota-json-rpc/src/transaction_execution_api.rs +++ b/crates/iota-json-rpc/src/transaction_execution_api.rs @@ -71,7 +71,7 @@ impl TransactionExecutionApi { Ok(data) } - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] fn prepare_execute_transaction_block( &self, tx_bytes: Base64, diff --git a/crates/iota-light-client/src/bin/light_client.rs b/crates/iota-light-client/src/bin/light_client.rs index 64f6f97df0b..1db8daab15f 100644 --- a/crates/iota-light-client/src/bin/light_client.rs +++ b/crates/iota-light-client/src/bin/light_client.rs @@ -142,7 +142,7 @@ mod tests { } // clippy ignore dead-code - #[allow(dead_code)] + #[expect(dead_code)] async fn write_full_checkpoint( checkpoint_path: &Path, checkpoint: &CheckpointData, diff --git a/crates/iota-macros/src/lib.rs b/crates/iota-macros/src/lib.rs index 672b381ceb0..366067ff0a4 100644 --- a/crates/iota-macros/src/lib.rs +++ b/crates/iota-macros/src/lib.rs @@ -413,7 +413,6 @@ mod test { #[test] #[should_panic] fn test_macro_overflow() { - #[allow(arithmetic_overflow)] fn f() { println!("{}", i32::MAX + 1); } @@ -603,7 +602,6 @@ mod test { #[test] #[should_panic] fn test_macro_overflow() { - #[allow(arithmetic_overflow)] fn f() { println!("{}", i32::MAX + 1); } diff --git a/crates/iota-metrics/src/metrics_network.rs b/crates/iota-metrics/src/metrics_network.rs index f5cb37402a4..e8131f2434e 100644 --- a/crates/iota-metrics/src/metrics_network.rs +++ b/crates/iota-metrics/src/metrics_network.rs @@ -364,7 +364,7 @@ impl MakeCallbackHandler for MetricsMakeCallbackHandler { pub struct MetricsResponseHandler { metrics: Arc<NetworkMetrics>, // The timer is held on to and "observed" once dropped - #[allow(unused)] + #[expect(unused)] timer: HistogramTimer, route: String, excessive_message_size: usize, diff --git a/crates/iota-metrics/src/monitored_mpsc.rs b/crates/iota-metrics/src/monitored_mpsc.rs index ce15ff7fed3..0806d06590b 100644 --- a/crates/iota-metrics/src/monitored_mpsc.rs +++ b/crates/iota-metrics/src/monitored_mpsc.rs @@ -563,7 +563,7 @@ impl<T> Unpin for UnboundedReceiver<T> {} /// and `UnboundedReceiver` pub fn unbounded_channel<T>(name: &str) -> (UnboundedSender<T>, UnboundedReceiver<T>) { let metrics = get_metrics(); - #[allow(clippy::disallowed_methods)] + #[expect(clippy::disallowed_methods)] let (sender, receiver) = mpsc::unbounded_channel(); ( UnboundedSender { diff --git a/crates/iota-network/src/discovery/builder.rs b/crates/iota-network/src/discovery/builder.rs index 0c7a22ecf86..801d322e1fd 100644 --- a/crates/iota-network/src/discovery/builder.rs +++ b/crates/iota-network/src/discovery/builder.rs @@ -29,7 +29,6 @@ pub struct Builder { } impl Builder { - #[allow(clippy::new_without_default)] pub fn new(trusted_peer_change_rx: watch::Receiver<TrustedPeerChangeEvent>) -> Self { Self { config: None, diff --git a/crates/iota-network/src/randomness/mod.rs b/crates/iota-network/src/randomness/mod.rs index 50ed7c09ee1..3bed5180149 100644 --- a/crates/iota-network/src/randomness/mod.rs +++ b/crates/iota-network/src/randomness/mod.rs @@ -920,7 +920,7 @@ impl RandomnessEventLoop { } } - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] fn remove_partial_sigs_in_range( &mut self, range: ( @@ -952,7 +952,7 @@ impl RandomnessEventLoop { full_sig: Arc<OnceCell<RandomnessSignature>>, ) { // For simtests, we may test not sending partial signatures. - #[allow(unused_mut)] + #[expect(unused_mut)] let mut fail_point_skip_sending = false; fail_point_if!("rb-send-partial-signatures", || { fail_point_skip_sending = true; diff --git a/crates/iota-network/src/state_sync/builder.rs b/crates/iota-network/src/state_sync/builder.rs index 6734aceae26..496e65e08e0 100644 --- a/crates/iota-network/src/state_sync/builder.rs +++ b/crates/iota-network/src/state_sync/builder.rs @@ -32,7 +32,7 @@ pub struct Builder<S> { } impl Builder<()> { - #[allow(clippy::new_without_default)] + #[expect(clippy::new_without_default)] pub fn new() -> Self { Self { store: None, diff --git a/crates/iota-network/src/state_sync/server.rs b/crates/iota-network/src/state_sync/server.rs index 507b34310db..a213c44eec3 100644 --- a/crates/iota-network/src/state_sync/server.rs +++ b/crates/iota-network/src/state_sync/server.rs @@ -234,7 +234,7 @@ where } })?; - struct SemaphoreExtension(#[allow(unused)] OwnedSemaphorePermit); + struct SemaphoreExtension(#[expect(unused)] OwnedSemaphorePermit); inner.call(req).await.map(move |mut response| { // Insert permit as extension so it's not dropped until the response is sent. response diff --git a/crates/iota-node/src/lib.rs b/crates/iota-node/src/lib.rs index 1e2282ea92a..58443bb59e6 100644 --- a/crates/iota-node/src/lib.rs +++ b/crates/iota-node/src/lib.rs @@ -1896,7 +1896,7 @@ impl IotaNode { .store(new_value, Ordering::Relaxed); } - #[allow(unused_variables)] + #[expect(unused_variables)] async fn fetch_jwks( authority: AuthorityName, provider: &OIDCProvider, diff --git a/crates/iota-proc-macros/src/lib.rs b/crates/iota-proc-macros/src/lib.rs index 68e16646ae2..e6542663586 100644 --- a/crates/iota-proc-macros/src/lib.rs +++ b/crates/iota-proc-macros/src/lib.rs @@ -234,7 +234,7 @@ pub fn sim_test(args: TokenStream, item: TokenStream) -> TokenStream { let sig = &input.sig; let body = &input.block; quote! { - #[allow(clippy::needless_return)] + #[expect(clippy::needless_return)] #[tokio::test] #ignore #sig { diff --git a/crates/iota-protocol-config-macros/src/lib.rs b/crates/iota-protocol-config-macros/src/lib.rs index 9d2497e6710..a479c8df658 100644 --- a/crates/iota-protocol-config-macros/src/lib.rs +++ b/crates/iota-protocol-config-macros/src/lib.rs @@ -153,7 +153,7 @@ pub fn accessors_macro(input: TokenStream) -> TokenStream { _ => panic!("Only structs supported."), }; - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] let ((getters, (test_setters, value_setters)), (value_lookup, field_names_str)): ( (Vec<_>, (Vec<_>, Vec<_>)), (Vec<_>, Vec<_>), @@ -201,7 +201,7 @@ pub fn accessors_macro(input: TokenStream) -> TokenStream { } } - #[allow(non_camel_case_types)] + #[expect(non_camel_case_types)] #[derive(Clone, Serialize, Debug, PartialEq, Deserialize, schemars::JsonSchema)] pub enum ProtocolConfigValue { #(#inner_types(#inner_types),)* diff --git a/crates/iota-protocol-config/src/lib.rs b/crates/iota-protocol-config/src/lib.rs index a216a4efefb..77c62e282f3 100644 --- a/crates/iota-protocol-config/src/lib.rs +++ b/crates/iota-protocol-config/src/lib.rs @@ -1150,7 +1150,7 @@ impl ProtocolConfig { /// potentially returning a protocol config that is incorrect for some /// feature flags. Definitely safe for testing and for protocol version /// 11 and prior. - #[allow(non_snake_case)] + #[expect(non_snake_case)] pub fn get_for_max_version_UNSAFE() -> Self { if Self::load_poison_get_for_min_version() { panic!("get_for_max_version_UNSAFE called on validator"); diff --git a/crates/iota-replay/src/fuzz.rs b/crates/iota-replay/src/fuzz.rs index cc2d5a09c58..d041e740ce8 100644 --- a/crates/iota-replay/src/fuzz.rs +++ b/crates/iota-replay/src/fuzz.rs @@ -183,7 +183,7 @@ impl ReplayFuzzer { } } -#[allow(clippy::large_enum_variant)] +#[expect(clippy::large_enum_variant)] #[derive(Debug, Error, Clone)] pub enum ReplayFuzzError { #[error( diff --git a/crates/iota-replay/src/replay.rs b/crates/iota-replay/src/replay.rs index 0c40b5c52ff..b012b4c2cfc 100644 --- a/crates/iota-replay/src/replay.rs +++ b/crates/iota-replay/src/replay.rs @@ -512,7 +512,7 @@ impl LocalExec { } // TODO: remove this after `futures::executor::block_on` is removed. - #[allow(clippy::disallowed_methods)] + #[expect(clippy::disallowed_methods)] pub fn download_object( &self, object_id: &ObjectID, @@ -557,7 +557,7 @@ impl LocalExec { } // TODO: remove this after `futures::executor::block_on` is removed. - #[allow(clippy::disallowed_methods)] + #[expect(clippy::disallowed_methods)] pub fn download_latest_object( &self, object_id: &ObjectID, @@ -593,7 +593,7 @@ impl LocalExec { } } - #[allow(clippy::disallowed_methods)] + #[expect(clippy::disallowed_methods)] pub fn download_object_by_upper_bound( &self, object_id: &ObjectID, diff --git a/crates/iota-replay/src/types.rs b/crates/iota-replay/src/types.rs index 05c90fffe71..43efba9777d 100644 --- a/crates/iota-replay/src/types.rs +++ b/crates/iota-replay/src/types.rs @@ -75,7 +75,6 @@ fn unspecified_chain() -> Chain { Chain::Unknown } -#[allow(clippy::large_enum_variant)] #[derive(Debug, Error, Clone)] pub enum ReplayEngineError { #[error("IotaError: {:#?}", err)] diff --git a/crates/iota-rest-api/src/reader.rs b/crates/iota-rest-api/src/reader.rs index b387f30f832..0446a499a3f 100644 --- a/crates/iota-rest-api/src/reader.rs +++ b/crates/iota-rest-api/src/reader.rs @@ -265,7 +265,7 @@ impl Iterator for CheckpointTransactionsIter { pub struct CursorInfo { pub checkpoint: CheckpointSequenceNumber, pub timestamp_ms: u64, - #[allow(unused)] + #[expect(unused)] pub index: u64, // None if there are no more transactions in the store diff --git a/crates/iota-rosetta/src/errors.rs b/crates/iota-rosetta/src/errors.rs index 8cda43d91b5..854be4f1967 100644 --- a/crates/iota-rosetta/src/errors.rs +++ b/crates/iota-rosetta/src/errors.rs @@ -29,7 +29,6 @@ use crate::types::{BlockHash, IotaEnv, OperationType, PublicKey}; derive(Display, EnumIter), strum(serialize_all = "kebab-case") )] -#[allow(clippy::enum_variant_names)] pub enum Error { #[error("Unsupported blockchain: {0}")] UnsupportedBlockchain(String), diff --git a/crates/iota-rosetta/src/types.rs b/crates/iota-rosetta/src/types.rs index 8f84205fa94..eadf326efdd 100644 --- a/crates/iota-rosetta/src/types.rs +++ b/crates/iota-rosetta/src/types.rs @@ -753,7 +753,6 @@ pub struct BalanceExemption { #[derive(Serialize)] #[serde(rename_all = "snake_case")] -#[allow(dead_code)] pub enum ExemptionType { GreaterOrEqual, LessOrEqual, @@ -762,7 +761,6 @@ pub enum ExemptionType { #[derive(Serialize)] #[serde(rename_all = "snake_case")] -#[allow(clippy::enum_variant_names, dead_code)] pub enum Case { UpperCase, LowerCase, @@ -799,7 +797,6 @@ pub struct RelatedTransaction { #[derive(Serialize, Deserialize, Clone, Debug)] #[serde(rename_all = "lowercase")] -#[allow(dead_code)] pub enum Direction { Forward, Backward, diff --git a/crates/iota-rosetta/tests/gas_budget_tests.rs b/crates/iota-rosetta/tests/gas_budget_tests.rs index 2029cfaa9ef..6c4ee97465f 100644 --- a/crates/iota-rosetta/tests/gas_budget_tests.rs +++ b/crates/iota-rosetta/tests/gas_budget_tests.rs @@ -24,13 +24,13 @@ use test_cluster::TestClusterBuilder; use crate::rosetta_client::RosettaEndpoint; -#[allow(dead_code)] +#[expect(dead_code)] mod rosetta_client; #[derive(Deserialize, Debug)] #[serde(untagged)] enum TransactionIdentifierResponseResult { - #[allow(unused)] + #[expect(unused)] Success(TransactionIdentifierResponse), Error(RosettaSubmitGasError), } diff --git a/crates/iota-rpc-loadgen/src/payload/mod.rs b/crates/iota-rpc-loadgen/src/payload/mod.rs index 64dfa96d5df..57ec8890d06 100644 --- a/crates/iota-rpc-loadgen/src/payload/mod.rs +++ b/crates/iota-rpc-loadgen/src/payload/mod.rs @@ -173,7 +173,6 @@ impl Command { } #[derive(Clone)] -#[allow(dead_code)] pub enum CommandData { DryRun(DryRun), GetCheckpoints(GetCheckpoints), diff --git a/crates/iota-sdk/examples/utils.rs b/crates/iota-sdk/examples/utils.rs index 8c6b914143b..d9de6f91187 100644 --- a/crates/iota-sdk/examples/utils.rs +++ b/crates/iota-sdk/examples/utils.rs @@ -320,7 +320,7 @@ pub async fn sign_and_execute_transaction( // this function should not be used. It is only used to make clippy happy, // and to reduce the number of allow(dead_code) annotations to just this one -#[allow(dead_code)] +#[expect(dead_code)] async fn just_for_clippy() -> Result<(), anyhow::Error> { let (client, sender, _recipient) = setup_for_write().await?; let _digest = split_coin_digest(&client, &sender).await?; diff --git a/crates/iota-source-validation-service/tests/tests.rs b/crates/iota-source-validation-service/tests/tests.rs index 75c934b2e41..c0104ccaacc 100644 --- a/crates/iota-source-validation-service/tests/tests.rs +++ b/crates/iota-source-validation-service/tests/tests.rs @@ -38,7 +38,7 @@ use tokio::sync::oneshot; const LOCALNET_PORT: u16 = 9000; const TEST_FIXTURES_DIR: &str = "tests/fixture"; -#[allow(clippy::await_holding_lock)] +#[expect(clippy::await_holding_lock)] #[tokio::test] #[ignore] async fn test_end_to_end() -> anyhow::Result<()> { diff --git a/crates/iota-swarm/src/memory/swarm.rs b/crates/iota-swarm/src/memory/swarm.rs index 0824335e0e2..11d20ab51c2 100644 --- a/crates/iota-swarm/src/memory/swarm.rs +++ b/crates/iota-swarm/src/memory/swarm.rs @@ -69,7 +69,7 @@ pub struct SwarmBuilder<R = OsRng> { } impl SwarmBuilder { - #[allow(clippy::new_without_default)] + #[expect(clippy::new_without_default)] pub fn new() -> Self { Self { rng: OsRng, diff --git a/crates/iota-tool/src/commands.rs b/crates/iota-tool/src/commands.rs index 18416b2401f..f0c8625a389 100644 --- a/crates/iota-tool/src/commands.rs +++ b/crates/iota-tool/src/commands.rs @@ -488,7 +488,6 @@ async fn check_locked_object( } impl ToolCommand { - #[allow(clippy::format_in_format_args)] pub async fn execute(self, tracing_handle: TracingHandle) -> Result<(), anyhow::Error> { match self { ToolCommand::LockedObject { diff --git a/crates/iota-tool/src/lib.rs b/crates/iota-tool/src/lib.rs index 27fbe1d2839..da8e0de6d03 100644 --- a/crates/iota-tool/src/lib.rs +++ b/crates/iota-tool/src/lib.rs @@ -148,7 +148,7 @@ where } } -#[allow(clippy::type_complexity)] +#[expect(clippy::type_complexity)] pub struct GroupedObjectOutput { pub grouped_results: BTreeMap< Option<( @@ -221,7 +221,6 @@ impl GroupedObjectOutput { } } -#[allow(clippy::format_in_format_args)] impl std::fmt::Display for GroupedObjectOutput { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { writeln!(f, "available stake: {}", self.available_voting_power)?; diff --git a/crates/iota-transactional-test-runner/src/lib.rs b/crates/iota-transactional-test-runner/src/lib.rs index 7e0667e4889..b0527d3b9bf 100644 --- a/crates/iota-transactional-test-runner/src/lib.rs +++ b/crates/iota-transactional-test-runner/src/lib.rs @@ -56,7 +56,6 @@ pub struct ValidatorWithFullnode { pub kv_store: Arc<TransactionKeyValueStore>, } -#[allow(unused_variables)] /// TODO: better name? #[async_trait::async_trait] pub trait TransactionalAdapter: Send + Sync + ReadStore { diff --git a/crates/iota-types/src/authenticator_state.rs b/crates/iota-types/src/authenticator_state.rs index c350b756723..054af6d6d9e 100644 --- a/crates/iota-types/src/authenticator_state.rs +++ b/crates/iota-types/src/authenticator_state.rs @@ -94,11 +94,10 @@ fn jwk_ord(a: &ActiveJwk, b: &ActiveJwk) -> std::cmp::Ordering { } } -#[allow(clippy::non_canonical_partial_ord_impl)] impl std::cmp::PartialOrd for ActiveJwk { // This must match the sort order defined by jwk_lt in authenticator_state.move fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> { - Some(jwk_ord(self, other)) + Some(self.cmp(other)) } } diff --git a/crates/iota-types/src/crypto.rs b/crates/iota-types/src/crypto.rs index a78c50b3ca7..7ea6d2cdece 100644 --- a/crates/iota-types/src/crypto.rs +++ b/crates/iota-types/src/crypto.rs @@ -152,7 +152,7 @@ pub fn verify_proof_of_possession( /// * accounts to interact with Iota. /// * Currently we support eddsa and ecdsa on Iota. -#[allow(clippy::large_enum_variant)] +#[expect(clippy::large_enum_variant)] #[derive(Debug, From, PartialEq, Eq)] pub enum IotaKeyPair { Ed25519(Ed25519KeyPair), diff --git a/crates/iota-types/src/effects/effects_v1.rs b/crates/iota-types/src/effects/effects_v1.rs index 3f3458d42b0..5b7c5848c22 100644 --- a/crates/iota-types/src/effects/effects_v1.rs +++ b/crates/iota-types/src/effects/effects_v1.rs @@ -453,7 +453,6 @@ impl TransactionEffectsV1 { .unwrap() as u32 }); - #[allow(clippy::let_and_return)] let result = Self { status, executed_epoch, diff --git a/crates/iota-types/src/effects/mod.rs b/crates/iota-types/src/effects/mod.rs index 0843ffe0d55..2cab0289a9d 100644 --- a/crates/iota-types/src/effects/mod.rs +++ b/crates/iota-types/src/effects/mod.rs @@ -54,7 +54,6 @@ pub const APPROX_SIZE_OF_OWNER: usize = 48; /// The response from processing a transaction or a certified transaction #[enum_dispatch(TransactionEffectsAPI)] #[derive(Eq, PartialEq, Clone, Debug, Serialize, Deserialize)] -#[allow(clippy::large_enum_variant)] pub enum TransactionEffects { V1(TransactionEffectsV1), } diff --git a/crates/iota-types/src/error.rs b/crates/iota-types/src/error.rs index bb89bc3444d..1b5eab9e489 100644 --- a/crates/iota-types/src/error.rs +++ b/crates/iota-types/src/error.rs @@ -675,7 +675,7 @@ pub enum IotaError { } #[repr(u64)] -#[allow(non_camel_case_types)] +#[expect(non_camel_case_types)] #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)] /// Sub-status codes for the `UNKNOWN_VERIFICATION_ERROR` VM Status Code which /// provides more context TODO: add more Vm Status errors. We use @@ -686,7 +686,7 @@ pub enum VMMVerifierErrorSubStatusCode { } #[repr(u64)] -#[allow(non_camel_case_types)] +#[expect(non_camel_case_types)] #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, PartialOrd, Ord)] /// Sub-status codes for the `MEMORY_LIMIT_EXCEEDED` VM Status Code which /// provides more context diff --git a/crates/iota-types/src/gas.rs b/crates/iota-types/src/gas.rs index 5763c16de35..b8996eae528 100644 --- a/crates/iota-types/src/gas.rs +++ b/crates/iota-types/src/gas.rs @@ -201,7 +201,7 @@ pub mod checked { self.gas_used() as i64 - self.storage_rebate as i64 } - #[allow(clippy::type_complexity)] + #[expect(clippy::type_complexity)] pub fn new_from_txn_effects<'a>( transactions: impl Iterator<Item = &'a TransactionEffects>, ) -> GasCostSummary { diff --git a/crates/iota-types/src/gas_model/gas_v1.rs b/crates/iota-types/src/gas_model/gas_v1.rs index da872086f33..f173d7f7425 100644 --- a/crates/iota-types/src/gas_model/gas_v1.rs +++ b/crates/iota-types/src/gas_model/gas_v1.rs @@ -26,7 +26,7 @@ mod checked { /// After execution a call to `GasStatus::bucketize` will round the /// computation cost to `cost` for the bucket ([`min`, `max`]) the gas /// used falls into. - #[allow(dead_code)] + #[expect(dead_code)] pub(crate) struct ComputationBucket { min: u64, max: u64, @@ -165,7 +165,6 @@ mod checked { pub new_size: u64, } - #[allow(dead_code)] #[derive(Debug)] pub struct IotaGasStatus { // GasStatus as used by the VM, that is all the VM sees diff --git a/crates/iota-types/src/gas_model/tables.rs b/crates/iota-types/src/gas_model/tables.rs index 5959704e61b..77ad4819e9b 100644 --- a/crates/iota-types/src/gas_model/tables.rs +++ b/crates/iota-types/src/gas_model/tables.rs @@ -49,7 +49,6 @@ pub static INITIAL_COST_SCHEDULE: Lazy<CostTable> = Lazy::new(initial_cost_sched /// Provide all the proper guarantees about gas metering in the Move VM. /// /// Every client must use an instance of this type to interact with the Move VM. -#[allow(dead_code)] #[derive(Debug)] pub struct GasStatus { pub gas_model_version: u64, @@ -151,7 +150,7 @@ impl GasStatus { InternalGas::new(val * Self::INTERNAL_UNIT_MULTIPLIER) } - #[allow(dead_code)] + #[expect(dead_code)] fn to_nanos(&self, val: InternalGas) -> u64 { let gas: Gas = InternalGas::to_unit_round_down(val); u64::from(gas) * self.gas_price diff --git a/crates/iota-types/src/messages_checkpoint.rs b/crates/iota-types/src/messages_checkpoint.rs index 50a9f25d252..78cdffaeba2 100644 --- a/crates/iota-types/src/messages_checkpoint.rs +++ b/crates/iota-types/src/messages_checkpoint.rs @@ -60,7 +60,7 @@ pub struct CheckpointRequest { pub certified: bool, } -#[allow(clippy::large_enum_variant)] +#[expect(clippy::large_enum_variant)] #[derive(Clone, Debug, Serialize, Deserialize)] pub enum CheckpointSummaryResponse { Certified(CertifiedCheckpointSummary), @@ -76,7 +76,6 @@ impl CheckpointSummaryResponse { } } -#[allow(clippy::large_enum_variant)] #[derive(Clone, Debug, Serialize, Deserialize)] pub struct CheckpointResponse { pub checkpoint: Option<CheckpointSummaryResponse>, diff --git a/crates/iota-types/src/messages_consensus.rs b/crates/iota-types/src/messages_consensus.rs index 77323a54518..a87ede12052 100644 --- a/crates/iota-types/src/messages_consensus.rs +++ b/crates/iota-types/src/messages_consensus.rs @@ -217,7 +217,6 @@ impl ConsensusTransactionKind { } #[derive(Clone, PartialEq, Eq, Serialize, Deserialize)] -#[allow(clippy::large_enum_variant)] pub enum VersionedDkgMessage { V1(dkg_v1::Message<bls12381::G2Element, bls12381::G2Element>), } diff --git a/crates/iota-types/src/object.rs b/crates/iota-types/src/object.rs index 4cfe292d222..63ef7c06824 100644 --- a/crates/iota-types/src/object.rs +++ b/crates/iota-types/src/object.rs @@ -375,7 +375,6 @@ impl MoveObject { } #[derive(Eq, PartialEq, Debug, Clone, Deserialize, Serialize, Hash)] -#[allow(clippy::large_enum_variant)] pub enum Data { /// An object whose governing logic lives in a published Move module Move(MoveObject), @@ -1058,7 +1057,6 @@ pub fn generate_test_gas_objects() -> Vec<Object> { GAS_OBJECTS.with(|v| v.clone()) } -#[allow(clippy::large_enum_variant)] #[derive(Serialize, Deserialize, Debug)] #[serde(tag = "status", content = "details")] pub enum ObjectRead { @@ -1117,7 +1115,6 @@ impl Display for ObjectRead { } } -#[allow(clippy::large_enum_variant)] #[derive(Serialize, Deserialize, Debug)] #[serde(tag = "status", content = "details")] pub enum PastObjectRead { diff --git a/crates/iota-types/src/timelock/mod.rs b/crates/iota-types/src/timelock/mod.rs index ad30def1808..9fa70613509 100644 --- a/crates/iota-types/src/timelock/mod.rs +++ b/crates/iota-types/src/timelock/mod.rs @@ -3,7 +3,7 @@ pub mod label; pub mod stardust_upgrade_label; -#[allow(clippy::module_inception)] +#[expect(clippy::module_inception)] pub mod timelock; pub mod timelocked_staked_iota; pub mod timelocked_staking; diff --git a/crates/iota-util-mem-derive/lib.rs b/crates/iota-util-mem-derive/lib.rs index d2f308c2e52..83939225beb 100644 --- a/crates/iota-util-mem-derive/lib.rs +++ b/crates/iota-util-mem-derive/lib.rs @@ -76,7 +76,7 @@ fn malloc_size_of_derive(s: synstructure::Structure) -> proc_macro2::TokenStream let tokens = quote! { impl #impl_generics iota_util_mem::MallocSizeOf for #name #ty_generics #where_clause { #[inline] - #[allow(unused_variables, unused_mut, unreachable_code)] + #[expect(unused_variables, unused_mut, unreachable_code)] fn size_of(&self, ops: &mut iota_util_mem::MallocSizeOfOps) -> usize { let mut sum = 0; match *self { diff --git a/crates/iota/src/client_ptb/builder.rs b/crates/iota/src/client_ptb/builder.rs index b8678f11e26..c64514e2f48 100644 --- a/crates/iota/src/client_ptb/builder.rs +++ b/crates/iota/src/client_ptb/builder.rs @@ -1163,7 +1163,7 @@ pub(crate) fn display_did_you_mean<S: AsRef<str> + std::fmt::Display>( // This lint is disabled because it's not good and doesn't look at what you're // actually iterating over. This seems to be a common problem with this lint. // See e.g., https://github.com/rust-lang/rust-clippy/issues/6075 -#[allow(clippy::needless_range_loop)] +#[expect(clippy::needless_range_loop)] fn edit_distance(a: &str, b: &str) -> usize { let mut cache = vec![vec![0; b.len() + 1]; a.len() + 1]; diff --git a/crates/iota/src/genesis_inspector.rs b/crates/iota/src/genesis_inspector.rs index 6cba3824f43..5ebfacb50f1 100644 --- a/crates/iota/src/genesis_inspector.rs +++ b/crates/iota/src/genesis_inspector.rs @@ -27,7 +27,6 @@ const STR_IOTA_DISTRIBUTION: &str = "Iota Distribution"; const STR_OBJECTS: &str = "Objects"; const STR_VALIDATORS: &str = "Validators"; -#[allow(clippy::or_fun_call)] pub(crate) fn examine_genesis_checkpoint(genesis: UnsignedGenesis) { let system_object = genesis .iota_system_object() @@ -52,7 +51,7 @@ pub(crate) fn examine_genesis_checkpoint(genesis: UnsignedGenesis) { let mut iota_distribution = BTreeMap::new(); let entry = iota_distribution .entry("Iota System".to_string()) - .or_insert(BTreeMap::new()); + .or_insert_with(BTreeMap::new); entry.insert( "Storage Fund".to_string(), ( @@ -150,7 +149,7 @@ pub(crate) fn examine_genesis_checkpoint(genesis: UnsignedGenesis) { } } -#[allow(clippy::ptr_arg)] +#[expect(clippy::ptr_arg)] fn examine_validators( validator_options: &Vec<&str>, validator_map: &BTreeMap<&str, &IotaValidatorGenesis>, diff --git a/crates/iota/src/iota_commands.rs b/crates/iota/src/iota_commands.rs index 54cad050dae..e607b8dc183 100644 --- a/crates/iota/src/iota_commands.rs +++ b/crates/iota/src/iota_commands.rs @@ -146,7 +146,6 @@ impl IndexerFeatureArgs { } } -#[allow(clippy::large_enum_variant)] #[derive(Parser)] #[clap(rename_all = "kebab-case")] pub enum IotaCommand { diff --git a/crates/iota/src/keytool.rs b/crates/iota/src/keytool.rs index 246848e4c10..95b5c427139 100644 --- a/crates/iota/src/keytool.rs +++ b/crates/iota/src/keytool.rs @@ -59,7 +59,6 @@ use crate::key_identity::{KeyIdentity, get_identity_address_from_keystore}; #[path = "unit_tests/keytool_tests.rs"] mod keytool_tests; -#[allow(clippy::large_enum_variant)] #[derive(Subcommand)] #[clap(rename_all = "kebab-case")] pub enum KeyToolCommand { diff --git a/crates/simulacrum/src/lib.rs b/crates/simulacrum/src/lib.rs index 6a09576cc08..2165600de93 100644 --- a/crates/simulacrum/src/lib.rs +++ b/crates/simulacrum/src/lib.rs @@ -67,7 +67,7 @@ use self::{epoch_state::EpochState, store::in_mem_store::KeyStore}; pub struct Simulacrum<R = OsRng, Store: SimulatorStore = InMemoryStore> { rng: R, keystore: KeyStore, - #[allow(unused)] + #[expect(unused)] genesis: genesis::Genesis, store: Store, checkpoint_builder: MockCheckpointBuilder, @@ -83,7 +83,7 @@ pub struct Simulacrum<R = OsRng, Store: SimulatorStore = InMemoryStore> { impl Simulacrum { /// Create a new, random Simulacrum instance using an `OsRng` as the source /// of randomness. - #[allow(clippy::new_without_default)] + #[expect(clippy::new_without_default)] pub fn new() -> Self { Self::new_with_rng(OsRng) } diff --git a/crates/simulacrum/src/store/in_mem_store.rs b/crates/simulacrum/src/store/in_mem_store.rs index cd05dc3e8a4..9433000e28d 100644 --- a/crates/simulacrum/src/store/in_mem_store.rs +++ b/crates/simulacrum/src/store/in_mem_store.rs @@ -329,7 +329,6 @@ impl ObjectStore for InMemoryStore { #[derive(Debug)] pub struct KeyStore { validator_keys: BTreeMap<AuthorityName, AuthorityKeyPair>, - #[allow(unused)] account_keys: BTreeMap<IotaAddress, AccountKeyPair>, } diff --git a/crates/telemetry-subscribers/src/lib.rs b/crates/telemetry-subscribers/src/lib.rs index acebb2fb213..03ce9b0ba6c 100644 --- a/crates/telemetry-subscribers/src/lib.rs +++ b/crates/telemetry-subscribers/src/lib.rs @@ -69,9 +69,10 @@ pub struct TelemetryConfig { } #[must_use] -#[allow(dead_code)] pub struct TelemetryGuards { + #[expect(unused)] worker_guard: WorkerGuard, + #[expect(unused)] provider: Option<TracerProvider>, } diff --git a/crates/typed-store-derive/src/lib.rs b/crates/typed-store-derive/src/lib.rs index 9c61652616a..e1997e40824 100644 --- a/crates/typed-store-derive/src/lib.rs +++ b/crates/typed-store-derive/src/lib.rs @@ -380,7 +380,7 @@ pub fn derive_dbmap_utils_general(input: TokenStream) -> TokenStream { /// Only one process is allowed to do this at a time /// `global_db_options_override` apply to the whole DB /// `tables_db_options_override` apply to each table. If `None`, the attributes from `default_options_override_fn` are used if any - #[allow(unused_parens)] + #[expect(unused_parens)] pub fn open_tables_read_write( path: std::path::PathBuf, metric_conf: typed_store::rocks::MetricConf, @@ -395,7 +395,7 @@ pub fn derive_dbmap_utils_general(input: TokenStream) -> TokenStream { } } - #[allow(unused_parens)] + #[expect(unused_parens)] pub fn open_tables_read_write_with_deprecation_option( path: std::path::PathBuf, metric_conf: typed_store::rocks::MetricConf, @@ -415,7 +415,7 @@ pub fn derive_dbmap_utils_general(input: TokenStream) -> TokenStream { /// Only one process is allowed to do this at a time /// `global_db_options_override` apply to the whole DB /// `tables_db_options_override` apply to each table. If `None`, the attributes from `default_options_override_fn` are used if any - #[allow(unused_parens)] + #[expect(unused_parens)] pub fn open_tables_transactional( path: std::path::PathBuf, metric_conf: typed_store::rocks::MetricConf, @@ -794,7 +794,7 @@ pub fn derive_sallydb_general(input: TokenStream) -> TokenStream { /// Only one process is allowed to do this at a time /// `global_db_options_override` apply to the whole DB /// `tables_db_options_override` apply to each table. If `None`, the attributes from `default_options_override_fn` are used if any - #[allow(unused_parens)] + #[expect(unused_parens)] pub fn init( db_options: typed_store::sally::SallyDBOptions ) -> Self { diff --git a/crates/typed-store/src/rocks/mod.rs b/crates/typed-store/src/rocks/mod.rs index d142afddf15..3787e540cfd 100644 --- a/crates/typed-store/src/rocks/mod.rs +++ b/crates/typed-store/src/rocks/mod.rs @@ -351,7 +351,7 @@ impl RocksDB { fail_point!("delete-cf-before"); let ret = delegate_call!(self.delete_cf_opt(cf, key, writeopts)); fail_point!("delete-cf-after"); - #[allow(clippy::let_and_return)] + #[expect(clippy::let_and_return)] ret } @@ -373,7 +373,7 @@ impl RocksDB { fail_point!("put-cf-before"); let ret = delegate_call!(self.put_cf_opt(cf, key, value, writeopts)); fail_point!("put-cf-after"); - #[allow(clippy::let_and_return)] + #[expect(clippy::let_and_return)] ret } @@ -414,7 +414,7 @@ impl RocksDB { )), }; fail_point!("batch-write-after"); - #[allow(clippy::let_and_return)] + #[expect(clippy::let_and_return)] ret } @@ -2837,7 +2837,7 @@ fn is_max(v: &[u8]) -> bool { v.iter().all(|&x| x == u8::MAX) } -#[allow(clippy::assign_op_pattern)] +#[expect(clippy::assign_op_pattern)] #[test] fn test_helpers() { let v = vec![]; diff --git a/examples/tic-tac-toe/cli/src/turn_cap.rs b/examples/tic-tac-toe/cli/src/turn_cap.rs index 73af874cc6e..9ee96ed8435 100644 --- a/examples/tic-tac-toe/cli/src/turn_cap.rs +++ b/examples/tic-tac-toe/cli/src/turn_cap.rs @@ -2,12 +2,11 @@ // Modifications Copyright (c) 2024 IOTA Stiftung // SPDX-License-Identifier: Apache-2.0 -use serde::Deserialize; use iota_types::base_types::ObjectID; +use serde::Deserialize; -/// Rust representation of a Move `owned::TurnCap`, suitable for deserializing from their BCS -/// representation. -#[allow(dead_code)] +/// Rust representation of a Move `owned::TurnCap`, suitable for deserializing +/// from their BCS representation. #[derive(Deserialize)] pub(crate) struct TurnCap { pub id: ObjectID, diff --git a/iota-execution/latest/iota-adapter/src/gas_charger.rs b/iota-execution/latest/iota-adapter/src/gas_charger.rs index d83e38ba39b..be082050188 100644 --- a/iota-execution/latest/iota-adapter/src/gas_charger.rs +++ b/iota-execution/latest/iota-adapter/src/gas_charger.rs @@ -28,14 +28,14 @@ pub mod checked { /// All the information about gas is stored in this object. /// The objective here is two-fold: /// 1- Isolate al version info into a single entry point. This file and the - /// other gas related files are the only one that check for gas + /// other gas related files are the only one that check for gas /// version. 2- Isolate all gas accounting into a single implementation. - /// Gas objects are not passed around, and they are retrieved from + /// Gas objects are not passed around, and they are retrieved from /// this instance. - #[allow(dead_code)] #[derive(Debug)] pub struct GasCharger { tx_digest: TransactionDigest, + #[expect(unused)] gas_model_version: u64, gas_coins: Vec<ObjectRef>, // this is the first gas coin in `gas_coins` and the one that all others will diff --git a/iota-execution/latest/iota-adapter/src/programmable_transactions/execution.rs b/iota-execution/latest/iota-adapter/src/programmable_transactions/execution.rs index b382a447ffc..60dff0ae180 100644 --- a/iota-execution/latest/iota-adapter/src/programmable_transactions/execution.rs +++ b/iota-execution/latest/iota-adapter/src/programmable_transactions/execution.rs @@ -844,7 +844,7 @@ mod checked { /// instances using the protocol's binary configuration. The function /// ensures that the module list is not empty and converts any /// deserialization errors into an `ExecutionError`. - #[allow(clippy::extra_unused_type_parameters)] + #[expect(clippy::extra_unused_type_parameters)] fn deserialize_modules<Mode: ExecutionMode>( context: &mut ExecutionContext<'_, '_, '_>, module_bytes: &[Vec<u8>], diff --git a/iota-execution/latest/iota-move-natives/src/object_runtime/object_store.rs b/iota-execution/latest/iota-move-natives/src/object_runtime/object_store.rs index 50ef7d78cc3..fcada9506e3 100644 --- a/iota-execution/latest/iota-move-natives/src/object_runtime/object_store.rs +++ b/iota-execution/latest/iota-move-natives/src/object_runtime/object_store.rs @@ -229,7 +229,6 @@ impl Inner<'_> { Ok(obj_opt) } - #[allow(clippy::map_entry)] fn get_or_fetch_object_from_store( &mut self, parent: ObjectID, From 5ede92911bac533489ae3f8387a8755a6b7d6a29 Mon Sep 17 00:00:00 2001 From: Marc Espin <mespinsanz@gmail.com> Date: Mon, 16 Dec 2024 15:03:33 +0100 Subject: [PATCH 28/28] fix(pnpm): Lock ws to 8.18.0 (#4469) --- package.json | 3 ++- pnpm-lock.yaml | 59 +++++--------------------------------------------- 2 files changed, 8 insertions(+), 54 deletions(-) diff --git a/package.json b/package.json index 653580fe2fc..76d65042397 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,8 @@ "eslint": "8.57.1", "mermaid@10.9.1": "10.9.3", "http-proxy-middleware": "2.0.7", - "cross-spawn": "7.0.5" + "cross-spawn": "7.0.5", + "ws": "8.18.0" } }, "engines": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e765a5f6859..6aba893215d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,6 +21,7 @@ overrides: mermaid@10.9.1: 10.9.3 http-proxy-middleware: 2.0.7 cross-spawn: 7.0.5 + ws: 8.18.0 importers: @@ -2019,7 +2020,7 @@ importers: specifier: ^7.2.0 version: 7.2.0 ws: - specifier: ^8.18.0 + specifier: 8.18.0 version: 8.18.0 sdk/wallet-standard: @@ -8201,9 +8202,6 @@ packages: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true - async-limiter@1.0.1: - resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} - async@3.2.2: resolution: {integrity: sha512-H0E+qZaDEfx/FY4t7iLRv1W2fFI6+pyCeTw1uN20AQPiwqwM6ojPxHxdLv4z8hi2DtnW9BOckSspLucW7pIE5g==} @@ -11593,7 +11591,7 @@ packages: isomorphic-ws@5.0.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: - ws: '*' + ws: 8.18.0 isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} @@ -16666,41 +16664,6 @@ packages: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - ws@6.2.3: - resolution: {integrity: sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} @@ -25625,8 +25588,6 @@ snapshots: astring@1.9.0: {} - async-limiter@1.0.1: {} - async@3.2.2: {} asynckit@0.4.0: {} @@ -32813,7 +32774,7 @@ snapshots: progress: 2.0.3 proxy-from-env: 1.1.0 rimraf: 2.7.1 - ws: 6.2.3 + ws: 8.18.0 transitivePeerDependencies: - bufferutil - supports-color @@ -35734,7 +35695,7 @@ snapshots: tmp: 0.2.1 update-notifier: 6.0.2 watchpack: 2.4.0 - ws: 8.13.0 + ws: 8.18.0 yargs: 17.7.1 zip-dir: 2.0.0 transitivePeerDependencies: @@ -36009,7 +35970,7 @@ snapshots: opener: 1.5.2 picocolors: 1.1.0 sirv: 2.0.4 - ws: 7.5.10 + ws: 8.18.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -36368,14 +36329,6 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 3.0.7 - ws@6.2.3: - dependencies: - async-limiter: 1.0.1 - - ws@7.5.10: {} - - ws@8.13.0: {} - ws@8.18.0: {} xdg-basedir@5.1.0: {}